无法从资产中读取文件?

Can't Read file from the asset?

在我的应用程序中,有一个按钮可以将文件(在我的例子中是 txt)复制到本地下载文件夹。我什至请求 phone 的许可并且它有效。但是当我从txt文件中读取时,错误是

FileSystemException: Cannot open file, path = 'assets/readme.txt' (OS Error: No such file or directory, errno = 2)

import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'dart:io';
import "package:path_provider/path_provider.dart";
 
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
int a;
  @override
  Widget build(BuildContext context) {
    
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("What up"),
        ),
        body: Center(
          child: RaisedButton(
            onPressed: () async {
              await Permission.storage.request();
              if (PermissionStatus == PermissionStatus.granted) {
                print("permission granted");
              }
              if (PermissionStatus == PermissionStatus.denied) {
                print('permission denied');
              }
             var path = "assets/readme.txt";
             a = await readCounter();
             print(a);
            },
            child: Text("Press me"),
             
          ),
        ),
      ),
    );
  }
}


Future<int> readCounter() async {
  try {
    final file = File("assets/readme.txt");

    // Read the file.
    String contents = await file.readAsString();

    return int.parse(contents);
  } catch (e) {
    // If encountering an error, return 0.
    print(e);
  }
}

我在 android>app>src>main>AndroidMainfest.xml

添加这段代码
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我也在pubspec.yaml

中添加了资产文件夹
flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  assets:
    - assets/

File class 引用设备整个文件系统中的文件,而不是应用程序的资产。

要访问资产,您应该遵循 documentation.

中的说明
  1. 导入flutter服务import 'package:flutter/services.dart'
  2. 使用rootBundle访问AssetBundle
  3. 使用loadString方法通过指定路径访问资产中的数据await rootBundle.loadString('assets/readme.txt');

在您的代码中实现:

Future<int> readCounter() async {
  try {
    String contents = await rootBundle.loadString('assets/readme.txt');

    return int.parse(contents);
  } catch (e) {
    // If encountering an error, return 0.
    print(e);
  }
}

我没有将文本文件放在资产中:只需将其制作成 returns 内容的 dart 文件 (.dart) 并将其放在 lib 中,然后像其他 dart 文件一样使用它。