【发布时间】:2019-06-14 13:03:43
【问题描述】:
我想知道如何保存我在多个屏幕中使用的数据。我们应该在 Flutter 中使用 Singleton 设计模式吗?
假设我使用 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;
}
}
区号:
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();
}
}
1.我应该做单例课程吗? AccountManager,我将在哪里存储用户详细信息并在需要的地方获取详细信息?还是我应该使用下面的 Provider 在应用程序的任何地方获取电子邮件和密码?
2.是否建议在 Singleton 类中保存数据?
【问题讨论】:
-
你可以使用 shared_preferences 或 sqflite 包
-
我认为shared_preferences是存储用户偏好的。不建议在控制器之间传递数据。关于 sqflite,是的,这是一个选项,但是应用程序会持续请求不同的屏幕,然后应用程序需要获取用户(在这种情况下),在其他情况下,它可能是我希望共享的项目数组。我担心的是,在这种情况下,flutter 如何推荐数据处理。
标签: design-patterns login flutter bloc