Flutter-如何在整个应用程序生命周期内将数据保存在内存中?

Ank*_*ash 5 design-patterns login flutter bloc

我想知道,如何保存我在多个屏幕中使用的数据。我们应该在颤振中使用单例设计模式吗?

假设我使用 BLoC 模式制作登录模块,例如https://github.com/adamjohnlea/Flutter-Login-With-BLoC-Pattern。

现在,如果对于对服务器的每个请求,我都需要发送电子邮件和密码。

供应商代码:

import 'package:flutter/material.dart';
import 'bloc.dart';

class Provider extends InheritedWidget {

  final bloc = new Bloc();

  Provider({Key key, Widget child})
    : super(key: key, child: child);

  bool updateShouldNotify(_) => true;

  static Bloc of(BuildContext context) {
    return (context.inheritFromWidgetOfExactType(Provider) as Provider).bloc;
  }

}
Run Code Online (Sandbox Code Playgroud)

区块代码:

import 'validators.dart';
import 'package:rxdart/rxdart.dart';

class Bloc extends Object with Validators {
  final _email = BehaviorSubject<String>();
  final _password = BehaviorSubject<String>();

  // retrieve data from stream
  Stream<String> get email    => _email.stream.transform(validateEmail);
  Stream<String> get password => _password.stream.transform(validatePassword);
  Stream<bool>   get submitValid => Observable.combineLatest2(email, password, (e, p) => true);

  // add data to stream
  Function(String) get changeEmail    => _email.sink.add;
  Function(String) get changePassword => _password.sink.add;

  submit() {
    final validEmail    = _email.value;
    final validPassword = _password.value;

    print('$validEmail and $validPassword');
  }

  dispose() {
    _email.close();
    _password.close();
  }
}
Run Code Online (Sandbox Code Playgroud)

1.我应该制作单身课程,例如。AccountManager,我将在哪里存储用户详细信息并在需要的地方获取详细信息?还是我应该使用下面的 Provider 来获取应用程序中任何地方的电子邮件和密码?

2. 是否建议在 Singleton 类中保存数据?

sat*_*ish 0

您可以使用shared_preferences、Wraps NSUserDefaults(在iOS上)和SharedPreferences(在Android上),为简单数据提供持久存储。数据异步保存到磁盘。这两个平台都不能保证写入在返回后将持久保存到磁盘,并且该插件不得用于存储关键数据。 共享首选项