如何解决无法从资产读取文件?
在我的应用中,有一个按钮可以将文件(以我的情况为txt)复制到本地下载文件夹。我什至要求电话许可,并且可以使用。但是当我从txt文件中读取时,错误提示
FileSystemException:无法打开文件,路径='assets / readme.txt'(OS 错误:没有这样的文件或目录,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
类引用设备整个文件系统中的文件,而不是应用程序资产。
要访问资产,请遵循documentation中的说明。
- 导入抖动服务
import 'package:flutter/services.dart'
- 使用
rootBundle
访问AssetBundle
- 使用
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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。