Flutter 防止;试图使用子类型为Listenable/Stream的提供程序;颤振误差

Flutter 防止;试图使用子类型为Listenable/Stream的提供程序;颤振误差,flutter,flutter-provider,Flutter,Flutter Provider,我想在我的flatter项目中使用provider包(4.0),但是我得到了“尝试使用子类型为Listenable/Stream的provider”错误/警告 我的担忧: 我有一个Api()类,它包含firebase cloudstorage的基本CRUD功能 我有一个EventService()-类,它使用带有具体参数的Api()-类 对于我的视图,我有一个名为EventOverviewModel的ViewModel类,它使用EventService 我的提供程序配置如下所示: List<

我想在我的flatter项目中使用provider包(4.0),但是我得到了“尝试使用子类型为Listenable/Stream的provider”错误/警告

我的担忧:

我有一个
Api()
类,它包含firebase cloudstorage的基本CRUD功能

我有一个
EventService()
-类,它使用带有具体参数的
Api()
-类

对于我的视图,我有一个名为
EventOverviewModel
的ViewModel类,它使用EventService

我的提供程序配置如下所示:

List<SingleChildWidget> providers = [
  ...independentServices,
  ...dependentServices,
  ...uiConsumableProviders,
];

// Services die unabhängig von anderen sind
List<SingleChildWidget> independentServices = [
  Provider<EventService>(create: (_) => EventService(api: Api('events')))
];

// Services die von anderen Services abhängig sind
List<SingleChildWidget> dependentServices = [
  ProxyProvider<EventService, EventOverviewModel>(
    update: (_, srvc, __) => EventOverviewModel(eventService: srvc),
  )
];

List<SingleChildWidget> uiConsumableProviders = [];
列表提供程序=[
…独立服务,
…受抚养人服务,
…uiConsumableProviders,
];
//安徒生的服务
列出独立服务=[
提供者(创建:())=>EventService(api:api('events'))
];
//安徒生服务公司
列出从属服务=[
代理提供者(
更新:(u,srvc,uu)=>EventOverview模型(eventService:srvc),
)
];
列出uiConsumableProviders=[];
应用程序中的一切似乎都正常,但我还是得到了“尝试使用子类型为Listenable/Stream的提供程序”的消息

如何将代码更改为不再获取此错误消息

Running Gradle task 'assembleDebug'...
I/flutter (16553): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (16553): The following assertion was thrown building NumericProxyProvider<EventService, Void, Void, Void,
I/flutter (16553): Void, Void, EventOverviewModel>(dirty, dependencies: [InheritedProvider<EventService>], state:
I/flutter (16553): _ProxyProviderState<EventOverviewModel>#8d38d):
I/flutter (16553): Tried to use Provider with a subtype of Listenable/Stream (EventOverviewModel).
I/flutter (16553): 
I/flutter (16553): This is likely a mistake, as Provider will not automatically update dependents
I/flutter (16553): when EventOverviewModel is updated. Instead, consider changing Provider for more specific
I/flutter (16553): implementation that handles the update mechanism, such as:
I/flutter (16553): 
I/flutter (16553): - ListenableProvider
I/flutter (16553): - ChangeNotifierProvider
I/flutter (16553): - ValueListenableProvider
I/flutter (16553): - StreamProvider
I/flutter (16553): 
I/flutter (16553): Alternatively, if you are making your own provider, consider using InheritedProvider.
I/flutter (16553): 
I/flutter (16553): If you think that this is not an error, you can disable this check by setting
I/flutter (16553): Provider.debugCheckInvalidValueType to `null` in your main file:
I/flutter (16553): 
I/flutter (16553): ```
I/flutter (16553): void main() {
I/flutter (16553):   Provider.debugCheckInvalidValueType = null;
I/flutter (16553): 
I/flutter (16553):   runApp(MyApp());
I/flutter (16553): }
I/flutter (16553): ```
I/flutter (16553): 
I/flutter (16553): 
I/flutter (16553): The relevant error-causing widget was:
I/flutter (16553):   NumericProxyProvider<EventService, Void, Void, Void, Void, Void, EventOverviewModel>
I/flutter (16553):   file:///E:/Dev/flutter/.pub-cache/hosted/pub.dartlang.org/provider-3.2.0/lib/src/proxy_provider.dart:232:12
I/flutter (16553): 
I/flutter (16553): When the exception was thrown, this was the stack:
I/flutter (16553): #0      Provider.debugCheckInvalidValueType.<anonymous closure>.<anonymous ...
正在运行Gradle任务“assembleDebug”。。。
I/颤振(16553):══╡ WIDGETS库捕获到异常╞═══════════════════════════════════════════════════════════
I/flatter(16553):在生成NumericProxyProvider(脏,依赖项:[InheritedProvider],状态]时抛出以下断言:
I/颤振(16553):_ProxyProviderState#8d38d):
I/flatter(16553):尝试将提供程序与Listenable/Stream(EventOverviewModel)子类型一起使用。
I/颤振(16553):
I/flatter(16553):这可能是一个错误,因为提供者不会自动更新依赖项
I/颤振(16553):更新EventOverview模型时。相反,考虑更改供应商以获得更具体的信息。
I/flatter(16553):处理更新机制的实现,例如:
I/颤振(16553):
I/颤振(16553):-ListenableProvider
I/颤振(16553):-ChangeNotifierProvider
I/颤振(16553):-ValueListenableProvider
I/颤振(16553):-StreamProvider
I/颤振(16553):
I/Frutter(16553):另一方面,如果您正在创建自己的提供程序,请考虑使用继承提供程序。
I/颤振(16553):
I/颤振(16553):如果您认为这不是错误,可以通过设置
I/flatter(16553):Provider.debugCheckInvalidValueType在主文件中设置为“null”:
I/颤振(16553):
I/颤振(16553):```
I/颤振(16553):真空总管(){
I/flatter(16553):Provider.debugCheckInvalidValueType=null;
I/颤振(16553):
I/颤振(16553):runApp(MyApp());
I/颤振(16553):}
I/颤振(16553):```
I/颤振(16553):
I/颤振(16553):
I/颤振(16553):导致错误的相关小部件是:
I/颤振(16553):数值ProxyProvider
I/颤振(16553):file:///E:/Dev/flutter/.pub-cache/hosted/pub.dartlang.org/provider-3.2.0/lib/src/proxy_provider.dart:232:12
I/颤振(16553):
I/flatter(16553):当抛出异常时,这是堆栈:
I/flatter(16553):#0提供程序。调试检查无效值类型..尝试更改

List<SingleChildWidget> independentServices = [
  Provider<EventService>(create: (_) => EventService(api: Api('events')))
];
。。。或者更好的是,您的模型可以使用ChangeNotifier版本:

ChangeNotifierProvider
ChangeNotifierProxyProvider

。。。当这些对象不再使用时,它可以方便地处理/分离任何侦听器(释放资源)。

感谢bro还请注意,文档建议使用ChangeNotifierProxyProvider而不是ListenableProxyProvider,它们都需要创建返回EventOverviewModel initial的参数state@AhmedD.Sherif,你能参考一下那个建议吗?
List<SingleChildWidget> dependentServices = [
  ProxyProvider<EventService, EventOverviewModel>(
    update: (_, srvc, __) => EventOverviewModel(eventService: srvc),
  )
];
List<SingleChildWidget> dependentServices = [
  ListenableProxyProvider<EventService, EventOverviewModel>(
    update: (_, srvc, __) => EventOverviewModel(eventService: srvc),
  )
];
ListenableProvider
ListenableProxyProvider
ChangeNotifierProvider
ChangeNotifierProxyProvider