class TableUIBloc extends Bloc<TableUIEvent, TableUIState> {
TableUIBloc() : super(TableUIInitial()) {
on<TableUIEvent>((event, emit) {
switch (event.runtimeType) {
case UpdateShowedColumns:
// The columns the user is trying to show
final showedColumns = (event as UpdateShowedColumns).showedColumns;
// updating the showed columns
emit(
TableUIUpdated(
showedColumns: showedColumns
),
);
break;
}
});
}
}
@immutable
abstract class TableUIEvent {}
/// Updates the list of showed columns on the table
class UpdateShowedColumns extends TableUIEvent {
final List<TableColumn> showedColumns;
UpdateShowedColumns({
required this.showedColumns,
});
}
@immutable
abstract class TableUIState {
final List<TableColumn> showedColumns;
const TableUIState({
required this.showedColumns,
});
}
class TableUIInitial extends TableUIState {
TableUIInitial()
: super(
showedColumns: [
TableColumn.stone,
TableColumn.rating,
TableColumn.team,
]
);
}
您可以创建一个扩展并添加"清理"块数据的功能,发出块的初始状态:
/// An extension to reset a bloc to its default state.
extension BlocReset on Bloc {
void reset(dynamic initialState) {
// ignore: invalid_use_of_visible_for_testing_member
emit(initialState);
}
}
2条答案
按热度按时间brccelvz1#
Bloc正在使用流,除非你发出新事件,否则状态不会更改。如果你想在导航到其他路线后“清除”Bloc,你可以发出一个事件,该事件在@override initS中生成Bloc的initialState
7ivaypg92#
如果其他人试图清除区块数据(例如,在注销后),扩展可能是一个很好的方法。例如,如果您有一个类似下一个的区块:
您可以创建一个扩展并添加"清理"块数据的功能,发出块的初始状态:
因此,当你想清理一个已确定的块的状态时,你只需要导入扩展并在代码的某个地方调用'reset'方法,并提供初始状态数据类型:
当你有很多块,并且你想把它们都清理掉,而不需要创建一个新的事件来把每个块的状态恢复到初始值时,这是很有用的。下面是我如何清理我正在开发的系统上所有块的数据的一个例子。