login.dart 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import 'package:dio/dio.dart';
  2. import 'package:flutter_secure_storage/flutter_secure_storage.dart';
  3. import 'package:encrypt/encrypt.dart';
  4. import 'package:e2ee_chat/common/global.dart';
  5. import 'package:e2ee_chat/common/api.dart';
  6. import '../model/user.dart';
  7. import 'profile.dart';
  8. /*
  9. static Future<void> put(User user) async {
  10. debug('put user ${user.id} ${user.username}');
  11. final store = await openStore();
  12. final box = store.box<User>();
  13. box.put(user);
  14. store.close();
  15. }
  16. static Future<User?> query(String username) async {
  17. final store = await openStore();
  18. final box = store.box<User>();
  19. int id = 0;
  20. box.getAll().forEach((user) {
  21. if (user.username == username) id = user.id;
  22. });
  23. User? user = box.get(id);
  24. // Query<User> query = box.query(User_.username.equals(username)).build();
  25. // final user = query.findFirst();
  26. // query.close();
  27. debug('query user with username=$username get id=$id');
  28. store.close();
  29. return user;
  30. }
  31. */
  32. class LoginPresenter extends ProfilePresenter {
  33. bool get isLogin => profile.isLogin;
  34. User? get user => profile.user;
  35. Future<bool> login({String? username, String? password}) async {
  36. debug('UserModel login begin');
  37. if (username != null) {
  38. profile.user = User(username);
  39. }
  40. bool _result = false;
  41. String? token = await profile.token;
  42. if (profile.username != null && (password != null || token != null)) {
  43. String? _token;
  44. try {
  45. _token = await Api().login(username: profile.username!, password: password, token: token);
  46. _result = _token != null;
  47. } on DioError catch(e) {
  48. print(e);
  49. }
  50. profile.setToken(_token);
  51. debug('UserModel login get token: ${await profile.token}');
  52. if (await profile.token != null) {
  53. debug('UserModel login success!');
  54. profile.isLogin = true;
  55. profile.isLogout = false;
  56. // await User.put(profile.user!);
  57. profile.setToken(_token);
  58. notifyListeners();
  59. }
  60. }
  61. debug('UserModel login end');
  62. return _result;
  63. }
  64. Future<void> logout() async {
  65. if (profile.isLogin && await Api().logout()) {
  66. profile.isLogin = false;
  67. profile.isLogout = true;
  68. notifyListeners();
  69. }
  70. }
  71. Future<bool> loginOrRegister(String username, String password) async {
  72. if (await login(username: username, password: password)) {
  73. return true;
  74. } else if (await Api().register(username, password)) {
  75. return await login(username: username, password: password);
  76. }
  77. return false;
  78. }
  79. }