Flutter 从子窗口小部件通知父窗口小部件

Flutter 从子窗口小部件通知父窗口小部件,flutter,flutter-layout,Flutter,Flutter Layout,我正在尝试从子部件刷新父部件。实际上,有很多小部件介于a使用B和B使用C之间。我想在C小部件中刷新事件的小部件。我研究了很多,但找不到确切的答案。截取的代码将非常有用。提前感谢为什么要刷新?您是否更新了任何数据并希望显示新数据 您可以尝试使用提供者小部件。使用它,您可以修改任何数据,并通知对该数据感兴趣的所有人该数据已更改 在您的设置中,您可以将提供者放在A小部件上,在C小部件上,您可以获取值、更新并通知所有人。执行此操作时,小部件将使用更新的信息自动重建 代码如下所示: class AppSt

我正在尝试从子部件刷新父部件。实际上,有很多小部件介于a使用B和B使用C之间。我想在C小部件中刷新事件的小部件。我研究了很多,但找不到确切的答案。截取的代码将非常有用。提前感谢

为什么要刷新?您是否更新了任何数据并希望显示新数据

您可以尝试使用提供者小部件。使用它,您可以修改任何数据,并通知对该数据感兴趣的所有人该数据已更改

在您的设置中,您可以将提供者放在A小部件上,在C小部件上,您可以获取值、更新并通知所有人。执行此操作时,小部件将使用更新的信息自动重建

代码如下所示:

class AppState with ChangeNotifier {
  AppState();

  YourData _data;

  void setData(YourData data) {
    _data = data;
    notifyListeners();
  }
}

ChangeNotifierProvider.value(
  value: AppState(),
  child: WidgetA()
)

WidgetC() {
  Provider.of<AppState>(context).setData(yourChangedDataHere);
}
使用ChangeNotifier初始化AppState{
AppState();
你的数据(你的数据),;
void setData(您的数据){
_数据=数据;
notifyListeners();
}
}
ChangeNotifierProvider.value(
值:AppState(),
孩子:威吉塔()
)
WidgetC(){
Provider.of(context.setData)(yourchangedatahere);
}

有几种解决方案:

  • A
    将执行
    setState
    的回调传递给
    B
    ,然后将其传递给
    C
A类扩展了StatefulWidget{
@凌驾
_AState createState()=>_AState();
}
类_AState扩展状态{
@凌驾
小部件构建(构建上下文){
返回B(
onSomething:()=>setState((){}),
);
}
}
类扩展了无状态控件{
某事物的最终失效;
常量B({Key-Key,this.onSomething}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回C(onSomething:onSomething);
}
}
类C扩展了无状态控件{
某事物的最终失效;
常量C({Key-Key,this.onSomething}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回上升按钮(
在某件事上,
);
}
}
  • A
    中使用
    NotificationListener
    ,并从
    C
    发送
    通知:
类MyNotification扩展了通知{} 类扩展了StatefulWidget{ @凌驾 _AState createState()=>_AState(); } 类_AState扩展状态{ @凌驾 小部件构建(构建上下文){ 返回通知侦听器( 通知:(){ setState((){}); }, child:B(), ); } } 类C扩展了无状态控件{ @凌驾 小部件构建(构建上下文){ 返回上升按钮( 已按下:(){ MyNotification().dispatch(上下文); }, ); } }