Flutter NotificationListener Widget使用详解

NotificationListener Widget是Flutter中一个非常实用的Widget,它可以监听其子Widget在布局和渲染过程中发出的通知,并进行一些响应操作。

在Flutter中,通知是由Notification类和其子类实现的,可以通过调用dispatch方法来发送通知,可以通过调用dispatch方法并传递一个Notification对象来发送一个通知,例如:

Notification('my_notification').dispatch(context);

下面是一个使用NotificationListener Widget的示例:

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('My App'),
      ),
      body: NotificationListener(
        onNotification: (notification) {
          if (notification is ScrollUpdateNotification) {
            setState(() {
              _counter++;
            });
          }
          return true;
        },
        child: ListView.builder(
          itemBuilder: (BuildContext context, int index) {
            return ListTile(
              title: Text('Item $index'),
            );
          },
          itemCount: 20,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        child: Text('$_counter'),
      ),
    );
  }
}

在这个示例中,我们创建了一个NotificationListener Widget,并设置了onNotification属性。onNotification属性是一个回调函数,它会在子Widget发送通知时被调用,并接收一个Notification对象作为参数,开发者可以在该回调函数中对不同的通知类型进行响应操作。在这个示例中,我们使用了ScrollUpdateNotification类型的通知,当列表滚动时,我们会更新一个计数器,并将其显示在浮动按钮上。

需要注意的是,NotificationListener Widget并不会消耗通知,它仅仅是监听通知,并在必要时对通知进行响应操作。如果希望某个Widget消耗通知,可以使用Notification类及其子类中的handled属性来控制。当handled属性为true时,表示通知已被消耗,不再向上层传递;当handled属性为false时,表示通知仍然需要继续向上层传递,直到被某个Widget消耗或到达根节点为止。

powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:36:59

results matching ""

    No results matching ""