我正在尝试加载一些 json 数据并使用 afuturebuilder
来等待数据首先可用然后显示它。当我尝试加载数据时DetailsView
,我收到两条日志消息,说没有数据和 null,屏幕错误,然后恢复正常,json 记录到控制台。
抛出的异常是The following NoSuchMethodError was thrown building FutureBuilder<String>(dirty, state: _FutureBuilderState<String>#cc31b): The method '[]' was called on null. Receiver: null
.
示例代码:
body: Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 15.0),
child: FutureBuilder(
future: DefaultAssetBundle.of(context).loadString("assets/my_data.json"), // validly referenced in pubspec and in right folder
builder: (context, snapshot){
if(!snapshot.hasData){
print('no data'); // I understand it will be empty for now
} else {
print('hd');
}
var data = snapshot.data.toString();
print(data); // null logged to console, is the future still empty at this point?
final parsedData = json.decode(data);
print('pd ${parsedData[1]}'); // this line is where it shows the method [] was called on null
return data == null || data.isEmpty
? LoadingStrengths()
: MyDataText();
// : DailyStrengthText(day: widget.day, data: parsedData);
},
),
),
问题似乎是:
- 我没有正确处理未来
- 我没有正确解析 json,在下面附上了它的副本。
样本数据:
[{
"1": "Each day is an opportunity to start over again"
},
{
"2": "Every man must at one point be tempted to hoist the black"
},
{
"3": "Be kind to everyone you meet"
}]
我试图通过使用字符串化数字作为键来解析它,以访问这些值。如何为此创建模型类或/并在futurebuilder中解析此json?谢谢。
- - - - - - - - - - - - - - - - 编辑 - - - - - - - - - ---------------------- 这是编辑后的构建器方法,我可以从中解析和打印数据:
if(!snapshot.hasData){
print('no data yet');
return LoadingStrengths();
} else {
print('hd');
var data = snapshot.data.toString();
parsedData = json.decode(data);
print('pd ${parsedData[widget.day - 1]}');
}
return Text('${data[widget.day - 1]}'); // it errors out here
当我将值分配给 Text 小部件时,它会出现以下错误消息:
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building FutureBuilder<String>(dirty, state: _FutureBuilderState<String>#cc19b):
The method '[]' was called on null.
Receiver: null
Tried calling: [](4)
The relevant error-causing widget was:
FutureBuilder<String> file:///E:/FlutterProjects/daily_strength/lib/screens/DetailsView.dart:30:18
When the exception was thrown, this was the stack:
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1 _DetailsViewState.build.<anonymous closure>
(package:daily_strength/screens/DetailsView.dart:47:34)
#2 _FutureBuilderState.build
(package:flutter/src/widgets/async.dart:751:55)
#3 StatefulElement.build
(package:flutter/src/widgets/framework.dart:4744:28)
#4 ComponentElement.performRebuild
(package:flutter/src/widgets/framework.dart:4627:15)
请问这是什么意思?我正在获取数据,但由于某种原因将其设置为文本小部件不起作用?谢谢。