【问题标题】:Get text from ".txt" file and save it in String variable dart从“.txt”文件中获取文本并将其保存在字符串变量 dart 中
【发布时间】:2020-05-28 15:00:40
【问题描述】:

我的应用程序的 Document 文件夹中有一个名为“bio.txt”的“.txt”文件。 我想读取其内容并将其存储在 String 变量中。 我的问题是“阅读动作”是一个“未来”功能,我很难将其值保存在“字符串”中。

我读了文件:

Future<String> get _localPath async {
  final directory = await getApplicationDocumentsDirectory();
  return directory.path;
}

Future<File> _localFile(String name) async {
  final path = await _localPath;
  return File('$path/$name');
}

Future<String> _read(String filename) async {
  try {
    final file = await _localFile(filename);

    // Read the file.
    return await file.readAsString();
  } catch (e) {
    // If encountering an error, return 0.
    return "Can't read";
  }
}

我想保存它:

String _bio = _read("bio.txt").then((value) => String);

您知道为什么这个解决方案不起作用吗? 有什么建议吗?

【问题讨论】:

标签: string flutter asynchronous dart


【解决方案1】:

因为Futures的then不会返回值,应该是这样的,

var _bio;

_read("bio.txt").then((value) {
  _bio = value;
});

或者通过将上下文 _bio 设置为异步上下文,

var _bio = await _read("bio.txt");

【讨论】:

  • 我不想将值存储在“var”中,而是在“String”中。
  • @MichealRoss 然后在第一个版本中使用String _bio,或者只使用第二个版本(在这种情况下,类型推断将使_bio成为String)。
  • @MichealRoss 我选择退出_bio 的类型,因为读取函数已经有一个返回类型,使_bio 成为String。 Dart 与 Java 不同,仅使用类型进行检查,并且类型不会传递给编译。在 Dart 中使用更少的类型而不失去类型安全性会更好。
【解决方案2】:

您可以使用 then 块或使用 async/await

_read ('file.txt').then((value){
bio = value;
 });

或者:

bio = await _read ('file.txt');

【讨论】:

    【解决方案3】:

    这是我的解决方案:

    String _myRead( String filename){
     var _bio;
    
     _read("bio.txt").then((String) {
       _bio = String;
     });
     return _bio;
    }
    String _bio=_myRead("bio.txt");
    

    【讨论】:

      猜你喜欢
      • 2020-08-11
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 2015-12-17
      • 1970-01-01
      • 2021-04-19
      相关资源
      最近更新 更多