Flutter 从服务器下载后打开PDF文件时出错

Flutter 从服务器下载后打开PDF文件时出错,flutter,dart,pdf,Flutter,Dart,Pdf,您好,我在应用程序中有一个屏幕,可以下载PDF文件并以百分比显示下载进度。下载后,将使用pdf_render:^1.0.10的软件包打开该文件。有时它打开并显示PDF文件,有时它不打开文件,我有一个空白屏幕。我的控制台没有故障,我不知道是什么故障。非常感谢。 颤振应用程序: class Web_view_vehicle extends StatefulWidget { var choice ; var name_vehicle; Web_view_vehicle({ required

您好,我在应用程序中有一个屏幕,可以下载PDF文件并以百分比显示下载进度。下载后,将使用pdf_render:^1.0.10的软件包打开该文件。有时它打开并显示PDF文件,有时它不打开文件,我有一个空白屏幕。我的控制台没有故障,我不知道是什么故障。非常感谢。 颤振应用程序:

class Web_view_vehicle extends StatefulWidget {
  var choice ;
  var name_vehicle;
  Web_view_vehicle({ required this.choice , this.name_vehicle}) : super();
  @override
  _Web_view_vehicleState createState() => _Web_view_vehicleState();
}

class _Web_view_vehicleState extends State<Web_view_vehicle> {

  bool downloading = false;
  String progressString = "";
  String path = '';
  late List data ;


  Future<String> get _localPath async {
    final directory = await getApplicationDocumentsDirectory();
    return directory.path;
  }

  Future<File> get _localFile async {
    final path = await _localPath;
    return File('$path/teste.pdf');
  }

  Future<File> writeCounter(Uint8List stream) async {
    final file = await _localFile;

    // Write the file
    return file.writeAsBytes(stream);
  }

  Future<Uint8List> fetchPost() async {
    Dio dio = Dio();
      var response =  await dio.get(widget.choice,
          onReceiveProgress: (rec, total) {
            print("Rec: $rec , Total: $total");
            if(!mounted)return;
            setState(() {
              downloading = true;
              progressString = ((rec / total) * 100).toStringAsFixed(0) + "%";
            });
          },options: Options(responseType: ResponseType.bytes));
      final responseJson = response.data;
    if (!mounted) {
    }
    setState(() {
      downloading = false;
      progressString = "Completed";
    });
    print("Download completed");
    return responseJson;
  }

  loadPdf() async {
    writeCounter((await fetchPost()));
    path = (await _localFile).path;
    if (!mounted) return;
    setState(() {});
  }

  @override
  void initState() {
    super.initState();
    loadPdf();

  }

  @override
  Widget build(BuildContext context) {

    Color? bgColor = Colors.grey[300];

    return Scaffold(
        backgroundColor: bgColor,
        appBar: AppBar(
          leading: Padding(
            padding: const EdgeInsets.fromLTRB(5.0 , 0.0 , 0.0 , 0.0),
            child: new IconButton(
                icon: new Icon(Icons.arrow_back),
                onPressed: (){Navigator.pop(context,true);}
            ),
          ),
          title: Text('מדריך לרכב ${widget.name_vehicle}',textAlign: TextAlign.center,textDirection: TextDirection.rtl,),
          backgroundColor: Colors.red[400],
          centerTitle: true,
          actions: <Widget>[

          ],
        ),

        body:
        (path.length > 5)?
        PdfViewer.openFile(path,
    ):
        Center(child: Column(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.center,mainAxisSize: MainAxisSize.max,
      children: [
        CircularProgressIndicator(),
      Text('טוען מדריך ${progressString}',textDirection: TextDirection.rtl,textAlign: TextAlign.center,)
      ],
    ))

        );
  }


}
class Web\u view\u车辆扩展StatefulWidget{
var选择;
车辆名称;
Web_view_vehicle({需要this.choice,this.name_vehicle}):super();
@凌驾
_Web_view_vehicleState createState()=>_Web_view_vehicleState();
}
类\ Web \视图\车辆状态扩展状态{
bool=false;
字符串progressString=“”;
字符串路径=“”;
迟交名单数据;
未来获取\u本地路径异步{
最终目录=等待getApplicationDocumentsDirectory();
返回directory.path;
}
未来获取\u本地文件异步{
最终路径=等待_localPath;
返回文件(“$path/teste.pdf”);
}
未来写计数器(Uint8List流)异步{
final file=wait\u localFile;
//写文件
返回文件.writeAsBytes(流);
}
Future fetchPost()异步{
Dio Dio=Dio();
var response=wait dio.get(widget.choice,
收到进度:(记录,总计){
打印(“记录:$Rec,总计:$Total”);
如果(!已安装)返回;
设置状态(){
下载=真;
progressString=(记录/总计)*100.ToStringsFixed(0)+“%”;
});
},选项:选项(responseType:responseType.bytes));
最终响应JSON=response.data;
如果(!已安装){
}
设置状态(){
下载=假;
progressString=“已完成”;
});
打印(“下载完成”);
返回响应;
}
loadPdf()异步{
writeCounter((wait fetchPost());
路径=(等待_localFile).path;
如果(!已安装)返回;
setState((){});
}
@凌驾
void initState(){
super.initState();
loadPdf();
}
@凌驾
小部件构建(构建上下文){
颜色?bgColor=颜色。灰色[300];
返回脚手架(
背景颜色:bgColor,
appBar:appBar(
前导:填充(
填充:LTRB(5.0,0.0,0.0,0.0)中的常量边集,
孩子:新的图标按钮(
图标:新图标(图标。箭头返回),
onPressed:(){Navigator.pop(上下文,true);}
),
),
标题:文本(“widget.name_vehicle}”,textAlign:textAlign.center,textDirection:textDirection.rtl,),
背景颜色:颜色。红色[400],
标题:对,
行动:[
],
),
正文:
(路径长度>5)?
PdfViewer.openFile(路径,
):
中心(子:列)(crossAxisAlignment:crossAxisAlignment.Center,mainAxisAlignment:mainAxisAlignment.Center,mainAxisSize:mainAxisSize.max,
儿童:[
CircularProgressIndicator(),
文本('1496;וןמרי${progressString}',textDirection:textDirection.rtl,textAlign:textAlign.center,)
],
))
);
}
}