首页 > 解决方案 > 解析 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"
                }
            ]
        },
       
    ]
}

我怎样才能解决这个问题?

标签: jsonflutterflutter-web

解决方案


因为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;

      // ...
    }

推荐阅读