美文网首页Flutter
Flutter 使用 Bloc

Flutter 使用 Bloc

作者: 李小轰 | 来源:发表于2021-06-01 15:24 被阅读0次

初学flutter,我们知道flutter有state状态的概念。当数据有变动时,通过调用setState方法进行状态变更,UI重新绘制。

今天,我们来说说flutter里用于管理状态的利器Bloc。Bloc的核心思想是对Stream流的使用,整体使用MVVM的交互模式。

安装
dependencies:
  flutter_bloc: ^7.0.0
  //^6.0.1非空安全
使用方式
  1. 新建 test_bloc.dart 文件,定义bloc类,state类,event类:
  • bloc提供给widget用于监听内容(state)变动,widget也通过bloc发送事件(event),更新内容(state)
import 'package:flutter_bloc/flutter_bloc.dart';

class TestBloc extends Bloc<TestEvent, TestState> {

  TestState _curretnState;
  TestBloc(TestState initialState) : super(initialState){
    _curretnState = initialState;
  }

  @override
  Stream<TestState> mapEventToState(TestEvent event) async* {
    if(event is InCreaseEvent){
      ///对当前状态count属性进行+1操作
      _curretnState.count++;
      ///yield 往流注入更新内容
      yield _curretnState.copy();
    }
  }
}

///bloc状态
class TestState {
  int count;
  TestState(this.count);

  TestState copy() {
    return TestState(this.count);
  }
}

///bloc事件,抽象,用于扩展
abstract class TestEvent {}
///具体事件,加法
class InCreaseEvent extends TestEvent{}
  1. widget中这样监听bloc的状态变更,以及发送事件修改状态
class _TestBlocPageState extends State<TestBlocPage> {
  TestBloc _bloc;

  @override
  void initState() {
    _bloc = TestBloc(TestState(1));
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<TestBloc, TestState>(
      cubit: _bloc,
      builder: (context, state) {
        return Container(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              FlatButton(
                  onPressed: () {
                    ///发送加法事件
                    _bloc.add(InCreaseEvent());
                  },
                  child: Text('加1操作')),
              Text('${state.count}')
            ],
          ),
        );
      },
    );
  }
}

相关文章

网友评论

    本文标题:Flutter 使用 Bloc

    本文链接:https://www.haomeiwen.com/subject/yfbwsltx.html