【发布时间】:2023-01-15 02:56:52
【问题描述】:
我正在制作一个带有资产 pdf 文件的 pdf 阅读器,我的应用程序只返回最后一个文件。单击其他文件时会出现错误:
[ERROR:flutter/lib/ui/ui_dart_state.cc(198)\] Unhandled Exception: Unable to load asset: assets/books/Masud Rana - Durgom Durgo.pdf
并打印资产文件路径只打印了这个:
[资产/书籍/Masud Rana - Durgom Durgo.pdf
这是代码:
import 'package:flutter/services.dart' show rootBundle; import 'package:flutter/material.dart'; import '../api/pdf_api.dart'; import 'pdf_viewer.dart'; import 'package:path/path.dart' as path; class AssetBooks extends StatefulWidget { const AssetBooks({Key? key}) : super(key: key); @override State createState() => _AssetBooksState(); } class _AssetBooksState extends State { List assetFilePaths = []; @override void initState() { super.initState(); _getAssetFilePaths(); } void _getAssetFilePaths() async { String fileString = await rootBundle.loadString('assets/files.txt'); List filePaths = fileString.split('\n'); setState(() { assetFilePaths.addAll(filePaths); }); print(assetFilePaths); } @override Widget build(BuildContext context) { void openPDF(BuildContext context, file) => Navigator.of(context).push( MaterialPageRoute(builder: (context) => PDFViewerPage(file: file))); return Scaffold( appBar: AppBar( actions: [ ElevatedButton(onPressed: (){print(assetFilePaths);}, child: Text("hi")) ], title: const Text("Classic Books"), ), body: Padding( padding: const EdgeInsets.all(20.0), child: Container( // color: Colors.amber, child: GridView.builder( physics: const BouncingScrollPhysics(), shrinkWrap: true, gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, crossAxisSpacing: 20.0, mainAxisSpacing: 20.0, ), itemCount: assetFilePaths.length, itemBuilder: (context, index) { return assetFilePaths == null ? Center(child: CircularProgressIndicator()) : Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), // radius of 10 color: Colors.green // green as background color ), child: ElevatedButton( onPressed: () async { print(assetFilePaths); final path = assetFilePaths[index]; final file = await PDFApi.loadAsset(path); openPDF(context, file); }, child: Text(path.basenameWithoutExtension(assetFilePaths[index]))), ); }, )), )); } }这是 file.txt:
assets/books/Masud Rana - Durgom Durgo.pdf assets/books/advs.pdf assets/books/Flutter Roadmap.pdf assets/books/Mein Kampf Adolf Hitler.pdf assets/books/The Da Vinci Code.pdf我希望单击该按钮将打开 pdf 阅读器。但这只是在最后一个文件“达芬奇密码”上打开。我试过 flutter clean 但结果是一样的。
【问题讨论】:
标签: flutter dart flutter-dependencies flutter-test dart-pub