как сохранить будущие данные при загрузке приложения для дальнейшего использования? # Flutter

#android #database #android-studio #flutter #flutter-layout

#Android #База данных #android-studio #flutter #flutter-макет

Вопрос:

Я новичок в flutter.Я пытаюсь создать приложение для себя, которое может выполнить некоторые вычисления для меня.

  1. Ситуация: когда я запускаю приложение, оно запускается с экрана загрузки. При загрузке выполните вызов API, чтобы получить некоторые данные, которые мне понадобятся в будущем. И отправьте его на страницы, где мне это нужно. Это работает нормально.
  2. Проблема: у меня несколько страниц в приложении. Когда я возвращаюсь с любой другой страницы на главную страницу, данные исчезают. Поэтому мне нужно сделать еще один вызов API, чтобы вернуть данные. И я не хочу, чтобы это произошло
  3. Что я хочу: я хочу, чтобы при получении данных они хранились где-то локально, чтобы я мог использовать их везде, где захочу, без выполнения другого вызова API или без подключения к Интернету.

Посмотрите демонстрационное видео здесь, чтобы лучше понять

Что я делаю:

Экран загрузки:

 class Loading extends StatefulWidget {
@override
_LoadingState createState() => _LoadingState();
}

class _LoadingState extends State<Loading> {
 void setupPair() async 
{
    CurrInfo instance =
    CurrInfo(url: 'EUR/USD', flagA: 'eur.png', flagB: 'usd.png');

    await instance.getInfo();

   if (instance.price != "not connected") 
   {
     Navigator.pushReplacementNamed(context, '/home', arguments: {
        'url': instance.url,
        'flagA': instance.flagA,
        'flagB': instance.flagB,
        'price': instance.price,
     });  
  }                       // I don't want to send this instance, instead I want to store the Received 
                             data locally and access that data from anywhere inside the app
 
 Video else if (instance.price == "not connected") {
      Navigator.pushReplacementNamed(context, '/not connected');
    }
}
 

Получение данных путем вызова api:

 class CurrInfo {
String url;
String flagA;
String flagB;
String price;
String furl;
Map data;
List info;

 CurrInfo({this.url, this.flagA, this.flagB});

 Future<void> getInfo() async {
  try {
  print((url));
  furl =
      "https://fcsapi.com/api-v2/forex/latest? 
       symbol=$urlamp;access_key=t58zo1uMFJZlNJxSrSmZv2qIUlSkCk9RAfCLkwnMwt1q1FFS";
 
    Response response = await http
      .get(Uri.encodeFull(furl), headers: {"Accept": "application/json"});

    data = jsonDecode(response.body);
    print(data);

    info = data['response'];
    print(info);

    price = info[0]['price'];  // I want to save this price data locally while loading so that I 
                                 don't have to make another API call to get it back and it should be 
                                 updated when I refresh the page

    print("string price : $price");
    } catch (e) {
    price = "not connected";
    print('error is : $e amp;  $price');
  
    }}}
 

Как я использую эти данные там, где мне нужно :

 Map data = {};
String ofData;



 Expanded(flex: 1,
      child: Text( ${data['url']}',
      style: TextStyle(
      fontSize: 25,
      fontWeight: FontWeight.bold),
      textAlign: TextAlign.start,
      ),
     ),
    
     Expanded( flex: 1,
       child: Text('${data['price']}',
       style: TextStyle(fontSize: 18),
       textAlign: TextAlign.end,
      ),
    ),
 

Ознакомьтесь с полным кодом здесь, чтобы лучше понять

Комментарии:

1. вы можете использовать SQLite или Floor для сохранения ваших данных в локальном хранилище. вы можете найти больше на этаже здесь: — pub.dev/packages/floor

2. Вы пробовали искать в Google информацию о том, как хранить данные локально? Существует множество статей и руководств

3. Я подумал, что может быть более простой способ добиться этого. спасибо за предложение.

4. Что может быть проще, чем самостоятельно искать свою проблему в Google? Пожалуйста, попробуйте найти решения самостоятельно, и если вы застряли где-нибудь с реализациями, тогда задавайте свои вопросы, и обязательно кто-нибудь вам поможет. Спасибо.

Ответ №1:

вы можете использовать этот пакет shared_preferences: ^ 0.5.12 2 для локального хранения данных на телефоне

Комментарии:

1. pub.dev/packages/shared_preferences ссылка на пакет