美文网首页
Flutter状态管理(二)BLoC

Flutter状态管理(二)BLoC

作者: 天色将变 | 来源:发表于2020-09-07 18:59 被阅读0次

    严格来说,BLoC(Business Logic Component)不是一个技术知识点,而是一种业务与界面分离的思想,类似于MVC MVP等。

    实现思想
    • 定义一个BloC类,内部定义业务数据,使用StreamController,对外暴露stream和sink。
    • 利用StreamBuilder包裹真正使用数据的widget,builder会持续返回更新数据。
    简单示例
    import 'dart:async';
    
    import 'package:flutter/material.dart';
    
    class BlocTest extends StatefulWidget {
      @override
      _BlocTestState createState() => _BlocTestState();
    }
    
    class _BlocTestState extends State<BlocTest> {
      PageTestBloc ptb = PageTestBloc();
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("BLoC"),
            centerTitle: true,
          ),
          body: Center(
            child: StreamBuilder(
              stream: ptb.stream,
              builder: (context,AsyncSnapshot<int> snapshot){
                return Text(snapshot.data.toString());
              },
            ),
          ),
          floatingActionButton: FloatingActionButton(
            child: Icon(Icons.add),
            onPressed: (){
              ptb.add();
            },
          ),
        );
      }
    }
    
    class PageTestBloc {
      int _count = 0;
      StreamController<int> _controller = StreamController<int>();
      StreamSink<int> get _sink => _controller.sink;
      Stream<int> get stream => _controller.stream;
    
      void dispose(){
        _controller.close();
      }
      void add(){
        _count++;
        _sink.add(_count);
      }
    }
    

    相关文章

      网友评论

          本文标题:Flutter状态管理(二)BLoC

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