我想在StatefulWidget中使用flutter通知与另一个StatefulWidget小部件通信。我在下面发布了一个我认为应该正常工作的示例,但事实并非如此。当您单击“ +”图标按钮时,它应将通知发送到subPage小部件。当前,当您单击按钮时,似乎什么都没有发生。我希望可以执行onTitlePush()函数。这是我第一次尝试使用“通知”,而且我必须设置不正确。我在更大的应用程序中使用了此代码,但是下面的代码只是实现的示例。你能告诉我我哪里出问题了吗?
import 'package:flutter/material.dart';
void main() => runApp(TestApp());
class TestApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Notificaton Test',
home: MainPage(),
);
}
}
class MyNotification extends Notification {
final String title;
const MyNotification({this.title});
}
class MainPage extends StatefulWidget {
@override
MainPageState createState() {
return new MainPageState();
}
}
class MainPageState extends State<MainPage> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Basic AppBar'),
actions: <Widget>[
// action button
IconButton(
icon: new Icon(Icons.add),
onPressed: () {
MyNotification(title: "Updated Text!")..dispatch(context);
},
),
// action button
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: new SubPage(),
),
),
);
}
}
class SubPage extends StatefulWidget {
@override
SubPageState createState() {
return new SubPageState();
}
}
class SubPageState extends State<SubPage> {
String _text = "Click the Plus Icon";
@override
Widget build(BuildContext context) {
return NotificationListener<MyNotification>(
onNotification: onTitlePush,
child: new Center(
child: new Text(_text, style: new TextStyle(fontSize: 40.0))
),
);
}
bool onTitlePush(MyNotification notification) {
print("New item ${notification.title}");
setState(() { _text = notification.title; });
return true;
}
}
答案 0 :(得分:7)
通知与BuildContext相反。 有了通知,孩子们就可以将价值传递给父母。
通知不是全局。不是调度程序的父级的小部件不能收听所述通知。
因此,实际上,您试图实现的目标 不能通过通知来完成。
有几种选择: