Проблема с флаттером при обновлении пользовательского интерфейса на setState - PullRequest
0 голосов
/ 21 ноября 2019

Во-первых, заранее спасибо за любые советы по этому вопросу!

Хорошо, поэтому у меня возникла проблема с обновлением пользовательского интерфейса после выбора кнопки навигации. Когда я нажимаю одну из кнопок навигации, я вижу, что вызывается 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 завершает сборку, функция автоматически запускается, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...