簡體   English   中英

使用 Hydrated Bloc 版本 5 及更高版本的持久狀態

[英]Persisting State using Hydrated Bloc version 5 and above

我正在嘗試使用 Hydrated Bloc 在我的應用程序中保留狀態。 我發現的教程都使用以前版本的BlocSupervisor並使用BlocSupervisor ,它在 v.5 ( https://pub.dev/packages/bloc/changelog ) 的bloc包的 Dart 版本中被刪除。 flutter_blochydrated_bloc刪除它,當他們更新到bloc V.5( https://pub.dev/packages/flutter_bloc/changeloghttps://pub.dev/packages/hydrated_bloc/changelog )。 文檔說它應該替換為BlocObserver hydrated_blocflutter_bloc沒有列出的替代品。 到目前為止,我還沒有找到一個HydratedBloc教程,比其他用途的任何BlocSupervisorBlocDelegate ; 只有flutter_bloc教程。

如何創建與BlocObserver等效的BlocObserver以保持狀態?

由於您沒有提供任何代碼,因此這里有一個保存基本String的示例。

State

abstract class TestState extends Equatable {
  final String testString;

  const TestState(this.testString);

  @override
  List<Object> get props => [testString];
}

class State1 extends TestState {
  State1({required String testString}) : super(testString);
}

Events

abstract class TestEvent {}

class ChangeStringToSaved extends TestEvent {}

class UpdateSaved extends TestEvent {}

HydradedBloc

class TestBloc extends HydratedBloc<TestEvent, TestState> {
  TestBloc() : super(State1(testString: 'not saved')) {
    on<ChangeStringToSaved>(
        (event, emit) => emit(State1(testString: 'this is saved')));
    on<UpdateSaved>(
        (event, emit) => emit(State1(testString: 'updated saved value')));
  }
// Creating State1 from stored Map
  @override
  TestState? fromJson(Map<String, dynamic> json) {
    return State1(testString: json['value'] as String);
  }
// Saving to a basic Map
  @override
  Map<String, dynamic>? toJson(TestState state) {
    return {'value': state.testString};
  }
}

基本用戶界面

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: [
            BlocConsumer<TestBloc, TestState>(
                listener: (context, state) {},
                builder: (context, state) {
                  return Text(state.testString);
                }),
            ElevatedButton(
              onPressed: () =>
                  context.read<TestBloc>().add(ChangeStringToSaved()),
              child: Text('Change to Saved'),
            ),
            ElevatedButton(
              onPressed: () => context.read<TestBloc>().add(UpdateSaved()),
              child: Text('Update Saved'),
            ),
          ],
        ),
      ),
    );
  }
}

每當我更新testString ,它都會在重新啟動后自動testString

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM