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状态'),
),
],
);
}
},
),
),
),
);
}
}