[英]How to change the state in a bloc?
我剛開始研究這個集團,我有一個問題。 我需要在選擇 state 時更改顏色,根據我的邏輯,我必須執行state = Colors.red
,但不幸的是事實並非如此。 你能告訴我我應該怎么做才能改變狀態嗎?
這是我的集團-
class SumBloc extends Bloc<Color, SumState> {
SumBloc() : super(SumNotChosen()) {
on<Color>((event, emit) {
final state = this.state;
if(state is SumSelected) {
emit(state.color) // ??????
}
});
}
}
這是我的州 -
abstract class SumState {}
class SumNotChosen extends SumState{}
class SumSelected extends SumState{
final Color color;
SumSelected({required this.color});
}
您可以使用更簡單的腕尺來實現此功能。
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
class SumCubit extends Cubit<Color> {
SumCubit() : super(Colors.red);
void select() => emit(Colors.green);
void chooseColor(Color color) => emit(color);
}
class DemoWidget extends StatelessWidget {
const DemoWidget({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: BlocProvider(
create: (context) => SumCubit(),
child: Center(
child: BlocBuilder<SumCubit, Color>(
builder: (context, state) {
return ListTile(
title: const Text('hello'),
tileColor: state,
onTap: () => context.read<SumCubit>().select(),
onLongPress: () =>
context.read<SumCubit>().chooseColor(Colors.black),
);
},
),
),
),
);
}
}
使用 bloc 時,您應該監聽事件並相應地更改狀態。
sum_state.dart
part of 'sum_bloc.dart';
abstract class SumState {
final Color? color;
const SumState({this.color});
}
class SumInitial extends SumState {}
class SumSelected extends SumState {
const SumSelected({required super.color});
}
sum_event.dart
part of 'sum_bloc.dart';
abstract class SumEvent {}
class ColorSelected extends SumEvent {
final Color color;
ColorSelected({required this.color});
}
sum_bloc.dart
import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
part 'sum_event.dart';
part 'sum_state.dart';
class SumBloc extends Bloc<SumEvent, SumState> {
SumBloc() : super(SumInitial()) {
on<ColorSelected>((event, emit) {
emit(SumSelected(color: event.color));
});
}
}
在這里你聽SumSelected
事件並發出新的 state
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.