Flutter 从服务器下载后打开PDF文件时出错
您好,我在应用程序中有一个屏幕,可以下载PDF文件并以百分比显示下载进度。下载后,将使用pdf_render:^1.0.10的软件包打开该文件。有时它打开并显示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
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,)
],
))
);
}
}