将文件内容读入 Flutter 中的 String 变量
Reading the contents of a file into a String variable in Flutter
问题是这样的:我有一个包含一行文本的 .txt 文件,我需要将该行读入一个字符串变量。
我发现的大多数方法 return 要么是 Future 要么是 Future,我不知道如何将这些类型转换为字符串。另外,我不确定我在使用 readAsStringSync 时做错了什么,因为我得到了一个 "FileSystemExeption: Cannot open file (OS Error: No such file or directory)",即使我在我的 pubspec.yaml
中引用了它
class LessonPage extends StatelessWidget { LessonPage({this.title, this.appBarColor, this.barTitleColor, this.fileName});
final String title;
final Color appBarColor;
final Color barTitleColor;
final String fileName;
@override
Widget build(BuildContext context) {
final file = new File(this.fileName);
return new Scaffold(
appBar: new AppBar(
title: new Text(
this.title,
style: new TextStyle(color: this.barTitleColor)
),
backgroundColor: this.appBarColor,
),
body: new Center(
child: new Text(
file.readAsStringSync(),
softWrap: true,
)
),
);
拥抱Future
s!这个用例正是 FutureBuilder
的用途。
要将资产读取为字符串,您不需要构造 File
。相反,使用 DefaultAssetBundle
访问资产文件。请确保您要读取的资产文件已在 pubspec.yaml.
中声明
return new Scaffold(
appBar: new AppBar(
title: new Text(
this.title,
style: new TextStyle(color: this.barTitleColor)
),
backgroundColor: this.appBarColor,
),
body: new Center(
child: new FutureBuilder(
future: DefaultAssetBundle.of(context).loadString(fileName),
builder: (context, snapshot) {
return new Text(snapshot.data ?? '', softWrap: true);
}
),
),
);
如果您正在读取的文件不是资产(例如,您下载到临时文件夹的文件),那么使用 File
是合适的。在这种情况下,请确保路径正确。考虑使用 FutureBuilder
而不是同步 File
API,以获得更好的性能。
问题是这样的:我有一个包含一行文本的 .txt 文件,我需要将该行读入一个字符串变量。
我发现的大多数方法 return 要么是 Future 要么是 Future,我不知道如何将这些类型转换为字符串。另外,我不确定我在使用 readAsStringSync 时做错了什么,因为我得到了一个 "FileSystemExeption: Cannot open file (OS Error: No such file or directory)",即使我在我的 pubspec.yaml
中引用了它class LessonPage extends StatelessWidget { LessonPage({this.title, this.appBarColor, this.barTitleColor, this.fileName});
final String title;
final Color appBarColor;
final Color barTitleColor;
final String fileName;
@override
Widget build(BuildContext context) {
final file = new File(this.fileName);
return new Scaffold(
appBar: new AppBar(
title: new Text(
this.title,
style: new TextStyle(color: this.barTitleColor)
),
backgroundColor: this.appBarColor,
),
body: new Center(
child: new Text(
file.readAsStringSync(),
softWrap: true,
)
),
);
拥抱Future
s!这个用例正是 FutureBuilder
的用途。
要将资产读取为字符串,您不需要构造 File
。相反,使用 DefaultAssetBundle
访问资产文件。请确保您要读取的资产文件已在 pubspec.yaml.
return new Scaffold(
appBar: new AppBar(
title: new Text(
this.title,
style: new TextStyle(color: this.barTitleColor)
),
backgroundColor: this.appBarColor,
),
body: new Center(
child: new FutureBuilder(
future: DefaultAssetBundle.of(context).loadString(fileName),
builder: (context, snapshot) {
return new Text(snapshot.data ?? '', softWrap: true);
}
),
),
);
如果您正在读取的文件不是资产(例如,您下载到临时文件夹的文件),那么使用 File
是合适的。在这种情况下,请确保路径正确。考虑使用 FutureBuilder
而不是同步 File
API,以获得更好的性能。