将文件内容读入Flutter中的String变量

时间:2017-05-15 20:39:13

标签: flutter

问题是:我有一个包含一行文本的.txt文件,我需要将该行读入一个String变量。

我发现的大多数方法都返回Future或Future,我不知道如何将这些类型转换为字符串。另外,我不确定我在readAsStringSync上做错了什么因为我得到了一个“FileSystemExeption:无法打开文件(操作系统错误:没有这样的文件或目录)”,即使我在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,
        )
    ),
);

1 个答案:

答案 0 :(得分:5)

拥抱Future!这个用例正是FutureBuilder的用途。

要将资源作为字符串读取,您不需要构建File。而是使用DefaultAssetBundle来访问资产文件。确保要在pubspec.yaml中声明要读取的资产文件。

screenshot

    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,以获得更好的性能。