如何在 Flutter 中添加多个相同类型的 ChangeNotifierProvider
how to add multiple ChangeNotifierProvider in same type in Flutter
是否可以添加同类型的多个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
不可能。您必须提供不同类型的提供商才能获得正确的值。
如果您多次使用同一个提供者,那么它将为您提供小部件树中最近的提供者值。
他们的官方文档中也提到了。
在这里查看。
Can I obtain two different providers using the same type?
有一种优雅的方法可以做到这一点,但我们必须创建两个单独的 class 来扩展 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 代码中,您可以将 Provider 包装为
return MultiProvider(
providers: [
ChangeNotifierProvider<FirstNotifier>(
create: (_) => FirstNotifier,
),
ChangeNotifierProvider<SecondNotifier >(
create: (_) => SecondNotifier ,
),
],
这样就可以了
是否可以添加同类型的多个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
不可能。您必须提供不同类型的提供商才能获得正确的值。
如果您多次使用同一个提供者,那么它将为您提供小部件树中最近的提供者值。
他们的官方文档中也提到了。
在这里查看。 Can I obtain two different providers using the same type?
有一种优雅的方法可以做到这一点,但我们必须创建两个单独的 class 来扩展 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 代码中,您可以将 Provider 包装为
return MultiProvider(
providers: [
ChangeNotifierProvider<FirstNotifier>(
create: (_) => FirstNotifier,
),
ChangeNotifierProvider<SecondNotifier >(
create: (_) => SecondNotifier ,
),
],
这样就可以了