Flutter笔记--EventBus

   这一节主要介绍Flutter中全局事件广播EventBus的用法,相比通知组件,全局事件广播的作用域更大一些,比如在更换界面主题,切换语言等全局性的操作时,体现较为明显。

栗子:

pubspec.yaml
event_bus: ^1.1.0

import 'dart:math';

import 'package:event_bus/event_bus.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

EventBus eventBus;
var themeColor;
final List<Color> themeColorList = [
  Colors.red, Colors.orange,Colors.yellow,Colors.green,
  Colors.cyan,Colors.blue,Colors.purple];


class EventbusPage extends StatefulWidget {
  EventbusPage({Key key}) : super(key: key);
  _EventbusPageState createState() => _EventbusPageState();
}

class _EventbusPageState extends State<EventbusPage> {

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    eventBus =EventBus();
    themeColor = themeColorList[0];
    eventBus.on<ChangeThemeEvent>()
    .listen((ChangeThemeEvent onData) => setState((){
      themeColor = themeColorList[onData.themeIndex];
    }));
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "全局事件总线",
      theme: ThemeData(
        primarySwatch: themeColor,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text("全局事件总线"),
        ),
        body: RaisedButton(
          onPressed: () => {
            eventBus.fire(ChangeThemeEvent(Random().nextInt(7))),
          },
          child: Text("点击更换主题色"),
        ),
      ),
    );
  }

}

class ChangeThemeEvent {
  var themeIndex;
  ChangeThemeEvent(this.themeIndex);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值