【问题标题】:how to add multiple ChangeNotifierProvider in same type in Flutter如何在 Flutter 中添加多个相同类型的 ChangeNotifierProvider
【发布时间】:2020-07-18 00:40:16
【问题描述】:

是否可以同时添加多个ChangeNotifierProvider?

return MultiProvider(
  providers: [
      ChangeNotifierProvider<ValueNotifier<double>>(
        create: (_) => ValueNotifier<double>(0.0),
      ),
      ChangeNotifierProvider<ValueNotifier<double>>(
        create: (_) => ValueNotifier<double>(0.0),
      ),
  ],

在我的构建方法中

 @override
  Widget build(BuildContext context) {
    ValueNotifier<double> firstNotifier = Provider.of(context, listen: true);
    ValueNotifier<double> secondNotifier = Provider.of(context, listen: true);

  print('First value ${firstNotifier.value} Second value ${secondNotifier.value}');

 ...
 onTap:(){
   firstNotifier.value = 10.0;
   secondNotifier.value = 30.0;
 }

两个打印值相同 第一个值为 10 第二个值为 10

【问题讨论】:

    标签: flutter dart flutter-provider


    【解决方案1】:

    不可能这样做。您必须提供不同类型的提供程序才能获得正确的值。

    如果您多次使用同一个提供者,那么它将为您提供小部件树中最近提供者值的值。

    他们的官方文档中也提到了。

    在这里查看。 Can I obtain two different providers using the same type?

    【讨论】:

      【解决方案2】:

      有一种优雅的方法可以做到这一点,但我们必须创建两个单独的类来扩展 changeNotifierProvider

      class FirstNotifier with ChangeNotifier{
        double value=0; //default
        void ChangeValue(double newValue){
          value=newValue
          notifyListeners();
        }
      }
      

      第二个通知器为 ;

      class SecondNotifier with ChangeNotifier{
        double value=0; //default
        void ChangeValue(double newValue){
          value=newValue
          notifyListeners();
        }
      }
      

      然后在您的构建方法中,您可以访问它们

      final firstNotifier = Provider.of<FirstNotifier>(context, listen:true)
      final secondNotifier = Provider.of<SecondNotifier>(context, listen:true)
      

      然后你可以将它们更改为

      firstNotifier.ChangeValue(30); 
      

      在 MultiProvider 代码中,您可以将 Providers 包装为

      return MultiProvider(
        providers: [
            ChangeNotifierProvider<FirstNotifier>(
              create: (_) => FirstNotifier,
            ),
            ChangeNotifierProvider<SecondNotifier >(
              create: (_) => SecondNotifier ,
            ),
        ],
      

      这样就可以了

      【讨论】:

        猜你喜欢
        • 2022-01-24
        • 1970-01-01
        • 2020-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-02
        • 2015-04-29
        • 1970-01-01
        相关资源
        最近更新 更多