Flutter flutter_bloc状态管理

这个博客展示了如何在Flutter应用中使用Bloc库进行状态管理。通过创建ValueModelBloc,定义不同的事件(Load、Success、Error)和状态,并在 BlocBuilder 中监听和响应状态变化,实现了数据加载、成功展示和错误处理的逻辑。BlocProvider和BlocListener用于在组件树中提供和监听Bloc状态。
摘要由CSDN通过智能技术生成

bloc

import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';

part 'value_model_event.dart';
part 'value_model_state.dart';

class ValueModelBloc extends Bloc<ValueModelEvent, ValueModelState> {
  //ValueModel vModel;
  ValueModelBloc():super(ValueModelState_Load());

  @override
  Stream<ValueModelState> mapEventToState(
    ValueModelEvent event,
  ) async* {
    // TODO: implement mapEventToState
    if(event is ValueModelEvent_Success){
      yield* ValueModelEvent_1ToState(event);
    }else if(event is ValueModelEvent_Error){
      ValueModelState_Error vms2=ValueModelState_Error('Error');
      yield vms2;
    }else if(event is ValueModelEvent_Load){
      yield ValueModelState_Load();
    }
  }
  Stream<ValueModelState> ValueModelEvent_1ToState(ValueModelEvent_Success event)async*{
    ValueModel valueModel=event.valueModel;
    valueModel.value1+='222222';
    valueModel.value2+='111111';
    ValueModelState_Success vms1=ValueModelState_Success(event.valueModel);
    yield vms1;
  }
}


event

part of 'value_model_bloc.dart';

abstract class ValueModelEvent extends Equatable {
  const ValueModelEvent();
}
class ValueModelEvent_Load extends ValueModelEvent{
  ValueModelEvent_Load();
  @override
  List<Object> get props=>[];
}
class ValueModelEvent_Success extends ValueModelEvent{
  final ValueModel valueModel;
  ValueModelEvent_Success(this.valueModel);
  @override
  List<Object> get props=>[valueModel];
}
class ValueModelEvent_Error extends ValueModelEvent{
  final String message;
  ValueModelEvent_Error(this.message);
  @override
  List<Object> get props=>[message];
}

state

part of 'value_model_bloc.dart';

abstract class ValueModelState extends Equatable {
  const ValueModelState();
}
class ValueModelState_Load extends ValueModelState{
  @override
  List<Object> get props=>[];
}
class ValueModelState_Success extends ValueModelState{
  final ValueModel valueModel;
  ValueModelState_Success(this.valueModel);
  @override
  List<Object> get props=>[valueModel];
}
class ValueModelState_Error extends ValueModelState{
  final String message;
  ValueModelState_Error(this.message);
  @override
  List<Object> get props=>[message];
}
class ValueModel {
  String value1;
  String value2;
  ValueModel(this.value1,this.value2);
}

widget

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:screenutil/flutter_bloc/value_model_bloc.dart';

class FlutterBlocDemo extends StatefulWidget{
  @override
  _FlutterBlocDemoState createState()=>_FlutterBlocDemoState();
}
class _FlutterBlocDemoState extends State<FlutterBlocDemo>{
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return BlocProvider<ValueModelBloc>(
      create: (context)=>ValueModelBloc(),
      child: Scaffold(
        appBar: AppBar(
          title: BlocListener<ValueModelBloc,ValueModelState>(
            listener: (context,value){
              if(value is ValueModelState_Success){
                print('bloclistener1111');
              }
            },
            child: Text('flutter_bloc样例'),
          ),
        ),
        body: Container(
          child: BlocBuilder<ValueModelBloc,ValueModelState>(
            builder:(context,value1){
              if(value1 is ValueModelState_Load){
                return Column(
                  children: [
                    Text('加载中...'),
                    TextButton(
                      onPressed: (){
                        BlocProvider.of<ValueModelBloc>(context).add(ValueModelEvent_Success(ValueModel('v1','v2')));
                      },
                      child: Text('success状态'),),
                  ],
                );
                return Text('加载中...');
              }
              else if(value1 is ValueModelState_Success){
                ValueModel vm=value1.valueModel;
                return Column(
                  children: [
                    Text(vm.value1),
                    Text(vm.value2),
                    TextButton(
                      onPressed: (){
                        BlocProvider.of<ValueModelBloc>(context).add(ValueModelEvent_Error('我错了'));
                      },
                      child: Text('error状态'),),
                  ],
                );
              }else if(value1 is ValueModelState_Error){
                return Column(
                  children: [
                    Text(value1.message),
                    TextButton(
                      onPressed: (){
                        BlocProvider.of<ValueModelBloc>(context).add(ValueModelEvent_Load());
                      },
                      child: Text('load状态'),
                    ),
                  ],
                );
              }
            },
          ),
        ),
      ),
    );
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值