#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