将文件内容读入 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,
        )
    ),
);

拥抱Futures!这个用例正是 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,以获得更好的性能。