码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Flutter Event 派发


    在 其他前端开发中,为了解耦 会使用事件中心,进行事件的派发; Flutter中 也可以这么操作;

    但是呢 插件市场有个叫  event_bus 的;感觉不怎么好用!

    所在照着以前的思路;搬了一个!

    参考:https://www.jianshu.com/p/d036ed61f1c8 ;但是估计是个老版本的;

    这边优化了一下 如下:

    1. typedef void EventCallback(arg);
    2. class AppEvent {
    3. static final AppEvent _instance = AppEvent._internal();
    4. AppEvent._internal();
    5. factory AppEvent() {
    6. return _instance;
    7. }
    8. //保存事件订阅者队列,key:事件名(id),value: 对应事件的订阅者队列
    9. final _eMap = <dynamic, List>{};
    10. //添加订阅者
    11. void on(eventName, EventCallback callBack) {
    12. if (eventName == null) return;
    13. if (!_eMap.containsKey(eventName)) {
    14. _eMap.addEntries({eventName: []}.entries);
    15. }
    16. _eMap[eventName]?.add(callBack);
    17. }
    18. //移除订阅者
    19. void off(eventName, {EventCallback? callBack}) {
    20. var list = _eMap[eventName];
    21. if (eventName == null || list == null) return;
    22. if (callBack == null) {
    23. // _eMap[eventName] = null;
    24. _eMap[eventName]?.clear();
    25. } else {
    26. list.remove(callBack);
    27. }
    28. }
    29. //触发事件,事件触发后该事件所有订阅者会被调用
    30. void emit(eventName, [arg]) {
    31. var list = _eMap[eventName];
    32. if (list == null) {
    33. print('**没有找打对应的订阅方法$eventName');
    34. return;
    35. }
    36. int len = list.length - 1;
    37. //反向遍历,防止订阅者在回调中移除自身带来的下标错位
    38. for (var i = len; i > -1; --i) {
    39. list[i](arg);
    40. }
    41. }
    42. }

    • 添加监听:
      1. AppEvent().on('pageReport-examine', (arg) {
      2. print('>>>>>收到消息$arg');
      3. setState(() {
      4. _examineListSelect.add(arg);
      5. });
      6. });

    • 取消监听:
      AppEvent().off('pageReport-examine');

    • 触发函数:
      1. AppEvent().emit(
      2. 'pageReport-examine',
      3. {
      4. 'id': '110',
      5. 'patrolRecordId': 'id',
      6. 'routeSubId': 'id',
      7. 'placeName': '测试节点',
      8. 'checkTime': '',
      9. 'isChecked': false,
      10. 'checkRecordInfo': {
      11. 'trouble': false,
      12. 'address': _locationResult?['address'],
      13. 'longitude': _locationResult?['latitude'],
      14. 'latitude': _locationResult?['longitude'],
      15. 'imgs': _selectPicture,
      16. 'voicePath': _selectAudio.isNotEmpty ? _selectAudio.first : '',
      17. 'bak': '',
      18. 'videoPath': _selectVideo.isNotEmpty ? _selectVideo.first : ''
      19. },
      20. },
      21. );

  • 相关阅读:
    无频闪护眼灯哪个好?五款无频闪护眼台灯推荐
    案例分享 | 企业数字化转型中如何进行有效数据治理
    RN0.70正式发布,快看看更新了什么内容吧
    使用@check方法获取id集合
    C理解(五):编译,链接库,宏,关键字,变量
    网页音频提取在线工具有哪些 网页音频提取在线工具下载
    快速构建基于Paddle Serving部署的Paddle Detection目标检测Docker镜像
    从瀑布模式到水母模式:ChatGPT如何赋能软件研发全流程
    【string题解 C++】翻转字符串II:区间部分翻转 | 验证回文串
    浅谈双指针技巧(二)---通过双指针判断链表成环问题
  • 原文地址:https://blog.csdn.net/nicepainkiller/article/details/125973947
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号