login.dart 2.6 KB

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