在颤振中从未来中提取字符串<String>



我正在使用flutter,并在本地存储的JSON文件中加载,如下所示:

Future<String> loadJson(String file) async {
final jsonData = await rootBundle.loadString("path/to/$file.json");
return jsonData;
}

问题是,这会返回一个Future<String>,而我无法从中提取实际的JSON数据(作为String(

我在Widget构建方法中调用loadJson,如下所示:

@override
Widget build(BuildContext context) {
final data = ModalRoute.of(context)!.settings.arguments as Map;
final file = data["file"];
String jsonData = loadJson(file); // The issue is here
return Scaffold (/* -- Snip -- */);
}

我该怎么做?感谢您的帮助。

loadJsonFuture,需要await才能得到其结果:

String jsonData = await loadJson(file);

您也不能在build方法中运行Future函数,您需要使用FutureBuilder:

return Scaffold (
body: FutureBuilder<String>(
future: loadJson(file),
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return Text('Loading....');
default:
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
String jsonData = snapshot.data ?? "";
return /* -- Snip -- */;
},

}
}
},
),
);

您正在获取数据,但没有对其进行解码。您需要使用加载的数据进行解码。

Future<String> loadJson(String file) async {
final jsonData = await rootBundle.loadString("path/to/$file.json");
final data = await jsonDecode(jsonData)
return data;
}

另外,请不要忘记导入dart转换库以使用jsonDecode。

import 'dart:convert';

最新更新