![](/img/trans.png)
[英]How to get value from an object which in the state (flutter_bloc)
[英]How to reset to the initial state/value whenever I close my app using flutter_bloc
在使用flutter_bloc
时,我仍然是初学者。
我尝试过flutter_bloc
并且很好奇如何在关闭页面时将我的 bloc 类重置为其初始值。
my_bloc_class.dart
class sumtotal_detail_transactionsbloc extends Bloc<String, String>{
@override
String get initialState => '0';
@override
Stream<String> mapEventToState(String sumtotal_detail_transactions) async* {
yield sumtotal_detail_transactions.toString();
}
}
我的小部件带有BlocBuilder
。
BlocBuilder<sumtotal_detail_transactionsbloc, String>(
builder: (context,sumtotal_detail_transactions) => Text(
sumtotal_detail_transactions,style: TextStyle(
fontSize: 12,
color: Colors.brown[300]
),
)
),
每当我关闭页面或导航到页面时,如何始终/自动将sumtotal_detail_transactions
重置为其初始值?
如果值始终保持/存储原样,它将破坏我的应用程序。
嘿👋 我建议在页面中提供 bloc,以便在页面关闭时 bloc 由 BlocProvider 自动处理。 不需要重置事件,只需确保将 blocs 仅作用于需要它的小部件树部分。 希望有帮助!
正如插件作者在这里提到的,
我认为引入 reset() 不是一个好主意,因为它直接违背了 bloc 库范式:触发状态更改的唯一方法是调度事件。
话虽如此,您必须添加将用于触发初始化事件的事件/状态。
例如:
添加初始化事件。
some_page_bloc_events.dart
class InitializePageEvent extends SomePageEvent {
// You could also pass on some values here, if they come from the UI/page of your app
@override
String toString() => 'InitializePageEvent';
}
添加初始化状态。
some_page_bloc_states.dart
class InitializePageState extends SomePageState {
@override
String toString() => 'InitializePageState';
}
接下来,在您的 bloc 类中利用这些来过滤传入的事件并用适当的状态通知 UI。
some_page_bloc.dart
@override SomePageState get initialState => InitializePageState();
@override
Stream<SomePageState> mapEventToState(SomePageEvent event) async* {
try {
if(event is InitializePageEvent) {
// Do whatever you like here
yield InitializePageState();
}
} catch (e) {
...
}
}
最后,您可以在任何您认为必要的地方调用初始化事件。 在您的情况下,它应该在屏幕的initState()
方法上。
some_page.dart
@override
void initState() {
super.initState();
_someTransactionBloc.dispatch(InitializePageEvent());
}
Felix 为他的插件提供了一份写得很好的文档,我建议你复习一下 BLoC 工作原理的介绍性概念。 请在此处阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.