在setState上更新UI时出现颤振问题

时间:2019-11-21 06:03:17

标签: flutter dart flutter-layout

首先,首先感谢您对这个问题的任何建议!

好的,所以在选择导航按钮后更新UI时遇到问题。当我单击其中一个导航按钮时,可以看到setState被调用,索引和pdfView的路径都被更新为正确的文件。

这是代码:

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:pdf_viewer_plugin/pdf_viewer_plugin.dart';


class PDFPreview extends StatefulWidget{
  PDFPreview(this.aContext, {this.document, this.files, Key key}) : super(key:key);
  final BuildContext aContext;
  final String document;
  final List<File> files;

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

class _PDFPreview extends State<PDFPreview> {
  _PDFWidget pdfView;
  int _index = 0;

  @override
  Widget build(BuildContext context) {
    if(widget.document == null) {
      pdfView = new _PDFWidget(widget.files[_index].path);
      print("Path: ${widget.files[_index].path}");
      print("PDF: ${pdfView.path}");
    }else{
      pdfView = new _PDFWidget(widget.document);
    }
    return Scaffold(
      bottomNavigationBar:

      widget.document == null && widget.files.length > 1 ?
        BottomAppBar(child:
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Expanded(child: IconButton(icon: Icon(Icons.arrow_back_ios), onPressed: () {
                if(_index != 0){
                  setState(() {
                    _index--;
                  });
                  print("Current Index: $_index");
                }
                },),),
              Expanded(child: IconButton(icon: Icon(Icons.edit), onPressed: () {Navigator.pop(context, 0); },),),
              Expanded(child: Text("${_index + 1} / ${widget.files.length}", textAlign: TextAlign.center,),),
              Expanded(child: IconButton(icon: Icon(Icons.done_outline), onPressed: () { Navigator.pop(context, 1);},),),
              Expanded(child: IconButton(icon: Icon(Icons.arrow_forward_ios), onPressed: () {
                  if(_index < widget.files.length - 1) {
                    setState(() {
                      _index++;
                    });
                    print("New Current Index: $_index");
                  }
                },),),
          ],),)
        :
          BottomAppBar(child:
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Expanded(child: IconButton(icon: Icon(Icons.edit), onPressed: () {Navigator.pop(context, 0); },),),
              Expanded(child: IconButton(icon: Icon(Icons.done_outline), onPressed: () { Navigator.pop(context, 1);},),),
            ],),)
        ,
      body: pdfView
    );
  }
}

class _PDFWidget extends StatelessWidget{
  _PDFWidget(this.path);
  final String path;

  @override
  Widget build(BuildContext context) {
    return new PdfViewer(
      filePath: path,
    );
  }
}

以下是输出(前进导航)

flutter: Path: {longPath}/sample.pdf
flutter: PDF: {longPath}/sample.pdf

我想知道是否有人有任何可能的解决方案来更新PDF视图。另外,如果有人可以帮我解决这个问题,那么在setState完成构建功能自动启动时会非常感激吗?

1 个答案:

答案 0 :(得分:1)

如pskink的评论中所述,检查插件是否正常工作是问题。所有信息都在我这边被更改,UI确实得到了更新,但是插件本身存在更新文件的问题。为插件创建了一个问题,到目前为止,在修复插件之前,可以做的所有事情。