Ошибка при синтаксическом анализе Future Builder: ошибка типа: не удается прочитать свойство ‘Символ (dartx._get)’, равное нулю

#json #flutter #flutter-web

#json #трепетание #flutter-web

Вопрос:

Я вызываю конструктор future builder и получаю эту ошибку: «Ошибка типа: не удается прочитать свойство’Symbol(dartx.get)’ из null», хотя я получаю данные json. Future builder печатает, когда я вызываю json, я получаю ошибку: Ошибка метода NoSuch: недопустимый член в null: ‘get’ на экране, но я не могу понять, где что-то идет не так.

РЕДАКТИРОВАТЬ 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"
                }
            ]
        },
       
    ]
}
 

Как я могу это исправить?

Ответ №1:

Поскольку переменная 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;

      // ...
    }
 

Комментарии:

1. Прошу прощения за неясность. UserEvents — это переменная уровня класса, доступная где угодно, но даже с помощью оператора return внутри корпуса switch я все еще получаю эту ошибку.

2. Тогда какой смысл создавать новую переменную с тем же именем в блоке switch : UserEvents userEvents = ... ? @Настоящий новичок

3. Это класс, который анализирует данные json.