Flutter 将数据从子窗口小部件传递到父窗口小部件
我有一个仪表板小部件,其主体如下: 我想将数据从子部件DashboardGrid(在代码块末尾进行检查)传递到这个父部件。我该怎么做Flutter 将数据从子窗口小部件传递到父窗口小部件,flutter,dart,Flutter,Dart,我有一个仪表板小部件,其主体如下: 我想将数据从子部件DashboardGrid(在代码块末尾进行检查)传递到这个父部件。我该怎么做 body:Column( 儿童:[ 大小盒子( 身高:20, ), 填充物( 填充:仅限边设置(左:16,右:16), 孩子:排( mainAxisAlignment:mainAxisAlignment.spaceBetween, 儿童:[ 纵队( crossAxisAlignment:crossAxisAlignment.start, 儿童:[ 正文( “类别”
body:Column(
儿童:[
大小盒子(
身高:20,
),
填充物(
填充:仅限边设置(左:16,右:16),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
纵队(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
“类别”,
样式:TextStyle(
颜色:颜色,白色,
尺寸:20,
fontWeight:fontWeight.bold),
],
),
图标按钮(
对齐:alignment.topCenter,
图标:新图标(Icons.search,颜色:Theme.of(context.hintColor,),
按下:(){},
)
],
),
),
大小盒子(
身高:40,
),
仪表板网格(),
])
带有回调
在仪表板网格中创建一个函数
class DashboardGrid extends StatelessWidget {
final Function(String) callback;
DashboardGrid({this.callback});
....
然后在列中,您将使用函数实例化它
[
...,
DashboardGrid(callback:(String value)=>print(value));
]
void passTheData(String data) => callback(data);
当您想在仪表板网格中传递数据时,只需调用函数
[
...,
DashboardGrid(callback:(String value)=>print(value));
]
void passTheData(String data) => callback(data);
示例是使用String
,但您可以通过回调传递任何数据。
在仪表板网格中创建一个函数
class DashboardGrid extends StatelessWidget {
final Function(String) callback;
DashboardGrid({this.callback});
....
然后在列中,您将使用函数实例化它
[
...,
DashboardGrid(callback:(String value)=>print(value));
]
void passTheData(String data) => callback(data);
当您想在仪表板网格中传递数据时,只需调用函数
[
...,
DashboardGrid(callback:(String value)=>print(value));
]
void passTheData(String data) => callback(data);
示例是使用
String
,但您可以传递任何数据。如果您的子小部件位于同一个小部件树下,您可以利用通知来冒泡数据
首先,为您需要的内容创建通知。您可以创建一个通知,也可以创建一个包含多个具体通知的抽象通知。对于本例,我假设您希望处理不同的通知
abstract class MyNotification extends Notification {}
class SomethingHappened extends MyNotification {}
class NothingHappened extends MyNotification {}
然后,您可以在父窗口小部件中处理该类型的所有通知:
class ParentWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return NotificationListener<MyNotification>(
onNotification: (notification) {
// Handle your notification
return true;
},
child: Container(),
);
}
}
类ParentWidget扩展了无状态widget{
@凌驾
小部件构建(构建上下文){
返回通知侦听器(
通知:(通知){
//处理您的通知
返回true;
},
子级:容器(),
);
}
}
或者选择单个的:
class ParentWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return NotificationListener<MyNotification>(
onNotification: (notification) {
if(notification is SomethingHappened){
// Handle
} else if(notification is NothingHappened){
// Handle
}
return true;
},
child: Container(),
);
}
类ParentWidget扩展了无状态widget{
@凌驾
小部件构建(构建上下文){
返回通知侦听器(
通知:(通知){
如果(通知发生了什么事){
//处理
}否则,如果(通知不出现){
//处理
}
返回true;
},
子级:容器(),
);
}
要从子小部件发出通知,只需调用T().dispatch(context)
,其中T
是您的通知类型。例如,somethingOccessed().dispatch(context)
。就是这样。如果您的子小部件位于同一个小部件树下,您可以利用通知来冒泡数据
首先,根据需要创建通知。您可以创建一个通知,也可以创建一个包含多个具体通知的抽象通知。在本例中,我假设您要处理不同的通知
abstract class MyNotification extends Notification {}
class SomethingHappened extends MyNotification {}
class NothingHappened extends MyNotification {}
然后,您可以在父窗口小部件中处理该类型的所有通知:
class ParentWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return NotificationListener<MyNotification>(
onNotification: (notification) {
// Handle your notification
return true;
},
child: Container(),
);
}
}
类ParentWidget扩展了无状态widget{
@凌驾
小部件构建(构建上下文){
返回通知侦听器(
通知:(通知){
//处理您的通知
返回true;
},
子级:容器(),
);
}
}
或者选择单个的:
class ParentWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return NotificationListener<MyNotification>(
onNotification: (notification) {
if(notification is SomethingHappened){
// Handle
} else if(notification is NothingHappened){
// Handle
}
return true;
},
child: Container(),
);
}
类ParentWidget扩展了无状态widget{
@凌驾
小部件构建(构建上下文){
返回通知侦听器(
通知:(通知){
如果(通知发生了什么事){
//处理
}否则,如果(通知不出现){
//处理
}
返回true;
},
子级:容器(),
);
}
要从子小部件发出通知,只需调用T().dispatch(context)
,其中T
是您的通知类型。例如,somethingOccessed().dispatch(context);
。就是这样。要解决这个问题,有两种方法。第一种方法是创建GlobalKey()并将其作为参数传递给子窗口小部件。第二种方法是为父状态创建一个全局变量,并在子状态中使用它。要解决这个问题,有两种方法。第一种方法是创建一个GlobalKey()第二种方法是为父状态创建一个全局变量,并在子状态中使用它。只需将函数作为参数传递给DashboardGrid()从父级,然后通过传递要传递的所需数据来调用该函数。由于该函数是在父窗口小部件类中定义的,因此您可以使用该函数中的参数来计算数据,只需将函数作为参数传递给DashboardGrid()从父窗口,然后通过传递所需的数据来调用该函数。由于该函数是在父窗口小部件类中定义的,因此可以使用该函数中的