如何在Flutter中添加多个相同类型ChangeNotifierProvider

yqlxgs2m  于 2023-02-20  发布在  Flutter
关注(0)|答案(2)|浏览(168)

是否可以添加多个相同类型的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

7hiiyaii

7hiiyaii1#

有一种优雅的方法可以做到这一点,但我们必须创建两个单独的类来扩展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代码中,则可以将提供程序 Package 为

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

这就行了

0md85ypi

0md85ypi2#

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

如果您多次使用同一个提供程序,那么它将为您提供小部件树中最近的提供程序值。
他们的正式文件中也提到:Can I obtain two different providers using the same type?

相关问题