flutter riverpod 仅在 Web 版本上崩溃,但仅在实际部署时崩溃

问题描述

关于在网络上运行的riverpod,我有一个奇怪的情况。下面的代码在使用 vsCode 调试时在 ios、macos 和 Chrome 中运行良好,但是,在我将其部署到 firebase 托管后,它崩溃了,如下行:

final AsyncValue<TBRinProgress> completedTbrAsyncValue = watch(completedTbrStreamProvider(id));

指的是这一行:

final completedTbrStreamProvider =
StreamProvider.autodispose.family<TBRinProgress,String>((ref,id) {
  final database = ref.watch(databaseProvider);
  final questions = ref.watch(questionStreamProvider);
  if (database != null && id != null && questions is! AsyncLoading) {
    return database.completedTbrStream(
        completedTbrId: id,questions: questions.data.value);
  } else {
    return const Stream.empty();
  }
});

在 chrome 控制台中,我收到以下错误和堆栈跟踪:

Unsupported operation: UnkNown ProviderListenable AutodisposeStreamProvider<dynamic>#0000a(from: Instance of 'AutodisposeStreamProviderFamily<dynamic,dynamic>',argument: 2021-03-17T16:04:40.472)
main.dart.js:9844     at Object.wrapException (https://mxotechaccountmanager.web.app/main.dart.js:7400:17)
main.dart.js:9844     at ProviderContainer.listen$1$2$mayHaveChanged (https://mxotechaccountmanager.web.app/main.dart.js:150983:17)
main.dart.js:9844     at _ConsumerState__reader_closure.call$0 (https://mxotechaccountmanager.web.app/main.dart.js:149336:38)
main.dart.js:9844     at JsLinkedHashMap.putIfAbsent$2 (https://mxotechaccountmanager.web.app/main.dart.js:64594:24)
main.dart.js:9844     at _ConsumerState._reader$1$1 (https://mxotechaccountmanager.web.app/main.dart.js:149306:76)
main.dart.js:9844     at Object.eval [as call$1$1] (eval at Closure_forwardCallTo (https://mxotechaccountmanager.web.app/main.dart.js:7762:14),<anonymous>:3:43)
main.dart.js:9844     at _OverviewPaginatedTableState_build_closure.call$3 (https://mxotechaccountmanager.web.app/main.dart.js:79726:38)
main.dart.js:9844     at Consumer.build$2 (https://mxotechaccountmanager.web.app/main.dart.js:149242:28)
main.dart.js:9844     at _ConsumerState.build$1 (https://mxotechaccountmanager.web.app/main.dart.js:149288:28)
main.dart.js:9844     at StatefulElement.build$0 (https://mxotechaccountmanager.web.app/main.dart.js:136839:25)

不幸的是,我无法在调试情况下重现此错误,因为它仅在部署时发生。所有其他 riverpod 功能都运行良好……但是,这是我在一个提供者中使用多个提供者的唯一地方。

知道发生了什么吗,或者我如何更好地解决问题?

解决方法

这似乎是编译为 javascript 时的错误。通过删除 StreamProvider.autoDispose.family

中的“autoDispose”,我能够使我的代码正常工作

这与消息密切相关:

Unsupported operation: Unknown ProviderListenable AutoDisposeStreamProvider

我不确定这是否是转译时的 Flutter 错误,或者可能是 riverpod 错误。我会向 Riverpod 提出问题,以便 Remi 做出决定。