Будущее.wait на самом деле не ожидает будущих функций — Flutter

#firebase #flutter #google-cloud-firestore #future #flutter-web

#firebase #flutter #google-облако-firestore #будущее #flutter-web

Вопрос:

Я пытаюсь запустить несколько фьючерсов параллельно, но Future.wait на самом деле не ожидает будущих функций. Я получаю эту ошибку

 Error: NoSuchMethodError: '<Unexpected Null Value>'
method not found
  

Ниже приведен простой код. documentIDToName функция выполняется с опозданием

 Stream<List<Item>> _itemDataProvider = DatabaseService().getAllItems;
List<Item> _extractedList = await _itemDataProvider.first;
// Yes above stream is getting data in proper for prolem is in Future.wait
      print("---> Inside for loop "   _extractedList[i].price.toString());
for (int i = 0; i < _extractedList.length; i  ) {
String _itemCtgName,_itemSubCtgName ;

Future.wait([
        DBHelperFtns().documentIDToName(
          FirebaseFirestore.instance.collection('itemCtg'),
          "itemCtgID",
          "name",
        _extractedList[i].itemCtgID,
        ),
        DBHelperFtns().documentIDToName(
          FirebaseFirestore.instance.collection('itemSubCtg'),
          "itemSubCtgID",
          "name",
          _extractedList[i].itemSubCtgID,
        ),
      ]).then((value) {
        _itemCtgName = value[0];
        _itemSubCtgName = value[1];
      }).catchError((e) => print("ERROR  : $e"));
      print(" _itemCtgName: "   _itemCtgName.toString());
      print(" _itemSubCtgName: "   _itemSubCtgName.toString());
}
  
   // -------- Extracting name using ID
  Future<dynamic> documentIDToName(
print("----> Inside documentIDToName ftn");
    CollectionReference passedCollection,
    String dbKeyNamOfID,
    String dbKeyNamOfName,
    String passedID,
  ) async {
    String _extractedName;
    await passedCollection
        .where(dbKeyNamOfID, isEqualTo: passedID)
        .get()
        .then((data) {
      if (data.docs.length > 0) {
        _extractedName = data.docs[0].data()[dbKeyNamOfName].toString();
      }
    });
    return _extractedName;
  }
  

Вывод. documentIDToName возвращает ожидаемые данные, но выполняется с небольшим опозданием. Почему Future.wait не ожидает

 
---> Inside for loop 150 Rs
dart_sdk.js:26496 Above Future wait--
dart_sdk.js:26496  _itemCtgName: null
dart_sdk.js:26496  _itemSubCtgName: null

dart_sdk.js:5968 Uncaught (in promise) Error: NoSuchMethodError: '<Unexpected Null Value>'
method not found
Receiver: null
Arguments: []
    at Object.throw_ [as throw] (dart_sdk.js:4334)
    at Object.throwNullValueError (dart_sdk.js:4300)
    at Object._notNull [as notNull] (dart_sdk.js:4650)
    at itemViewmodel.ItemViewModel.new.getAllTheItemsInfo (itemViewmodel.dart.js:521)
    at getAllTheItemsInfo.next (<anonymous>)
    at dart_sdk.js:37603
    at _RootZone.runUnary (dart_sdk.js:37457)
    at _FutureListener.thenAwait.handleValue (dart_sdk.js:32441)
    at handleValueCallback (dart_sdk.js:32988)
    at Function._propagateToListeners (dart_sdk.js:33026)
    at _Future.new.[_complete] (dart_sdk.js:32860)
    at Object._cancelAndValue (dart_sdk.js:37867)
    at dart_sdk.js:18578
    at _RootZone.runUnaryGuarded (dart_sdk.js:37383)
    at _ForwardingStreamSubscription.new.[_sendData] (dart_sdk.js:30992)
    at _ForwardingStreamSubscription.new.[_add] (dart_sdk.js:30938)
    at _ForwardingStreamSubscription.new.[_add] (dart_sdk.js:35106)
    at _MapStream.new.[_handleData] (dart_sdk.js:35237)
    at _ForwardingStreamSubscription.new.[_handleData] (dart_sdk.js:35134)
    at _RootZone.runUnaryGuarded (dart_sdk.js:37383)
    at _ControllerSubscription.new.[_sendData] (dart_sdk.js:30992)
    at _ControllerSubscription.new.[_add] (dart_sdk.js:30938)
    at _SyncStreamController.new.[_sendData] (dart_sdk.js:33894)
    at _SyncStreamController.new.[_add] (dart_sdk.js:33702)
    at dart_sdk.js:18106
    at _RootZone.runUnary (dart_sdk.js:37457)
    at _FutureListener.then.handleValue (dart_sdk.js:32441)
    at handleValueCallback (dart_sdk.js:32988)
    at Function._propagateToListeners (dart_sdk.js:33026)
    at _Future.new.[_completeWithValue] (dart_sdk.js:32869)
    at async._AsyncCallbackEntry.new.callback (dart_sdk.js:32891)
    at Object._microtaskLoop (dart_sdk.js:37718)
    at _startMicrotaskLoop (dart_sdk.js:37724)
    at dart_sdk.js:33243
