gpt4 book ai didi

dart - 使用 Futures 在 Flutter 中加载 config.json

转载 作者:IT王子 更新时间:2023-10-29 06:37:47 25 4
gpt4 key购买 nike

作为 Dart/Flutter 的新手,我正在使用此代码段尝试加载存储在 Assets 文件夹中的 config.json 文件。在尝试读取此文件时,我使用了 Dart 语言的模型 Futures documentationFlutter docs on reading local text files :

import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
import 'dart:convert';

Future<List> loadAsset() async {
String raw = await rootBundle.loadString('assets/config.json');
List configData = json.decode(raw);
return configData;
}

然后,在我的类中,我尝试将配置加载到列表中,如下所示:

Future<List> configData = loadAsset();
print(configData.toString());
// prints out: Instance of 'Future<List<dynamic>>'

所有这一切的结果似乎都奏效了。但是我找不到使用我加载的数据的方法。访问列表中元素的任何努力,例如configData[0] 导致错误:

The following _CompileTimeError was thrown building 
HomePage(dirty, state: HomePageState#b1af8):
'package:myapp/pages/home_page.dart': error:
line 64 pos 19: lib/pages/home_page.dart:64:19:
Error: The method '[]' isn't defined for the class
'dart.async::Future<dart.core::List<dynamic>>'.
Try correcting the name to the name of an existing method,
or defining a method named '[]'.

我想将 configData Future 转换为我可以读取并在我的应用程序中传递的普通对象。我能够做一些非常相似的事情,并让它在小部件的构建方法中工作,使用 FutureBuilderDefaultAssetBundle 因此...

DefaultAssetBundle
.of(context)
.loadString('assets/config.json')

...但我不希望在所有需要它的小部件中重新加载数据。我想加载到一个单独的 Dart 包中,并将其作为全局配置在我所有的应用程序中使用。任何指针将不胜感激。


我已经尝试过 Rémi Rousselet 的建议:

List configData = await loadAsset();
print(configData[0]);

在这种情况下,我得到一个编译器错误:

compiler message: lib/pages/home_page.dart:55:21: Error: Getter not found: 'await'.
compiler message: List configData = await loadAsset();
compiler message: ^^^^^

最佳答案

您不能执行 configData[0],因为 configData 不是 List,而是 Future

相反,等待 future 访问 List 里面

List configData = await loadAsset();
print(configData[0]);

关于dart - 使用 Futures 在 Flutter 中加载 config.json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50071059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com