import 'dart:convert'; import 'dart:math'; import 'package:gymlink_module_web/interfaces/items.dart'; import 'package:shared_preferences/shared_preferences.dart'; Future> getHistory() async { final prefs = await SharedPreferences.getInstance(); String historyString = prefs.getString('history') ?? "[]"; List history = []; for (var historyItem in jsonDecode(historyString) as List) { history.add(GymHistoryItem.fromJson(historyItem)); } history.sort((a, b) => b.timestamp.compareTo(a.timestamp)); return history; } Future addToHistory(GymHistoryItemDetail item) async { final prefs = await SharedPreferences.getInstance(); String historyString = prefs.getString('history') ?? "[]"; List history = []; for (var historyItem in jsonDecode(historyString) as List) { history.add(GymHistoryItem.fromJson(historyItem)); } item.id = Random().nextInt(100000).toString(); String detailHistoryString = prefs.getString('detail_history') ?? "[]"; List detailHistory = []; for (var historyItem in jsonDecode(detailHistoryString) as List) { detailHistory.add(GymHistoryItemDetail.fromJson(historyItem)); } List> providers = []; for (final provider in item.providers) { providers.add(provider.toJson()); } var json = { "id": item.id, "date": DateTime.now() .toLocal() .toString() .split(' ')[0] .replaceAll('-', '.') .split('.') .reversed .join('.'), "sum": item.sum, "pay_url": item.providers.where((e) => e.status == 'Не оплачен').isNotEmpty ? 'https://example.org' : null, "receiver": item.receiver, "email": item.email, "address": item.address, "providers": providers, "timestamp": DateTime.now().millisecondsSinceEpoch.toString(), }; final detailHistoryItem = GymHistoryItemDetail.fromJson(json); detailHistory.add(detailHistoryItem); history.add(GymHistoryItem( date: detailHistoryItem.date, id: detailHistoryItem.id, photo: detailHistoryItem.providers[0].items[0].photo, sum: detailHistoryItem.sum, timestamp: detailHistoryItem.timestamp, )); prefs.setString('history', jsonEncode(history)); prefs.setString('detail_history', jsonEncode(detailHistory)); } Future getHistoryDetail(String id) async { final prefs = await SharedPreferences.getInstance(); String historyString = prefs.getString('detail_history') ?? "[]"; for (var historyItem in jsonDecode(historyString) as List) { if (GymHistoryItemDetail.fromJson(historyItem).id == id) { return GymHistoryItemDetail.fromJson(historyItem); } } return null; } Future payOrder(String id) async { final prefs = await SharedPreferences.getInstance(); String historyString = prefs.getString('detail_history') ?? "[]"; List history = []; for (var historyItem in jsonDecode(historyString) as List) { history.add(GymHistoryItemDetail.fromJson(historyItem)); } List newHistory = []; for (final historyItem in history) { if (historyItem.id == id) { for (final provider in historyItem.providers) { if (provider.status == 'Не оплачен') { provider.status = 'Оплачен'; } } historyItem.payUrl = null; } newHistory.add(historyItem); } prefs.setString('detail_history', jsonEncode(newHistory)); }