cache.dart 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. import 'dart:convert';
  2. import 'package:flutter/material.dart';
  3. import 'package:twong/api/index.dart';
  4. import 'package:twong/providers/user_model.dart';
  5. import 'package:provider/provider.dart';
  6. import 'package:shared_preferences/shared_preferences.dart';
  7. import 'package:twong/models/index.dart';
  8. import 'package:twong/utils/index.dart';
  9. class Account {
  10. String account;
  11. String password;
  12. Token token;
  13. String toString() {
  14. return '{"account": "$account", "password": "$password", "token": ${json.encode(token.toJson())}}';
  15. }
  16. static Account fromString(String str) {
  17. Account account = Account();
  18. try {
  19. var map = json.decode(str);
  20. account.account = map["account"];
  21. account.password = map["password"];
  22. account.token = Token.fromJson(map["token"]);
  23. } catch (err) {
  24. Log.e(err);
  25. }
  26. return account;
  27. }
  28. }
  29. class SaveKey {
  30. static const String first = 'first';
  31. static const String account = 'account';
  32. static const String home = 'home';
  33. static const String balance = 'balance';
  34. }
  35. class Cache {
  36. static UserInfo _user;
  37. static Account _account;
  38. static bool checked = false;
  39. static SharedPreferences _pre;
  40. static Map<String, dynamic> _cacheData;
  41. static GlobalKey<NavigatorState> _navigatorKey;
  42. static GlobalKey<NavigatorState> get navigator => _navigatorKey;
  43. static void setKey(GlobalKey<NavigatorState> key) {
  44. _navigatorKey = key;
  45. }
  46. static Future initial () async {
  47. _cacheData = new Map<String, dynamic>();
  48. _pre = await SharedPreferences.getInstance();
  49. var str = loadString(SaveKey.account);
  50. if (str != null) {
  51. _account = Account.fromString(str);
  52. } else {
  53. _account = Account();
  54. }
  55. print('cache init over');
  56. }
  57. static saveString(String key, String value) {
  58. _pre.setString(key, value);
  59. }
  60. static saveBool(String key, bool value) {
  61. _pre.setBool(key, value);
  62. }
  63. static saveInt(String key, int value) {
  64. _pre.setInt(key, value);
  65. }
  66. static saveStringList(String key, List<String> value) {
  67. _pre.setStringList(key, value);
  68. }
  69. static loadInt(String key) => _pre.getInt(key);
  70. static loadBool(String key) => _pre.getBool(key);
  71. static loadString(String key) => _pre.getString(key);
  72. static loadStringList(String key) => _pre.getStringList(key);
  73. static updateAccount(String account, String password) {
  74. _account.account = account;
  75. _account.password = password;
  76. saveString(SaveKey.account, _account.toString());
  77. }
  78. static Token get token {
  79. if(_account.token?.token == null) return null;
  80. var token = _account.token;
  81. var time = DateTime.parse(token.expires_time);
  82. if(time.isAfter(DateTime.now())) return token;
  83. else return null;
  84. }
  85. static void updateToken(Token token) {
  86. _account.token = token == null ? Token() : token;
  87. saveString(SaveKey.account, _account.toString());
  88. Request.updateToken();
  89. }
  90. static UserInfo get user {
  91. // var context = navigator.currentState.overlay.context;
  92. // return Provider.of<UserModel>(context).info;
  93. return _user;
  94. }
  95. static void updateUserInfo(UserInfo user) {
  96. _user = user;
  97. saveString(SaveKey.account, _account.toString());
  98. // var context = navigator.currentState.overlay.context;
  99. // Provider.of<UserModel>(context, listen: false).update(user);
  100. }
  101. static void updateUser(User user) {
  102. _user.update(user);
  103. }
  104. static void set(String key, dynamic value) {
  105. _cacheData[key] = value;
  106. }
  107. static T get<T>(String key) {
  108. if(!_cacheData.containsKey(key)) return null;
  109. return _cacheData[key] as T;
  110. }
  111. static void clearCache() {
  112. _cacheData.clear();
  113. }
  114. static void clearAll() {
  115. updateToken(null);
  116. updateUserInfo(null);
  117. clearCache();
  118. Log.i("clear all data");
  119. }
  120. }
  121. extension VersionExtension on Version {
  122. bool operator < (Version b) {
  123. var strA = version.split('.');
  124. var strB = b.version.split('.');
  125. if(int.parse(strA[0]) < int.parse(strB[0])) return true;
  126. else if(strA[0] == strB[0]) {
  127. if (int.parse(strA[1]) < int.parse(strB[1])) return true;
  128. else if(strA[1] == strB[1]) {
  129. if (int.parse(strA[2]) < int.parse(strB[2])) return true;
  130. }
  131. }
  132. return false;
  133. }
  134. bool operator > (Version b) {
  135. var strA = version.split('.');
  136. var strB = b.version.split('.');
  137. if(int.parse(strA[0]) > int.parse(strB[0])) return true;
  138. else if(strA[0] == strB[0]) {
  139. if (int.parse(strA[1]) > int.parse(strB[1])) return true;
  140. else if(strA[1] == strB[1]) {
  141. if (int.parse(strA[2]) > int.parse(strB[2])) return true;
  142. }
  143. }
  144. return false;
  145. }
  146. }