【发布时间】:2021-11-16 19:14:02
【问题描述】:
我有一个简单的 json,我想显示日出和日落时间。
我的 Json 看起来像这样
{
"SunRise" : "5.30:00",
"SunSet" : "6:30:00",
"MoonRise":"19:54:11",
"MoonSet":"7:50:55"
}
我的模型看起来像这样。
class AutoGenerate {
AutoGenerate({
required this.SunRise,
required this.SunSet,
required this.MoonRise,
required this.MoonSet,
});
late final String SunRise;
late final String SunSet;
late final String MoonRise;
late final String MoonSet;
AutoGenerate.fromJson(Map<String, dynamic> json){
SunRise = json['SunRise'];
SunSet = json['SunSet'];
MoonRise = json['MoonRise'];
MoonSet = json['MoonSet'];
}
Map<String, dynamic> toJson() {
final _data = <String, dynamic>{};
_data['SunRise'] = SunRise;
_data['SunSet'] = SunSet;
_data['MoonRise'] = MoonRise;
_data['MoonSet'] = MoonSet;
return _data;
}
}
MyFetch 机制。
Future<AutoGenerate> getData() async {
final response =
await http.get(Uri.parse('MyURL'));
var data = json.decode(response.body);
}
我想为太阳/月亮升起/设置一组卡片。下面显示我的小部件如何发送到卡的机制。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Container(
alignment: Alignment.center,
child: SafeArea(
child: SingleChildScrollView(
child: FutureBuilder<AutoGenerate>(
future : getData(),
builder: ( context, AsyncSnapshot<AutoGenerate> snapshot)
{
if (snapshot!.hasData) {
return Container(
child : Card(
// margin: EdgeInsets.all(16.0),
elevation: 1.2,
color: Colors.yellowAccent[100],
child: Padding(
padding: EdgeInsets.all(16.0),
child: Text('Sun Rise :'+snapshot.data.SunRise),
),
)
)
}
}
)
)
)
)
}
我在 snapshot.data.SunRise 上收到错误消息,提示 “无法无条件访问属性 'SunRise',因为接收者可以为 'null'。(文档)尝试使访问有条件(使用'?.')或向目标添加空检查('!')。
我已经尝试了所有选项,还尝试将响应分配给一个变量并使用该变量显示在卡片中,但给了我另一个错误。
前进的最佳方式是什么?
谢谢
【问题讨论】:
标签: json flutter dart dart-null-safety