要在showModalBottomSheet中使用Provider,我需要用ChangeNotifierProvider Package 我的MaterialApp。如果MaterialApp嵌套了多个ChangeNotifierProviders,这些ChangeNotifierProviders主要用于处理特定屏幕中的底层,对性能有什么影响?是否有其他有效的方法在showModalBottomSheet中使用Provider?
showModalBottomSheet
Provider
ChangeNotifierProvider
MaterialApp
ChangeNotifierProviders
ruarlubt1#
添加多个提供程序或在MaterialApp之上使用MultiProvider是完全可以的,这实际上是对全局依赖项的正确做法。如果你使用MultiProvider来嵌套 * 很多 * 依赖项,有一个文档记录的潜在性能影响。这与widget树的性能关系不大,但是你一次示例化很多widget会带来的影响。正如文档所解释的,有一些方法可以解决这个问题,包括将依赖项拆分并根据状态加载它们,或者简单地避免MultiProvider。您的问题特别询问了使用多个ChangeNotifierProvider Package MaterialApp而不是使用MultiProvider,所以我认为您在这方面做得很好。对你的问题的一个更全面的解释是,你的Provider需要***插入到Navigator***之上,用于你在堆栈上推送的新路由,要么使用Navigator.push,showModalBottomSheet,要么根据你使用的导航风格修改Navigator.pages,以便能够通过上下文访问那些Provider。MaterialApp构建了你的“根”Navigator,这就是为什么它们需要高于MaterialApp。如果你使用嵌套导航的模式,这是我们在我工作的应用程序中经常使用的,您需要确保在特定嵌套Navigator中想要的任何Provider都在Navigator之上。除了能够重用这些“内部旅程”之外,你可以定制这些导航树所需的依赖项(Provider s或其他InheritedWidget s),允许你只在需要的地方注入。
MultiProvider
Navigator
Navigator.push
Navigator.pages
InheritedWidget
bis0qfac2#
你不需要也不应该仅仅为了能够在modals中使用它而用你的provider Package 整个应用程序(任何)。只需使用provider的.value构造函数并将已经创建的provider提供给适用于modal的新widget树(上下文)。在SO上有几个这样的例子,以及为什么你不应该用一堆提供者不必要地 Package 你的整个MaterialApp的例子和解释。
.value
2条答案
按热度按时间ruarlubt1#
添加多个提供程序或在
MaterialApp
之上使用MultiProvider
是完全可以的,这实际上是对全局依赖项的正确做法。如果你使用
MultiProvider
来嵌套 * 很多 * 依赖项,有一个文档记录的潜在性能影响。这与widget树的性能关系不大,但是你一次示例化很多widget会带来的影响。正如文档所解释的,有一些方法可以解决这个问题,包括将依赖项拆分并根据状态加载它们,或者简单地避免
MultiProvider
。您的问题特别询问了使用多个ChangeNotifierProvider
PackageMaterialApp
而不是使用MultiProvider
,所以我认为您在这方面做得很好。对你的问题的一个更全面的解释是,你的
Provider
需要***插入到Navigator
***之上,用于你在堆栈上推送的新路由,要么使用Navigator.push
,showModalBottomSheet
,要么根据你使用的导航风格修改Navigator.pages
,以便能够通过上下文访问那些Provider
。MaterialApp
构建了你的“根”Navigator
,这就是为什么它们需要高于MaterialApp
。如果你使用嵌套导航的模式,这是我们在我工作的应用程序中经常使用的,您需要确保在特定嵌套Navigator
中想要的任何Provider
都在Navigator
之上。除了能够重用这些“内部旅程”之外,你可以定制这些导航树所需的依赖项(Provider
s或其他InheritedWidget
s),允许你只在需要的地方注入。bis0qfac2#
你不需要也不应该仅仅为了能够在modals中使用它而用你的provider Package 整个应用程序(任何)。只需使用provider的
.value
构造函数并将已经创建的provider提供给适用于modal的新widget树(上下文)。在SO上有几个这样的例子,以及为什么你不应该用一堆提供者不必要地 Package 你的整个MaterialApp的例子和解释。