我正在使用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 -- */);
}
我该怎么做?感谢您的帮助。
loadJson
是Future
,需要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';