【发布时间】:2022-12-03 20:56:26
【问题描述】:
我对供应商有一个问题。我不想创建全球供应商。我的意思是,为特定屏幕创建提供程序。我想在两个屏幕中使用相同的提供者而不创建另一个实例。 例如。
我的提供商(针对特定屏幕)
class ServiceScreenProvider with ChangeNotifier { final BuildContext _context; ServiceScreenProvider(this._context); }我的第一个屏幕(用于输入)
class ServiceScreen extends StatefulWidget { const ServiceScreen({Key? key}) : super(key: key); @override _ServiceScreenState createState() => _ServiceScreenState(); } class _ServiceScreenState extends State<ServiceScreen> { @override Widget build(BuildContext context) { return ChangeNotifierProvider<ServiceScreenProvider>( create: (ctx) => ServiceScreenProvider(ctx), child: Column( children: const [ ServiceLogo(), FormWidget(), ], ), ); } }在这里,我是第一次创建提供者。 现在我想将此提供程序用于另一个屏幕
class ServiceDetailScreen extends StatefulWidget { const ServiceDetailScreen({Key? key}) : super(key: key); @override _ServiceDetailScreenState createState() => _ServiceDetailScreenState(); } class _ServiceDetailScreenState extends State<ServiceDetailScreen> { @override Widget build(BuildContext context) { return Column( children: const [ ServiceLogo(), FormWidget(), ], ); } }我在打开新的 sServiceDetailScreen 时在 ServiceDetailScreen 屏幕的构造函数中传递了上下文。我正在使用 ServiceScreenProvider。
是否有任何其他方式来获取 ServiceScreenProvider 的实例而不在构造函数中传递上下文。
谢谢你。
【问题讨论】: