flutter 在showModalBottomSheet中使用Provider

oxosxuxt  于 2023-04-07  发布在  Flutter
关注(0)|答案(2)|浏览(193)

要在showModalBottomSheet中使用Provider,我需要用ChangeNotifierProvider Package 我的MaterialApp。如果MaterialApp嵌套了多个ChangeNotifierProviders,这些ChangeNotifierProviders主要用于处理特定屏幕中的底层,对性能有什么影响?是否有其他有效的方法在showModalBottomSheet中使用Provider

ruarlubt

ruarlubt1#

添加多个提供程序或在MaterialApp之上使用MultiProvider是完全可以的,这实际上是对全局依赖项的正确做法。
如果你使用MultiProvider来嵌套 * 很多 * 依赖项,有一个文档记录的潜在性能影响。这与widget树的性能关系不大,但是你一次示例化很多widget会带来的影响。
正如文档所解释的,有一些方法可以解决这个问题,包括将依赖项拆分并根据状态加载它们,或者简单地避免MultiProvider。您的问题特别询问了使用多个ChangeNotifierProvider Package MaterialApp而不是使用MultiProvider,所以我认为您在这方面做得很好。
对你的问题的一个更全面的解释是,你的Provider需要***插入到Navigator***之上,用于你在堆栈上推送的新路由,要么使用Navigator.pushshowModalBottomSheet,要么根据你使用的导航风格修改Navigator.pages,以便能够通过上下文访问那些Provider
MaterialApp构建了你的“根”Navigator,这就是为什么它们需要高于MaterialApp。如果你使用嵌套导航的模式,这是我们在我工作的应用程序中经常使用的,您需要确保在特定嵌套Navigator中想要的任何Provider都在Navigator之上。除了能够重用这些“内部旅程”之外,你可以定制这些导航树所需的依赖项(Provider s或其他InheritedWidget s),允许你只在需要的地方注入。

bis0qfac

bis0qfac2#

你不需要也不应该仅仅为了能够在modals中使用它而用你的provider Package 整个应用程序(任何)。只需使用provider的.value构造函数并将已经创建的provider提供给适用于modal的新widget树(上下文)。
在SO上有几个这样的例子,以及为什么你不应该用一堆提供者不必要地 Package 你的整个MaterialApp的例子和解释。

相关问题