【发布时间】:2019-10-23 14:45:04
【问题描述】:
我尝试使用提供程序包从不同的类触发一个简单的操作。我做了什么:
1) 我创建了一个名为 MySchedule 的 ChangeNotifier 类,它有一个 getter 和一个 setter:
class MySchedule extends ChangeNotifier {
bool _foodSet = false;
bool get foodSet => _foodSet;
set foodSet(bool newBool) {
_foodSet = newBool;
notifyListeners();
}
}
这个小部件的小部件树如下(我使它比原来的更短) - 这是在一个有状态的小部件类中
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
builder: (context) => MySchedule(),
child: Scaffold(
body: Stack(
children: <Widget>[
Container(
child: AnotherWidgetWhichHasLotOfChild()
),
),
AnimatedContainer(
curve: Curves.fastOutSlowIn,
duration: Duration(milliseconds: 500),
alignment: Alignment(left, -1),
child: MenuSheet(close: toggleMainMenu, change: changeToTab),
),
FoodDetailsClass()
],
),
));
}
FoodDetailsClass 有一个可见性的容器,我想用提供者更改它的“可见”布尔值:
class FoodDetailsClass extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<MySchedule>(
builder: (context, provider, child) => Visibility(
visible: provider.foodSet,
child: Center(
child: Container(
height: 600,
width: 400,
color: Colors.red,
),
),
));
}
}
我想以这种方式从“AnotherWidgetWhichHasLotOfChild()”类中更改它: 在上面提到的类里面有一个如下的调用(但是它会抛出一个错误):
GestureDetector(
onTap: (){
final schedule2 =
Provider.of<MySchedule>(context);
schedule2.foodSet = true;
}
错误是: 错误:在此 FoodList 小部件上方找不到正确的提供者
要修复,请:
- 确保 Provider 是此 FoodList 小部件的祖先
【问题讨论】: