繁体   English   中英

每当我使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM