user_model.dart 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. // ignore_for_file: non_constant_identifier_names, camel_case_types, use_build_context_synchronously
  2. import 'dart:convert';
  3. import 'package:toast/toast.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:provider/provider.dart';
  6. import 'package:flutter/foundation.dart';
  7. import 'package:gozap_package/models/DB/table.dart';
  8. import 'package:gozap_package/components/DB/db.dart';
  9. import 'package:gozap_package/components/common.dart';
  10. import 'package:gozap_package/views/log_in/log_in_view.dart';
  11. import 'package:gozap_package/components/themes/themes.dart';
  12. import 'package:animated_splash_screen/animated_splash_screen.dart';
  13. class UserModule {
  14. late int UserID;
  15. late String UserName;
  16. late String PhoneNumber;
  17. late bool IsAdmin;
  18. late String UserReferID;
  19. late DateTime UserCreatedAt;
  20. late DateTime UserUpdatedAt;
  21. UserModule(
  22. {required this.UserID,
  23. required this.UserName,
  24. required this.PhoneNumber,
  25. required this.UserReferID,
  26. required this.IsAdmin,
  27. required this.UserCreatedAt,
  28. required this.UserUpdatedAt});
  29. static Map<String, dynamic> toMap(UserModule user) {
  30. var map = <String, dynamic>{};
  31. map['UserID'] = user.UserID;
  32. map['UserName'] = user.UserName;
  33. map['PhoneNumber'] = user.PhoneNumber;
  34. map['UserReferID'] = user.UserReferID;
  35. map['IsAdmin'] = user.IsAdmin?1:0;
  36. map['UserCreatedAt'] = user.UserCreatedAt.toString();
  37. map['UserUpdatedAt'] = user.UserUpdatedAt.toString();
  38. return map;
  39. }
  40. factory UserModule.fromJson(dynamic json) {
  41. return UserModule(
  42. UserID: json['UserID'],
  43. UserName: json['UserName'],
  44. PhoneNumber: json['PhoneNumber'],
  45. UserReferID:json['UserReferID']??"",
  46. IsAdmin: json['IsAdmin']==1?true:false,
  47. UserCreatedAt: DateTime.parse(json['UserCreatedAt']),
  48. UserUpdatedAt: DateTime.parse(json['UserUpdatedAt']),
  49. );
  50. }
  51. static String encode(UserModule save) => json.encode(UserModule.toMap(save));
  52. static UserModule? decode(String saves) {
  53. if (saves.isNotEmpty && saves != '') {
  54. return UserModule.fromJson(json.decode(saves));
  55. }
  56. return null;
  57. }
  58. }
  59. class userChangeNotifier extends ChangeNotifier {
  60. UserModule? _user;
  61. UserModule? get user => _user;
  62. Future<void> set(BuildContext context, UserModule user, bool isSignup,
  63. Widget nextScreen) async {
  64. try {
  65. bool isSaved = await Provider.of<LocalDB>(context, listen: false)
  66. .writeData(DBTable.User, UserModule.encode(user));
  67. if (isSaved) {
  68. _user = user;
  69. Navigator.pushReplacement(
  70. context,
  71. MaterialPageRoute(
  72. builder: (context) => AnimatedSplashScreen(
  73. duration: 3500,
  74. splashIconSize: 300.0,
  75. // splash: "images/logos/gofuel_logo.jpeg",
  76. splash: isSignup
  77. ? Container(
  78. child: Common.lottieSignedupWidget(context),
  79. )
  80. : Container(
  81. child: Common.lottieLoggedInWidget(context),
  82. ),
  83. nextScreen: nextScreen,
  84. backgroundColor: AppTheme.whiteColor,
  85. splashTransition: SplashTransition.fadeTransition,
  86. )));
  87. } else {
  88. _user = null;
  89. Toast.show("Somthing went wrong",
  90. duration: Toast.lengthLong, gravity: Toast.bottom);
  91. }
  92. } catch (e) {
  93. if (kDebugMode) {
  94. print(e);
  95. }
  96. }
  97. notifyListeners();
  98. }
  99. Future<void> get(BuildContext context) async {
  100. _user = UserModule.decode(await Provider.of<LocalDB>(context, listen: false)
  101. .readData(DBTable.User));
  102. notifyListeners();
  103. }
  104. Future<void> remove(BuildContext context, Widget nextScreen) async {
  105. bool isRemoved = await Provider.of<LocalDB>(context, listen: false)
  106. .removeData(DBTable.User);
  107. if (isRemoved) {
  108. _user = null;
  109. Navigator.pushReplacement(
  110. context,
  111. MaterialPageRoute(
  112. builder: (context) => LogInView(nextScreen: nextScreen)));
  113. }
  114. notifyListeners();
  115. }
  116. }