【问题标题】:List<String> empty, but values return after reloadList<String> 为空,但重新加载后返回值
【发布时间】:2023-03-14 08:22:01
【问题描述】:

我正在尝试从 .txt 文件中逐行加载不同的值。

我正在从资产加载文件,该文件已在 pubspec.yaml 中注册。

Future<String> getFileData() async {
  return await rootBundle.loadString('assets/files/text.txt');
}

因为这会返回一个长字符串,所以我将其拆分为一个列表:

void doStuff() async {
  await getFileData().then((value) => value.split('\n').forEach((element) {
        exampleQuestions.add(element);
      }));
}

此方法在我的类中调用 - 构造函数通过命名路由从我的 Main 调用:

  GameOver.routeName: (context) => GameOver(),
    '/game': (context) => Game(

        ),
  },

exampleQuestion get 填充了 doStuff() - 方法(已经检查过),但在 _GameState 类中丢失了它的值,其中想要访问列表的小部件返回一个超出索引的异常。

但是,如果我快速重新加载我的应用程序,则值设置正确。如果我然后单击按钮再次继续,则在我快速重新加载之前没有任何变化。

任何提示都非常感谢..

【问题讨论】:

  • 向列表添加元素时尝试使用setState方法

标签: flutter dart


【解决方案1】:

您不应该在小部件构造函数中调用这样的异步方法,因为它们会在每次构建时被调用。

您应该改用StatefulWidgetFutureBuilder

另一方面,LineSplitter 应该用于分割线。

class _MyWidgetState extends State<MyWidget> {
  late final Future<List<String>> _exampleQuestionsFuture;

  static Future<String> _getFileData() => rootBundle.loadString('assets/files/text.txt');

  @override
  void initState() {
    super.initState();
    _exampleQuestionsFuture = _getFileData().then(const LineSplitter().convert);
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<String>>(
      future: _exampleQuestionsFuture,
      builder: (snapshot, data) {
        /* ... */
      },
    );
  }
}

【讨论】:

  • 感谢您的回答。我现在如何阅读 Future> ?我试过类似的东西:@override void initState(){ super.initState(); _getFileData().then(const LineSplitter().convert).then((value) { setState(() { question = value.elementAt(currentRound); }); });但据我了解,这是没有意义的,因为该值只更新一次。
  • 问题:_exampleQuestionsFuture.then((value) => value.elementAt(currentRound)) ,返回不能将 Future 应用于 String
  • FutureBuilder 中使用snapshotFutureBuilder 为一次性使用 Futures。
  • 太棒了!如果对您有用,请务必将此答案标记为已接受。
  • 我现在如何获得 _exampleQuestionsFuture 的长度?我尝试了不同的方法,但总是遇到问题,在某些时候我无法将 Future 转换为 int
猜你喜欢
  • 1970-01-01
  • 2011-03-11
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2021-07-21
  • 1970-01-01
相关资源
最近更新 更多