#android #database #android-studio #flutter #flutter-layout
#Android #База данных #android-studio #flutter #flutter-макет
Вопрос:
Я новичок в flutter.Я пытаюсь создать приложение для себя, которое может выполнить некоторые вычисления для меня.
- Ситуация: когда я запускаю приложение, оно запускается с экрана загрузки. При загрузке выполните вызов API, чтобы получить некоторые данные, которые мне понадобятся в будущем. И отправьте его на страницы, где мне это нужно. Это работает нормально.
- Проблема: у меня несколько страниц в приложении. Когда я возвращаюсь с любой другой страницы на главную страницу, данные исчезают. Поэтому мне нужно сделать еще один вызов API, чтобы вернуть данные. И я не хочу, чтобы это произошло
- Что я хочу: я хочу, чтобы при получении данных они хранились где-то локально, чтобы я мог использовать их везде, где захочу, без выполнения другого вызова 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 ссылка на пакет