【问题标题】:Pass a value to another page to open the PDF将值传递到另一个页面以打开 PDF
【发布时间】:2020-06-01 17:00:56
【问题描述】:

我将一个 PDF 文件链接传递到此页面,当我打印时它始终存在,但该页面曾经读取过 PDF 文件,当返回并执行该操作时,agian 没有读取链接,我不知道为什么?

谁能帮我解决这个问题?

class ReadPdf extends StatefulWidget {

  final String value;
  ReadPdf({Key key, this.value}) : super(key: key);

  @override
  _ReadPdfState createState() => _ReadPdfState();
}

class _ReadPdfState extends  State<ReadPdf>{
  PDFDocument document;
  var my_uid;
  loadFromUrl() async{
    document = await PDFDocument.fromURL('${widget.value}');
    print('yes' + widget.value);
  }

  @override
  void initState() {

    super.initState();
    loadFromUrl();

    FirebaseAuth.instance.currentUser().then((user){

      setState(() {
        my_uid = user.uid;
        print(user.uid);
      });
    }).catchError((e){
      print(e);
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: <Widget>[
            Expanded(
              child: Center(
                child: document !=null ? PDFViewer(
                  document: document,
                ) : Text('Try agian'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

【问题讨论】:

    标签: android ios android-studio flutter dart


    【解决方案1】:

    我认为问题在于调用构建方法时尚未完成的“异步”操作。

    尝试将 loadFromUrl 放入 FutureBuilder 中,而不是传统的 document !=null,如下所示:

      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: Column(
              children: <Widget>[
                Expanded(
                  child: Center(
                      child: FutureBuilder(
                    future: loadFromUrl(),
                    builder: (context, snapshot) {
                      if (snapshot.hasData == false) {
                        return CircularProgressIndicator();
                      }
    
                      //or snapshot.data if your loadFromUrl returns the document, I think that is more "correct"
                      return PDFViewer(document: document);
                    },
                  )),
                ),
              ],
            ),
          ),
        );
      }
    

    并且您的方法必须返回某物的未来(在您的情况下为 PDFDocument)

    Future<String> loadFromUrl() async {
        await Future.delayed(Duration(seconds: 2));
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多