【问题标题】:Flutter - How to fetch and display pdf from AWS?Flutter - 如何从 AWS 获取和显示 pdf?
【发布时间】:2021-06-14 10:07:49
【问题描述】:

我想使用返回列的 ListView.builder 获取和显示 pdf。 pdf 来自 AWS(云文件存储)。但是,每当我尝试添加等待和异步时,代码就会变成红色。我对此还是陌生的。您对我如何在其他班级查看此 pdf 有什么建议吗?

从数据库中获取数据。工作正常。

List _babyList = List();

Future<void> getApplicantInfo() async {
AuthService().getRequestorApplicants().then((val) async {
  requestorApplicants.clear();
  _babyList.clear();
  for (var i = 0; i < val.data.length; i++) {
    var temp = val.data[i];
    setState(() {
      _babyList.add(temp['medicalcertificate']);
    });
  }
});

显示 _babyList 文件(整个代码变红。)

        : ListView.builder (
            itemCount: _babyList.length,
            itemBuilder: (BuildContext context, int index) async{
              return Padding (
                padding: EdgeInsets.all(20),
                child: Column(
                  children: <Widget>[
                    _babyList[0][index].toString().split('.').last == 'jpg'
                        ? Image.network(_babyList[0][index])
                        : PDFViewer(
                            document: await PDFDocument.fromURL(_babyList[0][index]),
                          ),
                  ],
                ),
              );
            }),

pubspec.yaml 中的依赖项

advance_pdf_viewer:

这是我打印时 _babyList() 的值。

[[https://team-uploads.s3.us-east-2.amazonaws.com/medicalcertificate/THIS-IS-JUST-SAMPLE-DO-NOT-COPY-1.jpg, https://team-uploads.s3.us-east-2.amazonaws.com/medicalcertificate/THIS-IS-JUST-A-SAMPLE-DO-NOT-COPY.pdf]] 

(已编辑) 错误消息:

lib/admin/applicants/applicantsModule.dart:1117:30: Error: The argument type 'Future<Padding> Function(BuildContext, int)' can't be assigned to the parameter type 'Widget Function(BuildContext, int)'.
 - 'Future' is from 'dart:async'.
 - 'Padding' is from 'package:flutter/src/widgets/basic.dart' ('../../Developer/flutter/packages/flutter/lib/src/widgets/basic.dart').
 - 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('../../Developer/flutter/packages/flutter/lib/src/widgets/framework.dart').
 - 'Widget' is from 'package:flutter/src/widgets/framework.dart' ('../../Developer/flutter/packages/flutter/lib/src/widgets/framework.dart').
                itemBuilder: (BuildContext context, int index) async{
                             ^


FAILURE: Build failed with an exception.

* Where:
Script '/Users/xx/Developer/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 904

* What went wrong:
Execution failed for task ':app:compileFlutterBuildDebug'.
> Process 'command '/Users/xx/Developer/flutter/bin/flutter'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

【问题讨论】:

  • 也发布错误。
  • 您好,@DarShan 我已经将错误消息放在帖子上。希望你能帮助我。

标签: amazon-web-services flutter dart listview pdf


【解决方案1】:

问题在于itemBuilder 函数中的async

The argument type 'Future<Padding> Function(BuildContext, int)' can't be assigned to the parameter type 'Widget Function(BuildContext, int)'.

由于itemBuilder 需要一个小部件,这里是Future&lt;Padding&gt;

删除async 并改用FutureBuilder 来加载您的PDF。

ListView.builder (
  itemCount: _babyList.length,
  itemBuilder: (BuildContext context, int index) {
     return Padding (
       padding: EdgeInsets.all(20),
         child: Column(
           children: <Widget>[
             _babyList[0][index].toString().split('.').last == 'jpg'
             ? Image.network(_babyList[0][index])
             : FutureBuilder(
                 future: PDFDocument.fromURL(_babyList[0][index]),
                 builder: (context, snapshot) {
                 return snapshot.connectionState == ConnectionState.done
                    ? PDFViewer(document: snapshot.data)
                    : new Container(); // maybe a show placeholder / loading widget?
                 });
           ]),
      );
  }),

【讨论】:

  • 谢谢!我试过了,但我收到一个错误The getter 'count' was called on null.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 2021-03-28
  • 1970-01-01
  • 2022-10-01
  • 2021-02-25
  • 1970-01-01
相关资源
最近更新 更多