Flutter-使用通知向其他小部件发送消息

时间:2018-10-04 16:59:49

标签: dart flutter

我想在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;
  }
}

1 个答案:

答案 0 :(得分:7)

通知与BuildContext相反。 有了通知,孩子们就可以将价值传递给父母。

通知不是全局。不是调度程序的父级的小部件不能收听所述通知。

因此,实际上,您试图实现的目标 不能通过通知来完成。

有几种选择: