import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:twong/api/index.dart'; import 'package:twong/providers/user_model.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:twong/models/index.dart'; import 'package:twong/utils/index.dart'; class Account { String account; String password; Token token; String toString() { return '{"account": "$account", "password": "$password", "token": ${json.encode(token.toJson())}}'; } static Account fromString(String str) { Account account = Account(); try { var map = json.decode(str); account.account = map["account"]; account.password = map["password"]; account.token = Token.fromJson(map["token"]); } catch (err) { Log.e(err); } return account; } } class SaveKey { static const String first = 'first'; static const String account = 'account'; static const String home = 'home'; static const String balance = 'balance'; } class Cache { static UserInfo _user; static Account _account; static bool checked = false; static SharedPreferences _pre; static Map _cacheData; static GlobalKey _navigatorKey; static GlobalKey get navigator => _navigatorKey; static void setKey(GlobalKey key) { _navigatorKey = key; } static Future initial () async { _cacheData = new Map(); _pre = await SharedPreferences.getInstance(); var str = loadString(SaveKey.account); if (str != null) { _account = Account.fromString(str); } else { _account = Account(); } print('cache init over'); } static saveString(String key, String value) { _pre.setString(key, value); } static saveBool(String key, bool value) { _pre.setBool(key, value); } static saveInt(String key, int value) { _pre.setInt(key, value); } static saveStringList(String key, List value) { _pre.setStringList(key, value); } static loadInt(String key) => _pre.getInt(key); static loadBool(String key) => _pre.getBool(key); static loadString(String key) => _pre.getString(key); static loadStringList(String key) => _pre.getStringList(key); static updateAccount(String account, String password) { _account.account = account; _account.password = password; saveString(SaveKey.account, _account.toString()); } static Token get token { if(_account.token?.token == null) return null; var token = _account.token; var time = DateTime.parse(token.expires_time); if(time.isAfter(DateTime.now())) return token; else return null; } static void updateToken(Token token) { _account.token = token == null ? Token() : token; saveString(SaveKey.account, _account.toString()); Request.updateToken(); } static UserInfo get user { // var context = navigator.currentState.overlay.context; // return Provider.of(context).info; return _user; } static void updateUserInfo(UserInfo user) { _user = user; saveString(SaveKey.account, _account.toString()); // var context = navigator.currentState.overlay.context; // Provider.of(context, listen: false).update(user); } static void updateUser(User user) { _user.update(user); } static void set(String key, dynamic value) { _cacheData[key] = value; } static T get(String key) { if(!_cacheData.containsKey(key)) return null; return _cacheData[key] as T; } static void clearCache() { _cacheData.clear(); } static void clearAll() { updateToken(null); updateUserInfo(null); clearCache(); Log.i("clear all data"); } } extension VersionExtension on Version { bool operator < (Version b) { var strA = version.split('.'); var strB = b.version.split('.'); if(int.parse(strA[0]) < int.parse(strB[0])) return true; else if(strA[0] == strB[0]) { if (int.parse(strA[1]) < int.parse(strB[1])) return true; else if(strA[1] == strB[1]) { if (int.parse(strA[2]) < int.parse(strB[2])) return true; } } return false; } bool operator > (Version b) { var strA = version.split('.'); var strB = b.version.split('.'); if(int.parse(strA[0]) > int.parse(strB[0])) return true; else if(strA[0] == strB[0]) { if (int.parse(strA[1]) > int.parse(strB[1])) return true; else if(strA[1] == strB[1]) { if (int.parse(strA[2]) > int.parse(strB[2])) return true; } } return false; } }