【问题标题】:GridView.builder only returns the last fileGridView.builder 只返回最后一个文件
【发布时间】: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


    【解决方案1】:

    您是否已将资产添加到酒吧?

    在 pubspec.yaml 中:

    assets:
        - assets/
        - assets/books/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多