DartError @ dart_sdk.js:5968
throw_ @ dart_sdk.js:4334
throwNullValueError @ dart_sdk.js:4300
_notNull @ dart_sdk.js:4650
getAllTheItemsInfo @ itemViewmodel.dart.js:521
(anonymous) @ dart_sdk.js:37603
runUnary @ dart_sdk.js:37457
handleValue @ dart_sdk.js:32441
handleValueCallback @ dart_sdk.js:32988
_propagateToListeners @ dart_sdk.js:33026
[_complete] @ dart_sdk.js:32860
_cancelAndValue @ dart_sdk.js:37867
(anonymous) @ dart_sdk.js:18578
runUnaryGuarded @ dart_sdk.js:37383
[_sendData] @ dart_sdk.js:30992
[_add] @ dart_sdk.js:30938
[_add] @ dart_sdk.js:35106
[_handleData] @ dart_sdk.js:35237
[_handleData] @ dart_sdk.js:35134
runUnaryGuarded @ dart_sdk.js:37383
[_sendData] @ dart_sdk.js:30992
[_add] @ dart_sdk.js:30938
[_sendData] @ dart_sdk.js:33894
[_add] @ dart_sdk.js:33702
(anonymous) @ dart_sdk.js:18106
runUnary @ dart_sdk.js:37457
handleValue @ dart_sdk.js:32441
handleValueCallback @ dart_sdk.js:32988
_propagateToListeners @ dart_sdk.js:33026
[_completeWithValue] @ dart_sdk.js:32869
(anonymous) @ dart_sdk.js:32891
_microtaskLoop @ dart_sdk.js:37718
_startMicrotaskLoop @ dart_sdk.js:37724
(anonymous) @ dart_sdk.js:33243
Promise.then (async)
_scheduleImmediateWithPromise @ dart_sdk.js:33241
_scheduleImmediate @ dart_sdk.js:33248
_scheduleAsyncCallback @ dart_sdk.js:37740
_rootScheduleMicrotask @ dart_sdk.js:37975
scheduleMicrotask @ dart_sdk.js:37483
[_asyncCompleteWithValue] @ dart_sdk.js:32890
[_asyncComplete] @ dart_sdk.js:32886
complete @ dart_sdk.js:32335
(anonymous) @ dart_sdk.js:60110
Promise.then (async)
promiseToFuture @ dart_sdk.js:60112
handleThenable @ storage.dart.js:3260
runBody @ dart_sdk.js:37623
_async @ dart_sdk.js:37654
handleThenable @ storage.dart.js:3257
get @ storage.dart.js:2588
get @ write_batch_web.dart.js:293
runBody @ dart_sdk.js:37623
_async @ dart_sdk.js:37654
get @ write_batch_web.dart.js:291
get @ cloud_firestore.dart.js:225
runBody @ dart_sdk.js:37623
_async @ dart_sdk.js:37654
get @ cloud_firestore.dart.js:223
get getAllItems @ dbHelperFtns.dart.js:184
getAllTheItemsInfo @ itemViewmodel.dart.js:500
runBody @ dart_sdk.js:37623
_async @ dart_sdk.js:37654
getAllTheItemsInfo @ itemViewmodel.dart.js:497
(anonymous) @ addAlreadyExistingItemView.dart.js:909
runBody @ dart_sdk.js:37623
_async @ dart_sdk.js:37654
(anonymous) @ addAlreadyExistingItemView.dart.js:908
initState @ baseView.dart.js:158
[_firstBuild] @ widget_span.dart.js:43729
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
performRebuild @ widget_span.dart.js:43755
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
[_firstBuild] @ widget_span.dart.js:43748
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
performRebuild @ widget_span.dart.js:43755
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
[_firstBuild] @ widget_span.dart.js:43748
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
performRebuild @ widget_span.dart.js:43755
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
[_firstBuild] @ widget_span.dart.js:43748
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
performRebuild @ widget_span.dart.js:43755
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
[_firstBuild] @ widget_span.dart.js:43748
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
performRebuild @ widget_span.dart.js:43755
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
[_firstBuild] @ widget_span.dart.js:43748
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
performRebuild @ widget_span.dart.js:43755
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
[_firstBuild] @ widget_span.dart.js:43748
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
performRebuild @ widget_span.dart.js:43755
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
[_firstBuild] @ widget_span.dart.js:43748
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
performRebuild @ widget_span.dart.js:43755
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
[_firstBuild] @ widget_span.dart.js:43748
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
performRebuild @ widget_span.dart.js:43755
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
[_firstBuild] @ widget_span.dart.js:43748
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
performRebuild @ widget_span.dart.js:43755
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
[_firstBuild] @ widget_span.dart.js:43748
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
performRebuild @ widget_span.dart.js:23690
rebuild @ widget_span.dart.js:22921
[_firstBuild] @ widget_span.dart.js:23661
mount @ widget_span.dart.js:23657
inflateWidget @ widget_span.dart.js:22509
updateChild @ widget_span.dart.js:22372
mount @ widget_span.dart.js:36514
inflateWidget @ widget_span.dart.js:22509
requestAnimationFrame (async)
[_requestAnimationFrame] @ dart_sdk.js:100261
[dartx.requestAnimationFrame] @ dart_sdk.js:100253
(anonymous) @ dart_sdk.js:171808
scheduleFrame @ dart_sdk.js:171132
scheduleFrame @ binding.dart.js:614
scheduleFrameCallback @ binding.dart.js:516
scheduleTick @ ticker.dart.js:142
[_tick] @ ticker.dart.js:135
[_invokeFrameCallback] @ binding.dart.js:756
(anonymous) @ binding.dart.js:711
forEach @ dart_sdk.js:24760
handleBeginFrame @ binding.dart.js:708
[_handleBeginFrame] @ binding.dart.js:672
_invoke1 @ dart_sdk.js:175339
invokeOnBeginFrame @ dart_sdk.js:171220
(anonymous) @ dart_sdk.js:171813
requestAnimationFrame (async)
[_requestAnimationFrame] @ dart_sdk.js:100261
[dartx.requestAnimationFrame] @ dart_sdk.js:100253
(anonymous) @ dart_sdk.js:171808
scheduleFrame @ dart_sdk.js:171132
scheduleFrame @ binding.dart.js:614
scheduleFrameCallback @ binding.dart.js:516
scheduleTick @ ticker.dart.js:142
start @ ticker.dart.js:96
[_startSimulation] @ animation_controller.dart.js:443
[_animateToInternal] @ animation_controller.dart.js:371
forward @ animation_controller.dart.js:292
(anonymous) @ icon_button.dart.js:44299
ink_splash.InkSplash.new @ icon_button.dart.js:44301
create @ icon_button.dart.js:44038
[_createInkFeature] @ icon_button.dart.js:46857
[_startSplash] @ icon_button.dart.js:46932
[_handleTapDown] @ icon_button.dart.js:46913
(anonymous) @ tap.dart.js:369
invokeCallback @ recognizer.dart.js:189
handleTapDown @ tap.dart.js:369
[_checkDown] @ tap.dart.js:194
acceptGesture @ tap.dart.js:176
sweep @ arena.dart.js:208
handleEvent @ binding.dart.js:170
dispatchEvent @ binding.dart.js:149
[_handlePointerEvent] @ binding.dart.js:120
[_flushPointerEventQueue] @ binding.dart.js:93
[_handlePointerDataPacket] @ binding.dart.js:83
_invoke1 @ dart_sdk.js:175339
invokeOnPointerDataPacket @ dart_sdk.js:171252
[_onPointerData] @ dart_sdk.js:144583
(anonymous) @ dart_sdk.js:144970
(anonymous) @ dart_sdk.js:144929
(anonymous) @ dart_sdk.js:144682


----> Inside documentIDToName ftn and returned value is Breakfast amp; Dairy
----> Inside documentIDToName ftn and returned value is Breakfast