我有一个仪表板小部件,其主体如下:
我想将数据从子窗口小部件DashboardGrid(在代码块的末尾检查)传递到此父窗口小部件。我该怎么办?
body: Column(
children: <Widget>[
SizedBox(
height: 20,
),
Padding(
padding: EdgeInsets.only(left: 16, right: 16),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"Categories",
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold)),
],
),
IconButton(
alignment: Alignment.topCenter,
icon: new Icon(Icons.search, color: Theme.of(context).hintColor,),
onPressed: () {},
)
],
),
),
SizedBox(
height: 40,
),
DashboardGrid(),
])
答案 0 :(得分:0)
带有回调。
在DashboardGrid
内创建一个函数
class DashboardGrid extends StatelessWidget {
final Function(String) callback;
DashboardGrid({this.callback});
....
然后在列中使用函数实例化它
[
...,
DashboardGrid(callback:(String value)=>print(value));
]
当您想在DashboardGrid
内部传递数据时,只需调用函数
void passTheData(String data) => callback(data);
示例与String
一起使用,但是您可以传递任何数据。
答案 1 :(得分:0)
如果您的子小部件位于同一小部件树下,则可以利用4
来填充数据。
首先,根据需要创建通知。您可以创建一个通知,也可以创建包含多个具体通知的摘要Notification
。对于此示例,我假设您要处理其他通知。
Notification
然后,您可以在父窗口小部件中处理该类型的所有通知:
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(),
);
}
}
要从子窗口小部件发出通知,只需调用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(),
);
}
,其中T().dispatch(context)
是您的T
类型。例如,Notification
。就是这样。
答案 2 :(得分:0)
要解决此问题,有两种方法。第一种方法是创建GlobalKey(https://docs.flutter.io/flutter/widgets/GlobalKey-class.html)并将其作为参数传递给子窗口小部件。第二种方法是为父状态创建一个全局变量,并在子状态中使用它。