Я не могу получить доступ к значениям на карте в дротике

У меня есть следующий код, в котором я работаю с картой, созданной с помощью функции json.decode():

for (var i = 0; i < data[0]["conversation"].length; i++) {
      print(data[0]["conversation"][i]["conversationID"]);
      print(data[0]["conversation"][i]["startDate"]);
      print(data[0]["conversation"][i]["lastActivity"]);
      print(data[0]["conversation"][i]["messageCount"]);

      for (var j = 0; j < int.parse( data[0]["conversation"][i]["messageCount"] ); j++) {
        print(data[0]["conversation"][i]["messages"]["message"][j]);
      }

      print("\n");
    }

в самом внешнем «for» все работает хорошо, проблема во внутреннем «for», где я получаю ошибку при попытке доступа к значению:

for (var j = 0; j < int.parse( data[0]["conversation"][i]["messageCount"] ); j++) {
  print(data[0]["conversation"][i]["messages"]["message"][j]["body"]);
}

Это ошибка:

E/flutter ( 1650): [ERROR:flutter/shell/common/shell.cc(181)] Dart Error: Unhandled exception:
E/flutter ( 1650): NoSuchMethodError: The method '[]' was called on null.
E/flutter ( 1650): Receiver: null
E/flutter ( 1650): Tried calling: []("body")
E/flutter ( 1650): #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
E/flutter ( 1650): #1      ChatScreenState.obtenerMensajesArchivados (file:///home/fenrir/Documents/api/lib/chat/chat_page.dart:115:67)
E/flutter ( 1650): <asynchronous suspension>
E/flutter ( 1650): #2      ChatScreenState.initState.<anonymous closure> (file:///home/fenrir/Documents/api/lib/chat/chat_page.dart:157:7)
E/flutter ( 1650): #3      _RootZone.runUnary (dart:async/zone.dart:1379:54)
E/flutter ( 1650): #4      _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
E/flutter ( 1650): #5      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
E/flutter ( 1650): #6      Future._propagateToListeners (dart:async/future_impl.dart:671:32)
E/flutter ( 1650): #7      Future._complete (dart:async/future_impl.dart:476:7)
E/flutter ( 1650): #8      _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
E/flutter ( 1650): #9      _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async/runtime/libasync_patch.dart:33:20)
E/flutter ( 1650): #10     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter ( 1650): #11     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)

Пример

data[0]["conversation"][i]["messages"]["message"][j] :

{conversationID: 230, from: 123@localhost, to: 456@localhost, sentDate: 2018-10-18T12:48:05.039Z, body: aloha, roomEvent: false}


print(data[0]["conversation"][i]["messages"]["message"][j].runtimeType); return:
      _InternalLinkedHashMap<String, dynamic>

Не знаю, в чем может быть ошибка, так как в первом "for" у меня работает, а во втором - нет :(

0
0
688
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка заключается в использовании ["body"] на null, поэтому для значения некоторыеjdata[0]["conversation"][i]["messages"]["message"][j] должен быть null.

Попробуйте найти i и j, которые совершают этот бросок, затем проверьте, что в «сообщении» указано ожидаемое количество элементов, и что ни один из них не является null.

Другие вопросы по теме