0

我正在学习 Bloc,但在永久保存数据时遇到了一些麻烦。我有这个 TextFormField在此处输入图像描述

它带有来自 API 的名称,如果我更新此名称,它应该保存并在其他屏幕中显示更新名称,例如配置文件屏幕和编辑配置文件屏幕,如下图所示。 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述ugp5u.png

问题是,我可以保存和更新名称,但是当我重新启动应用程序时,它会回到 API 中以前的名称,我希望永久保存此更新。

我怎样才能做到这一点?这是我的州课

    class FormNameState extends Equatable {

  final String nameForm;

  //FormNameState({required this.nameForm, this.formSubmited});
  FormNameState({required this.nameForm});

  @override
  List<Object?> get props => [nameForm];


  Map<String, dynamic> toMap() {
    return {
      'nameForm': nameForm,
    };
  }


  factory FormNameState.fromMap(Map<String, dynamic> map) {
    return FormNameState(
      nameForm: map['nameForm'],
    );
  }

  String toJson() => json.encode(toMap());

  factory FormNameState.fromJson(String source) =>
      FormNameState.fromMap(json.decode(source));
}

事件类

abstract class FormNameEvent extends Equatable {
  @override
  List<Object> get props => [];
}

class UpdateName extends FormNameEvent {
  final String nameForm;

  UpdateName({required this.nameForm});
}

class FormNameWithTester extends FormNameEvent {}

集团类

class FormNameBloc extends HydratedBloc<FormNameEvent, FormNameState> {
  FormNameBloc(this.loginBloc) : super(FormNameState(nameForm: ''));
  final LoginBloc loginBloc;

  @override
  Stream<FormNameState> mapEventToState(FormNameEvent event) async* {
    print(event);
    if (event is UpdateName) {
      yield* _mapUpdateName(event);
    }
    /* if (event is FormNameWithTester) {
      yield* _mapUpda(event);
    } */
    //throw UnimplementedError('missingEvent');
  }

  Stream<FormNameState> _mapUpdateName(UpdateName event) async* {
    event.nameForm;
    loginBloc.add(FormEditionName(formName: event.nameForm));
    print('eventString');
    //yield state;
  }

  @override
  FormNameState fromJson(Map<String, dynamic> json) {
    return FormNameState.fromJson(json);
  }

  @override
  Map<String, dynamic> toJson(FormNameState state) {
    return state.toJson(state);
  }
}
4

1 回答 1

0

您需要使用 Shared Preference 来永久存储数据,在应用重新启动时,您可以从中取回数据。

于 2021-08-17T13:38:15.250 回答