Флаттер, «Метод»карта» не может быть вызван безоговорочно, потому что получатель может быть «нулевым»».

#flutter #flutter-layout #flutter-dependencies #flutter-test

Вопрос:

Я получаю эту ошибку, когда пытаюсь вызвать метод .map в файле snapshot.data. Я использую базу данных SQLite.

Код, выдающий ошибку, выглядит следующим образом:

 FutureBuilder(
                future: _alarms,
                builder: (context, snapshot)
                {
                  if(snapshot.hasData){
                  return ListView(
                    children: snapshot.data.map<Widget>((alarms) {
                      return Container(
 

И я создаю список _alarms в методе initState:

  @override
  void initState() {
    _alarmHelper.initializeDatabase().then((value) => print('------------dB initialized'));
    _alarms = _alarmHelper.getAlarm();
    super.initState();
  }
 

И функция .getAlarm () определяется так:

  Future<List<AlarmInfo>> getAlarm() async{
    var resu<
    var db = await this.database;

      result = await db?.query(tableName);

     result.forEach((element) { 
      var alarmInfo  = AlarmInfo.fromMap(element);
      alarms.add(alarmInfo);
      }
      );

      return alarms;
  }
 

Я также попытался добавить оператор?., но затем это возвращает еще одну ошибку, которая заключается в том, что .карта не определена для объекта типа children: snapshot.data?.map<Widget>((alarms) {

Мы будем признательны за любую помощь, и если вам потребуется дополнительная информация, не стесняйтесь оставлять комментарии.

Спасибо 🙂

Ответ №1:

Я предполагаю, что это потому, что вы не указали тип для FutureBuilder виджета, следовательно snapshot.data , он из типа Object (вместо списка, который вы там ожидаете), и map функция для этого не существует.

Это должно быть исправлено, написав это так:

 FutureBuilder<List<AlarmInfo>>(
   ...
),
 

Кроме того, так data как может быть null (но вы проверили это, snapshot.hasData вам нужно написать:

 snapshot.data!.map(...)