IT评测·应用市场-qidao123.com

标题: flutter中常见的跨组件通讯方式 [打印本页]

作者: 温锦文欧普厨电及净水器总代理    时间: 2024-9-21 19:49
标题: flutter中常见的跨组件通讯方式


在 Flutter 开辟中,变乱管理和组件间通信是非常告急的。EventBus 和 NotificationListener 是两种常用的模式,它们各自有不同的利用场景和优势劣势。本文将对这两者进行比力分析,并提供代码示例。
在 Flutter 开辟中,变乱管理和组件间通信是非常告急的。EventBus、NotificationListener 和观察者模式是常用的三种模式,它们各自有不同的利用场景和优势劣势。本文将对这三者进行比力分析,并提供代码示例。
一、EventBus

利用场景

优势


劣势



示例代码: 
创建一个变乱总线和变乱类:
  1. import 'package:event_bus/event_bus.dart';
  2. class EventBusSingleton {
  3.   static final EventBus _eventBus = EventBus();
  4.   static EventBus get instance => _eventBus;
  5. }
  6. class MyEvent {
  7.   final String message;
  8.   MyEvent(this.message);
  9. }
复制代码
 然后在必要发送变乱的地方发布变乱:
  1. // 发布事件
  2. EventBusSingleton.instance.fire(MyEvent("Hello from EventBus"));
复制代码


 在接受变乱的组件中,订阅变乱:
  1. import 'package:flutter/material.dart';
  2. class MyListenerWidget extends StatefulWidget {
  3.   @override
  4.   _MyListenerWidgetState createState() => _MyListenerWidgetState();
  5. }
  6. class _MyListenerWidgetState extends State<MyListenerWidget> {
  7.   String _message = '';
  8.   @override
  9.   void initState() {
  10.     super.initState();
  11.     EventBusSingleton.instance.on<MyEvent>().listen((event) {
  12.       setState(() {
  13.         _message = event.message;
  14.       });
  15.     });
  16.   }
  17.   @override
  18.   Widget build(BuildContext context) {
  19.     return Text(_message);
  20.   }
  21. }
复制代码
二、NotificationListener

利用场景

优势


劣势


示例代码

  1. import 'package:flutter/material.dart';
  2. class MyNotification extends Notification {
  3.   final String message;
  4.   MyNotification(this.message);
  5. }
  6. class NotificationSender extends StatelessWidget {
  7.   @override
  8.   Widget build(BuildContext context) {
  9.     return ElevatedButton(
  10.       onPressed: () {
  11.         MyNotification("Hello from Notification").dispatch(context);
  12.       },
  13.       child: Text("Send Notification"),
  14.     );
  15.   }
  16. }
  17. class NotificationReceiver extends StatelessWidget {
  18.   @override
  19.   Widget build(BuildContext context) {
  20.     return NotificationListener<MyNotification>(
  21.       onNotification: (notification) {
  22.         ScaffoldMessenger.of(context).showSnackBar(
  23.           SnackBar(content: Text(notification.message)),
  24.         );
  25.         return true; // 表示已处理
  26.       },
  27.       child: Column(
  28.         children: [
  29.           NotificationSender(),
  30.           // 其他组件
  31.         ],
  32.       ),
  33.     );
  34.   }
  35. }
复制代码
三、观察者模式

利用场景

优势


劣势


示例代码

  1. class Subject {
  2.   final List<Observer> _observers = [];
  3.   void attach(Observer observer) {
  4.     _observers.add(observer);
  5.   }
  6.   void detach(Observer observer) {
  7.     _observers.remove(observer);
  8.   }
  9.   void notify(String message) {
  10.     for (var observer in _observers) {
  11.       observer.update(message);
  12.     }
  13.   }
  14. }
  15. abstract class Observer {
  16.   void update(String message);
  17. }
  18. class ConcreteObserver implements Observer {
  19.   @override
  20.   void update(String message) {
  21.     print("Received message: $message");
  22.   }
  23. }
  24. // 使用示例
  25. void main() {
  26.   final subject = Subject();
  27.   final observer1 = ConcreteObserver();
  28.   final observer2 = ConcreteObserver();
  29.   subject.attach(observer1);
  30.   subject.attach(observer2);
  31.   subject.notify("Hello from Observer!");
  32. }
复制代码


四、总结

在选择 EventBus、NotificationListener 和观察者模式时,必要根据具体场景来决定:

相识它们的利用场景及优劣势,可以帮助开辟者更好地管理 Flutter 应用中的变乱和状态,从而提拔应用的可维护性和性能。在开辟过程中,根据不同的需求选择符合的模式,会使代码更清楚、更易于管理。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4