как сохранить ответы API? Я сделал это как кодирование ниже. Первоначально я заставил это работать, но теперь я не могу. есть ли проблема с моим кодированием. может кто-нибудь может помочь мне
login blo c: здесь я беру ответы API и сохраняю их в SharedPreferences
class LoginBloc extends Object with Validators{
final _repository = EresidenceRepository();
final _userid = BehaviorSubject<String>();
final _password = BehaviorSubject<String>();
final _imei = BehaviorSubject<String>();
final _coordinate = BehaviorSubject<String>();
final BehaviorSubject<ApiResponse<login_responses>> _subject = BehaviorSubject<ApiResponse<login_responses>>();
Function(String) get userid => _userid.sink.add;
Function(String) get password => _password.sink.add;
Function(String) get imei => _imei.sink.add;
Function(String) get coordinate => _coordinate.sink.add;
Stream<String> get useridValidation => _userid.stream.transform(useridValidator);
Stream<String> get passwordValidation => _password.stream.transform(passwordValidator);
Stream<bool> get submitCheck => Rx.combineLatest2(useridValidation, passwordValidation, (e,p) => true);
login() async {
_subject.sink.add(ApiResponse.loading("Logging In..."));
try {
login_responses response = await _repository.login(
_userid.value, _password.value, _imei.value, _coordinate.value);
// Save responses
prefsBloc.changePrefsLogin(
PrefsState(false, response.data.userid, response.data.password, _imei.value, _coordinate.value, "")
);
_subject.sink.add(ApiResponse.completed(response));
print(response);
} catch (e) {
_subject.sink.add(ApiResponse.error(e.toString()));
print(e);
}
}
dispose(){
_userid.close();
_password.close();
_imei.close();
_coordinate.close();
_subject.close();
}
BehaviorSubject<ApiResponse<login_responses>> get subject => _subject;
}
SharedPreferences Blo c:
This blo c функции для хранения и поиска данных.
class PrefsState {
final bool checklogin;
final String userid;
final String password;
final String imei;
final String coordinate;
final String bit61;
PrefsState(this.checklogin, this.userid, this.password, this.imei, this.coordinate, this.bit61);
}
class PrefsBloc {
final _changePrefernce = BehaviorSubject<PrefsState>();
Function(PrefsState) get changePrefsLogin => _changePrefernce.sink.add;
Stream<PrefsState> get prefrenceLogin => _changePrefernce.stream;
SharedPreferences sPrefs;
dispose(){
_changePrefernce?.close();
}
PrefsBloc(){
_loadLoginPref();
_changePrefernce.stream.listen(_saveLoginPref);
}
Future<void> _loadLoginPref() async {
sPrefs = await SharedPreferences.getInstance();
final checkPref = sPrefs.getBool("checkLogin") ?? false;
final useridPref = sPrefs.getString("userid") ?? "";
final passwordPref = sPrefs.getString("password") ?? "";
final imeiPref = sPrefs.getString("imei") ?? "";
final coordinatePref = sPrefs.getString("coordinate") ?? "";
final bit61 = sPrefs.getString("bit61") ?? "";
_changePrefernce.add(PrefsState(checkPref, useridPref, passwordPref, imeiPref, coordinatePref, bit61));
}
void _saveLoginPref(PrefsState stats){
if (stats != null) {
if (sPrefs != null) {
sPrefs.setBool("checkLogin", stats.checklogin);
sPrefs.setString("userid", stats.userid);
sPrefs.setString("password", stats.password);
sPrefs.setString("imei", stats.imei);
sPrefs.setString("coordinate", stats.coordinate);
sPrefs.setString("bit61", stats.bit61);
sPrefs.commit();
}
}
}
Future<void> removeLoginPref(BuildContext context) async{
sPrefs = await SharedPreferences.getInstance();
if(sPrefs != null) {
await sPrefs.clear();
AppRoutes.pushAndRemoveUntil(context, LoginPage());
}
}
Future<void> checkLoginPref(BuildContext context) async{
sPrefs = await SharedPreferences.getInstance();
if(sPrefs.getBool("checkLogin") == true){
AppRoutes.pushAndRemoveUntil(context, MainApp());
}
}
}
final prefsBloc = PrefsBloc();