json - 解析 Future Builder 时出错:TypeError: Cannot read property 'Symbol(dartx._get)' of null
问题描述
我正在调用未来的 builder builder 并收到此错误:“TypeError: Cannot read property 'Symbol(dartx.get )' of null”即使我正在获取 json 数据。未来的构建器打印当我调用 json 时,我得到 Error: NoSuch Method Error: invalid member on null: 'get' on screen 但是,我不知道哪里出了问题。
编辑 1: userEvents 是可在任何地方访问的类级别变量
这是我的未来:
FutureBuilder(
future: getMyEvents(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
switch (snapshot.connectionState) {
case ConnectionState.done:
_events = snapshot.data;
print("received my event data");
print(snapshot.data);
return _eventData();
break;
case ConnectionState.waiting:
CircularProgressIndicator();
break;
default:
}
}
return snapshot.data != null
? _eventData()
: _noEvents();
}),
我的 API:
Future getMyEvents() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var token = prefs.getString('token');
print('my token is $token');
var events;
final Map<String, dynamic> body = {
'access_token': token,
};
var url = "$server/api/events/my_events/";
await http.post(url, body: body, headers: {
"Content-Type": "application/x-www-form-urlencoded"
}).then((http.Response response) {
print(response.body);
var responseData = json.decode(response.body);
switch (response.statusCode) {
case (200):
UserEvents userEvents = UserEvents.fromJson(responseData);
print('My Events ${userEvents.events[0]}');
events = userEvents.events;
print('Events received');
print('Events ${events}');
break;
case (500):
print('No Events In This City');
return '';
break;
}
});
return userEvents;
}
这是在响应正文中打印的 JSON 数据:
{
"success": [
{
"id": 1,
"event_name": "Test Event 1",
"event_photo": "https://dispensaries.s3.amazonaws.com/event_photo/91dfce63-5f52-4e7e-bb38-a5a2800631cc_preview_gD0YH8V.png",
"vendor_name": {
"id": 1,
"vendor": "Test Vendor 1"
},
"refund_available": true,
"website": "www.test.com",
"share_count": 0,
"check_in_count": 1,
"street_address": "1231 faker streat",
"city": "Jersey City",
"state": "NJ",
"zipcode": "01010",
"event_tagline": "test",
"details": "test",
"start_date": "2020-11-27",
"start_time": "22:44:00",
"end_time": "22:44:00",
"attendees": [
{
"id": 2,
"name": "test user",
"current_selfie": "https://dispensaries.s3.amazonaws.com/sefies/cbdYoga.jpeg"
}
]
},
]
}
我怎样才能解决这个问题?
解决方案
因为userEvents变量是在switch语句中定义的,所以它在这个范围之外是未定义的。将定义移到块外或直接从案例返回:
switch (response.statusCode) {
case (200):
UserEvents userEvents = UserEvents.fromJson(responseData);
print('My Events ${userEvents.events[0]}');
events = userEvents.events;
print('Events received');
print('Events ${events}');
return userEvents;
// ...
}
推荐阅读
- asp.net - 多个环境 Azure Blob 存储连接字符串似乎有冲突
- max - 如何在 Google Data Studio 中获得“与最小值的差异”?
- pdf - 应用程序未在 iOS13 的电子邮件客户端中打开以显示 pdf 文件
- selenium - Selenium 中的 Firefox 崩溃
- scala - 更改 spark 2.1 中的新行分隔符
- c# - C# 在控制台窗口中显示两个列表
- node.js - 如何允许用户使用 OAuth 登录
- mysql - SO Prisma GraphQL 错误:哎呀。看起来像内部服务器错误
- html - 如何将此按钮水平居中到我的页面?
- typescript - 如何使用 mocha/chai 在 NestJS API 上抛出“app.address()”错误来修复测试?