Flutter как сохранить значение и использовать его на других страницах?

#flutter #dart

#flutter #dart

Вопрос:

Мне нужно сохранить значение в переменной или какой-либо службе, чтобы я мог использовать значение на нескольких страницах. Локальное хранилище — не очень хорошая идея, поэтому мне нужно сохранить его у какого-нибудь поставщика услуг или чего-то подобного, может кто-нибудь, пожалуйста, помочь, как я могу создать сервис, сохранить значение и перенести его на другие страницы.

Это мой код

   Future<http.Response> _trySubmit() async {
    final isValid = _formKey.currentState.validate();
    FocusScope.of(context).unfocus();

    if (isValid) {
      _formKey.currentState.save();

      print(_userEmail.trim());
      print(_userPassword.trim());

      var map = new Map<String, dynamic>();


      map['grant_type'] = 'password';
      map['username'] = _userEmail.trim();
      map['password'] = _userPassword.trim();


      http.Response res = await http.post(
        'http://sublimeapi.netcodesolution.com/token',
        headers: <String, String>{
          'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: map,
      );
      var data = res.body;
      print(data);
    }
  }
  

Значение для печати выглядит примерно так

 I/flutter ( 5147):{"access_token":"FwYttAQIDDSRpuFFUgzznmMYgMNNfiW4OvQ4","token_type":"bearer","expires_in":86399}
  

Мне нужно сохранить access_token в некотором провайдере или переменной, чтобы использовать его на нескольких страницах Спасибо

Ответ №1:

Если у вас ограниченное количество значений для сохранения, вы можете использовать общие настройки. https://pub.dev/packages/shared_preferences

Однако я бы не рекомендовал вам использовать, если количество используемых вами данных продолжает увеличиваться.

Ответ №2:

Вы могли бы использовать синглтон.

 class Singleton {
  String _myVariable;
  Singleton._privateConstructor();

  static final Singleton _instance = Singleton._privateConstructor();

  factory Singleton() {
    return _instance;
  }
  
  set myVariable(value) => _myVariable = value;
  get myVariable => _myVariable; 
}
  

Создайте экземпляр Singleton в начале приложения, в методе main().

Информация о синглтоне будет доступна только при запуске приложения, поэтому вам следует найти способ сохранения данных (localStorage или с сервера), а затем инициализировать синглтон этими данными при каждом сеансе.

Я рекомендую вам взглянуть на get_it или решение для управления состоянием.

Ответ №3:

Поскольку ваш проект становится большим, вам нужно больше переменных и функций во всем вашем приложении, я бы рекомендовал Provider https://pub.dev/packages/provider как управление состоянием вашего приложения. просто добавьте это в pubspec.yaml:

 dependencies:
  provider: ^4.3.2
  

и запустите

 $ flutter pub get
  

и импортировать

 import 'package:provider/provider.dart';