reason

update mvvm

...@@ -4,13 +4,16 @@ import 'package:Parlando/generated/json/user_entity.g.dart'; ...@@ -4,13 +4,16 @@ import 'package:Parlando/generated/json/user_entity.g.dart';
4 4
5 @JsonSerializable() 5 @JsonSerializable()
6 class UserEntity { 6 class UserEntity {
7 - late int id; 7 + String? status;
8 - late String name; 8 + int? code;
9 - late String avatar; 9 + String? message;
10 + UserData? data;
11 + UserError? error;
10 12
11 UserEntity(); 13 UserEntity();
12 14
13 - factory UserEntity.fromJson(Map<String, dynamic> json) => $UserEntityFromJson(json); 15 + factory UserEntity.fromJson(Map<String, dynamic> json) =>
16 + $UserEntityFromJson(json);
14 17
15 Map<String, dynamic> toJson() => $UserEntityToJson(this); 18 Map<String, dynamic> toJson() => $UserEntityToJson(this);
16 19
...@@ -18,4 +21,49 @@ class UserEntity { ...@@ -18,4 +21,49 @@ class UserEntity {
18 String toString() { 21 String toString() {
19 return jsonEncode(this); 22 return jsonEncode(this);
20 } 23 }
24 +}
25 +
26 +@JsonSerializable()
27 +class UserData {
28 + int? id;
29 + dynamic nickname;
30 + dynamic mobile;
31 + String? email;
32 + String? avatar;
33 + String? gender;
34 + dynamic provider;
35 + @JSONField(name: "provider_id")
36 + dynamic providerId;
37 + String? state;
38 + @JSONField(name: "created_at")
39 + String? createdAt;
40 + @JSONField(name: "updated_at")
41 + String? updatedAt;
42 +
43 + UserData();
44 +
45 + factory UserData.fromJson(Map<String, dynamic> json) =>
46 + $UserDataFromJson(json);
47 +
48 + Map<String, dynamic> toJson() => $UserDataToJson(this);
49 +
50 + @override
51 + String toString() {
52 + return jsonEncode(this);
53 + }
54 +}
55 +
56 +@JsonSerializable()
57 +class UserError {
58 + UserError();
59 +
60 + factory UserError.fromJson(Map<String, dynamic> json) =>
61 + $UserErrorFromJson(json);
62 +
63 + Map<String, dynamic> toJson() => $UserErrorToJson(this);
64 +
65 + @override
66 + String toString() {
67 + return jsonEncode(this);
68 + }
21 } 69 }
...\ No newline at end of file ...\ No newline at end of file
......
This diff is collapsed. Click to expand it.
1 +import 'package:Parlando/account/models/user_entity.dart';
2 +import 'package:Parlando/apis/api_response.dart';
3 +import 'package:Parlando/net/dio_utils.dart';
4 +import 'package:Parlando/net/http_api.dart';
5 +import 'package:flutter/material.dart';
6 +
7 +class AccountViewProvider with ChangeNotifier {
8 + ApiResponse _apiResponse = ApiResponse.initial('Empty data');
9 + UserData? _user;
10 +
11 + ApiResponse get response {
12 + return _apiResponse;
13 + }
14 +
15 + UserData? get media {
16 + return _user;
17 + }
18 +
19 + Future<void> fetchAccountData(String value) async {
20 + _apiResponse = ApiResponse.loading('Fetching artist data');
21 + // TODO 不知道为啥会提前触发,先注释掉吧
22 +
23 + DioUtils.instance.asyncRequestNetwork<UserEntity>(
24 + Method.get,
25 + HttpApi.user,
26 + onSuccess: (data) {
27 + _apiResponse = ApiResponse.completed(data!.data);
28 + notifyListeners();
29 + },
30 + onError: (code, msg) {
31 + _apiResponse = ApiResponse.error(msg);
32 + notifyListeners();
33 + },
34 + );
35 + }
36 +
37 + void setSelectedAccount(UserData? user) {
38 + _user = user;
39 + // notifyListeners();
40 + }
41 +}
1 +class ApiResponse<T> {
2 + Status status;
3 + T? data;
4 + String? message;
5 +
6 + ApiResponse.initial(this.message) : status = Status.INITIAL;
7 +
8 + ApiResponse.loading(this.message) : status = Status.LOADING;
9 +
10 + ApiResponse.completed(this.data) : status = Status.COMPLETED;
11 +
12 + ApiResponse.error(this.message) : status = Status.ERROR;
13 +
14 + @override
15 + String toString() {
16 + return "Status : $status \n Message : $message \n Data : $data";
17 + }
18 +}
19 +
20 +enum Status { INITIAL, LOADING, COMPLETED, ERROR }
1 +class AppException implements Exception {
2 + late final String? _message;
3 + late final String? _prefix;
4 +
5 + AppException([this._message, this._prefix]);
6 +
7 + @override
8 + String toString() {
9 + return "$_prefix$_message";
10 + }
11 +}
12 +
13 +class FetchDataException extends AppException {
14 + FetchDataException([String? message])
15 + : super(message, "Error During Communication: ");
16 +}
17 +
18 +class BadRequestException extends AppException {
19 + BadRequestException([message]) : super(message, "Invalid Request: ");
20 +}
21 +
22 +class UnauthorisedException extends AppException {
23 + UnauthorisedException([message]) : super(message, "Unauthorised Request: ");
24 +}
25 +
26 +class InvalidInputException extends AppException {
27 + InvalidInputException([String? message]) : super(message, "Invalid Input: ");
28 +}
1 import 'package:Parlando/generated/json/base/json_convert_content.dart'; 1 import 'package:Parlando/generated/json/base/json_convert_content.dart';
2 import 'package:Parlando/login/models/auth_entity.dart'; 2 import 'package:Parlando/login/models/auth_entity.dart';
3 3
4 -AuthEntity $LoginEntityFromJson(Map<String, dynamic> json) { 4 +AuthEntity $AuthEntityFromJson(Map<String, dynamic> json) {
5 - final AuthEntity loginEntity = AuthEntity(); 5 + final AuthEntity authEntity = AuthEntity();
6 final String? status = jsonConvert.convert<String>(json['status']); 6 final String? status = jsonConvert.convert<String>(json['status']);
7 if (status != null) { 7 if (status != null) {
8 - loginEntity.status = status; 8 + authEntity.status = status;
9 } 9 }
10 final int? code = jsonConvert.convert<int>(json['code']); 10 final int? code = jsonConvert.convert<int>(json['code']);
11 if (code != null) { 11 if (code != null) {
12 - loginEntity.code = code; 12 + authEntity.code = code;
13 } 13 }
14 final String? message = jsonConvert.convert<String>(json['message']); 14 final String? message = jsonConvert.convert<String>(json['message']);
15 if (message != null) { 15 if (message != null) {
16 - loginEntity.message = message; 16 + authEntity.message = message;
17 } 17 }
18 final AuthData? data = jsonConvert.convert<AuthData>(json['data']); 18 final AuthData? data = jsonConvert.convert<AuthData>(json['data']);
19 if (data != null) { 19 if (data != null) {
20 - loginEntity.data = data; 20 + authEntity.data = data;
21 } 21 }
22 final AuthError? error = jsonConvert.convert<AuthError>(json['error']); 22 final AuthError? error = jsonConvert.convert<AuthError>(json['error']);
23 if (error != null) { 23 if (error != null) {
24 - loginEntity.error = error; 24 + authEntity.error = error;
25 } 25 }
26 - return loginEntity; 26 + return authEntity;
27 } 27 }
28 28
29 -Map<String, dynamic> $LoginEntityToJson(AuthEntity entity) { 29 +Map<String, dynamic> $AuthEntityToJson(AuthEntity entity) {
30 final Map<String, dynamic> data = <String, dynamic>{}; 30 final Map<String, dynamic> data = <String, dynamic>{};
31 data['status'] = entity.status; 31 data['status'] = entity.status;
32 data['code'] = entity.code; 32 data['code'] = entity.code;
...@@ -36,27 +36,27 @@ Map<String, dynamic> $LoginEntityToJson(AuthEntity entity) { ...@@ -36,27 +36,27 @@ Map<String, dynamic> $LoginEntityToJson(AuthEntity entity) {
36 return data; 36 return data;
37 } 37 }
38 38
39 -AuthData $LoginDataFromJson(Map<String, dynamic> json) { 39 +AuthData $AuthDataFromJson(Map<String, dynamic> json) {
40 - final AuthData loginData = AuthData(); 40 + final AuthData authData = AuthData();
41 final String? token = jsonConvert.convert<String>(json['token']); 41 final String? token = jsonConvert.convert<String>(json['token']);
42 if (token != null) { 42 if (token != null) {
43 - loginData.token = token; 43 + authData.token = token;
44 } 44 }
45 - return loginData; 45 + return authData;
46 } 46 }
47 47
48 -Map<String, dynamic> $LoginDataToJson(AuthData entity) { 48 +Map<String, dynamic> $AuthDataToJson(AuthData entity) {
49 final Map<String, dynamic> data = <String, dynamic>{}; 49 final Map<String, dynamic> data = <String, dynamic>{};
50 data['token'] = entity.token; 50 data['token'] = entity.token;
51 return data; 51 return data;
52 } 52 }
53 53
54 -AuthError $LoginErrorFromJson(Map<String, dynamic> json) { 54 +AuthError $AuthErrorFromJson(Map<String, dynamic> json) {
55 - final AuthError loginError = AuthError(); 55 + final AuthError authError = AuthError();
56 - return loginError; 56 + return authError;
57 } 57 }
58 58
59 -Map<String, dynamic> $LoginErrorToJson(AuthError entity) { 59 +Map<String, dynamic> $AuthErrorToJson(AuthError entity) {
60 final Map<String, dynamic> data = <String, dynamic>{}; 60 final Map<String, dynamic> data = <String, dynamic>{};
61 return data; 61 return data;
62 } 62 }
......
...@@ -3,24 +3,41 @@ ...@@ -3,24 +3,41 @@
3 // ignore_for_file: prefer_single_quotes 3 // ignore_for_file: prefer_single_quotes
4 4
5 // This file is automatically generated. DO NOT EDIT, all your changes would be lost. 5 // This file is automatically generated. DO NOT EDIT, all your changes would be lost.
6 +import 'package:flutter/material.dart';
6 import 'package:Parlando/account/models/user_entity.dart'; 7 import 'package:Parlando/account/models/user_entity.dart';
7 -import 'package:Parlando/generated/json/user_entity.g.dart';
8 import 'package:Parlando/category/models/category_item_entity.dart'; 8 import 'package:Parlando/category/models/category_item_entity.dart';
9 -import 'package:Parlando/generated/json/category_item_entity.g.dart';
10 import 'package:Parlando/home/models/setting_entity.dart'; 9 import 'package:Parlando/home/models/setting_entity.dart';
11 -import 'package:Parlando/generated/json/setting_entity.g.dart';
12 import 'package:Parlando/login/models/auth_entity.dart'; 10 import 'package:Parlando/login/models/auth_entity.dart';
13 -import 'package:Parlando/generated/json/login_entity.g.dart';
14 import 'package:Parlando/poem/models/lang_sort_entity.dart'; 11 import 'package:Parlando/poem/models/lang_sort_entity.dart';
15 -import 'package:Parlando/generated/json/lang_sort_entity.g.dart';
16 import 'package:Parlando/poem/models/search_entity.dart'; 12 import 'package:Parlando/poem/models/search_entity.dart';
17 -import 'package:Parlando/generated/json/search_entity.g.dart';
18 import 'package:Parlando/timeline/models/friend_entity.dart'; 13 import 'package:Parlando/timeline/models/friend_entity.dart';
19 -import 'package:Parlando/generated/json/friend_entity.g.dart';
20 14
21 JsonConvert jsonConvert = JsonConvert(); 15 JsonConvert jsonConvert = JsonConvert();
22 16
17 +typedef JsonConvertFunction<T> = T Function(Map<String, dynamic> json);
18 +
23 class JsonConvert { 19 class JsonConvert {
20 + static final Map<String, JsonConvertFunction> _convertFuncMap = {
21 + (UserEntity).toString(): UserEntity.fromJson,
22 + (UserData).toString(): UserData.fromJson,
23 + (UserError).toString(): UserError.fromJson,
24 + (CategoryItemEntity).toString(): CategoryItemEntity.fromJson,
25 + (SettingEntity).toString(): SettingEntity.fromJson,
26 + (SettingData).toString(): SettingData.fromJson,
27 + (SettingDataLoginSetting).toString(): SettingDataLoginSetting.fromJson,
28 + (SettingError).toString(): SettingError.fromJson,
29 + (AuthEntity).toString(): AuthEntity.fromJson,
30 + (AuthData).toString(): AuthData.fromJson,
31 + (AuthError).toString(): AuthError.fromJson,
32 + (LangSortEntity).toString(): LangSortEntity.fromJson,
33 + (SearchEntity).toString(): SearchEntity.fromJson,
34 + (SearchItems).toString(): SearchItems.fromJson,
35 + (SearchItemsOwner).toString(): SearchItemsOwner.fromJson,
36 + (SearchItemsLicense).toString(): SearchItemsLicense.fromJson,
37 + (FriendEntity).toString(): FriendEntity.fromJson,
38 + (FriendData).toString(): FriendData.fromJson,
39 + };
40 +
24 T? convert<T>(dynamic value) { 41 T? convert<T>(dynamic value) {
25 if (value == null) { 42 if (value == null) {
26 return null; 43 return null;
...@@ -35,7 +52,7 @@ class JsonConvert { ...@@ -35,7 +52,7 @@ class JsonConvert {
35 try { 52 try {
36 return value.map((dynamic e) => asT<T>(e)).toList(); 53 return value.map((dynamic e) => asT<T>(e)).toList();
37 } catch (e, stackTrace) { 54 } catch (e, stackTrace) {
38 - print('asT<$T> $e $stackTrace'); 55 + debugPrint('asT<$T> $e $stackTrace');
39 return <T>[]; 56 return <T>[];
40 } 57 }
41 } 58 }
...@@ -47,15 +64,16 @@ class JsonConvert { ...@@ -47,15 +64,16 @@ class JsonConvert {
47 try { 64 try {
48 return (value as List<dynamic>).map((dynamic e) => asT<T>(e)!).toList(); 65 return (value as List<dynamic>).map((dynamic e) => asT<T>(e)!).toList();
49 } catch (e, stackTrace) { 66 } catch (e, stackTrace) {
50 - print('asT<$T> $e $stackTrace'); 67 + debugPrint('asT<$T> $e $stackTrace');
51 return <T>[]; 68 return <T>[];
52 } 69 }
53 } 70 }
71 +
54 T? asT<T extends Object?>(dynamic value) { 72 T? asT<T extends Object?>(dynamic value) {
55 if (value is T) { 73 if (value is T) {
56 return value; 74 return value;
57 } 75 }
58 - final String type = T.toString(); 76 + final String type = T.toString();
59 try { 77 try {
60 final String valueS = value.toString(); 78 final String valueS = value.toString();
61 if (type == "String") { 79 if (type == "String") {
...@@ -66,87 +84,48 @@ class JsonConvert { ...@@ -66,87 +84,48 @@ class JsonConvert {
66 return double.tryParse(valueS)?.toInt() as T?; 84 return double.tryParse(valueS)?.toInt() as T?;
67 } else { 85 } else {
68 return intValue as T; 86 return intValue as T;
69 - } } else if (type == "double") { 87 + }
88 + } else if (type == "double") {
70 return double.parse(valueS) as T; 89 return double.parse(valueS) as T;
71 - } else if (type == "DateTime") { 90 + } else if (type == "DateTime") {
72 return DateTime.parse(valueS) as T; 91 return DateTime.parse(valueS) as T;
73 - } else if (type == "bool") { 92 + } else if (type == "bool") {
74 if (valueS == '0' || valueS == '1') { 93 if (valueS == '0' || valueS == '1') {
75 return (valueS == '1') as T; 94 return (valueS == '1') as T;
76 } 95 }
77 return (valueS == 'true') as T; 96 return (valueS == 'true') as T;
97 + } else if (type == "Map" || type.startsWith("Map<")) {
98 + return value as T;
78 } else { 99 } else {
79 - return JsonConvert.fromJsonAsT<T>(value); 100 + if (_convertFuncMap.containsKey(type)) {
101 + return _convertFuncMap[type]!(value) as T;
102 + } else {
103 + throw UnimplementedError('$type unimplemented');
104 + }
80 } 105 }
81 } catch (e, stackTrace) { 106 } catch (e, stackTrace) {
82 - print('asT<$T> $e $stackTrace'); 107 + debugPrint('asT<$T> $e $stackTrace');
83 return null; 108 return null;
84 } 109 }
85 - } 110 + }
86 - //Go back to a single instance by type
87 - static M? _fromJsonSingle<M>(Map<String, dynamic> json) {
88 - final String type = M.toString();
89 - if (type == (UserEntity).toString()) {
90 - return UserEntity.fromJson(json) as M;
91 - }
92 - if (type == (CategoryItemEntity).toString()) {
93 - return CategoryItemEntity.fromJson(json) as M;
94 - }
95 - if (type == (SettingEntity).toString()) {
96 - return SettingEntity.fromJson(json) as M;
97 - }
98 - if (type == (SettingData).toString()) {
99 - return SettingData.fromJson(json) as M;
100 - }
101 - if (type == (SettingDataLoginSetting).toString()) {
102 - return SettingDataLoginSetting.fromJson(json) as M;
103 - }
104 - if (type == (SettingError).toString()) {
105 - return SettingError.fromJson(json) as M;
106 - }
107 - if (type == (AuthEntity).toString()) {
108 - return AuthEntity.fromJson(json) as M;
109 - }
110 - if (type == (AuthData).toString()) {
111 - return AuthData.fromJson(json) as M;
112 - }
113 - if (type == (AuthError).toString()) {
114 - return AuthError.fromJson(json) as M;
115 - }
116 - if (type == (LangSortEntity).toString()) {
117 - return LangSortEntity.fromJson(json) as M;
118 - }
119 - if (type == (SearchEntity).toString()) {
120 - return SearchEntity.fromJson(json) as M;
121 - }
122 - if (type == (SearchItems).toString()) {
123 - return SearchItems.fromJson(json) as M;
124 - }
125 - if (type == (SearchItemsOwner).toString()) {
126 - return SearchItemsOwner.fromJson(json) as M;
127 - }
128 - if (type == (SearchItemsLicense).toString()) {
129 - return SearchItemsLicense.fromJson(json) as M;
130 - }
131 - if (type == (FriendEntity).toString()) {
132 - return FriendEntity.fromJson(json) as M;
133 - }
134 - if (type == (FriendData).toString()) {
135 - return FriendData.fromJson(json) as M;
136 - }
137 -
138 - print("$type not found");
139 -
140 - return null;
141 -}
142 111
143 //list is returned by type 112 //list is returned by type
144 - static M? _getListChildType<M>(List<Map<String, dynamic>> data) { 113 + static M? _getListChildType<M>(List<Map<String, dynamic>> data) {
145 if (<UserEntity>[] is M) { 114 if (<UserEntity>[] is M) {
146 return data 115 return data
147 .map<UserEntity>((Map<String, dynamic> e) => UserEntity.fromJson(e)) 116 .map<UserEntity>((Map<String, dynamic> e) => UserEntity.fromJson(e))
148 .toList() as M; 117 .toList() as M;
149 } 118 }
119 + if (<UserData>[] is M) {
120 + return data
121 + .map<UserData>((Map<String, dynamic> e) => UserData.fromJson(e))
122 + .toList() as M;
123 + }
124 + if (<UserError>[] is M) {
125 + return data
126 + .map<UserError>((Map<String, dynamic> e) => UserError.fromJson(e))
127 + .toList() as M;
128 + }
150 if (<CategoryItemEntity>[] is M) { 129 if (<CategoryItemEntity>[] is M) {
151 return data 130 return data
152 .map<CategoryItemEntity>( 131 .map<CategoryItemEntity>(
...@@ -232,18 +211,17 @@ class JsonConvert { ...@@ -232,18 +211,17 @@ class JsonConvert {
232 .toList() as M; 211 .toList() as M;
233 } 212 }
234 213
235 - print("${M.toString()} not found"); 214 + debugPrint("${M.toString()} not found");
236 - 215 +
237 - return null; 216 + return null;
238 -} 217 + }
239 218
240 static M? fromJsonAsT<M>(dynamic json) { 219 static M? fromJsonAsT<M>(dynamic json) {
241 - if(json == null){ 220 + if (json is List) {
242 - return null; 221 + return _getListChildType<M>(
243 - } if (json is List) { 222 + json.map((e) => e as Map<String, dynamic>).toList());
244 - return _getListChildType<M>(json.map((e) => e as Map<String, dynamic>).toList()); 223 + } else {
245 - } else { 224 + return jsonConvert.asT<M>(json);
246 - return _fromJsonSingle<M>(json as Map<String, dynamic>); 225 + }
247 - } 226 + }
248 - }
249 } 227 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -3,25 +3,110 @@ import 'package:Parlando/account/models/user_entity.dart'; ...@@ -3,25 +3,110 @@ import 'package:Parlando/account/models/user_entity.dart';
3 3
4 UserEntity $UserEntityFromJson(Map<String, dynamic> json) { 4 UserEntity $UserEntityFromJson(Map<String, dynamic> json) {
5 final UserEntity userEntity = UserEntity(); 5 final UserEntity userEntity = UserEntity();
6 + final String? status = jsonConvert.convert<String>(json['status']);
7 + if (status != null) {
8 + userEntity.status = status;
9 + }
10 + final int? code = jsonConvert.convert<int>(json['code']);
11 + if (code != null) {
12 + userEntity.code = code;
13 + }
14 + final String? message = jsonConvert.convert<String>(json['message']);
15 + if (message != null) {
16 + userEntity.message = message;
17 + }
18 + final UserData? data = jsonConvert.convert<UserData>(json['data']);
19 + if (data != null) {
20 + userEntity.data = data;
21 + }
22 + final UserError? error = jsonConvert.convert<UserError>(json['error']);
23 + if (error != null) {
24 + userEntity.error = error;
25 + }
26 + return userEntity;
27 +}
28 +
29 +Map<String, dynamic> $UserEntityToJson(UserEntity entity) {
30 + final Map<String, dynamic> data = <String, dynamic>{};
31 + data['status'] = entity.status;
32 + data['code'] = entity.code;
33 + data['message'] = entity.message;
34 + data['data'] = entity.data?.toJson();
35 + data['error'] = entity.error?.toJson();
36 + return data;
37 +}
38 +
39 +UserData $UserDataFromJson(Map<String, dynamic> json) {
40 + final UserData userData = UserData();
6 final int? id = jsonConvert.convert<int>(json['id']); 41 final int? id = jsonConvert.convert<int>(json['id']);
7 if (id != null) { 42 if (id != null) {
8 - userEntity.id = id; 43 + userData.id = id;
44 + }
45 + final dynamic? nickname = jsonConvert.convert<dynamic>(json['nickname']);
46 + if (nickname != null) {
47 + userData.nickname = nickname;
48 + }
49 + final dynamic? mobile = jsonConvert.convert<dynamic>(json['mobile']);
50 + if (mobile != null) {
51 + userData.mobile = mobile;
9 } 52 }
10 - final String? name = jsonConvert.convert<String>(json['name']); 53 + final String? email = jsonConvert.convert<String>(json['email']);
11 - if (name != null) { 54 + if (email != null) {
12 - userEntity.name = name; 55 + userData.email = email;
13 } 56 }
14 final String? avatar = jsonConvert.convert<String>(json['avatar']); 57 final String? avatar = jsonConvert.convert<String>(json['avatar']);
15 if (avatar != null) { 58 if (avatar != null) {
16 - userEntity.avatar = avatar; 59 + userData.avatar = avatar;
17 } 60 }
18 - return userEntity; 61 + final String? gender = jsonConvert.convert<String>(json['gender']);
62 + if (gender != null) {
63 + userData.gender = gender;
64 + }
65 + final dynamic? provider = jsonConvert.convert<dynamic>(json['provider']);
66 + if (provider != null) {
67 + userData.provider = provider;
68 + }
69 + final dynamic? providerId = jsonConvert.convert<dynamic>(json['provider_id']);
70 + if (providerId != null) {
71 + userData.providerId = providerId;
72 + }
73 + final String? state = jsonConvert.convert<String>(json['state']);
74 + if (state != null) {
75 + userData.state = state;
76 + }
77 + final String? createdAt = jsonConvert.convert<String>(json['created_at']);
78 + if (createdAt != null) {
79 + userData.createdAt = createdAt;
80 + }
81 + final String? updatedAt = jsonConvert.convert<String>(json['updated_at']);
82 + if (updatedAt != null) {
83 + userData.updatedAt = updatedAt;
84 + }
85 + return userData;
19 } 86 }
20 87
21 -Map<String, dynamic> $UserEntityToJson(UserEntity entity) {
22 - final Map<String, dynamic> data = <String, dynamic>{};
23 - data['id'] = entity.id;
24 - data['name'] = entity.name;
25 - data['avatar'] = entity.avatar;
26 - return data;
27 -}
...\ No newline at end of file ...\ No newline at end of file
88 +Map<String, dynamic> $UserDataToJson(UserData entity) {
89 + final Map<String, dynamic> data = <String, dynamic>{};
90 + data['id'] = entity.id;
91 + data['nickname'] = entity.nickname;
92 + data['mobile'] = entity.mobile;
93 + data['email'] = entity.email;
94 + data['avatar'] = entity.avatar;
95 + data['gender'] = entity.gender;
96 + data['provider'] = entity.provider;
97 + data['provider_id'] = entity.providerId;
98 + data['state'] = entity.state;
99 + data['created_at'] = entity.createdAt;
100 + data['updated_at'] = entity.updatedAt;
101 + return data;
102 +}
103 +
104 +UserError $UserErrorFromJson(Map<String, dynamic> json) {
105 + final UserError userError = UserError();
106 + return userError;
107 +}
108 +
109 +Map<String, dynamic> $UserErrorToJson(UserError entity) {
110 + final Map<String, dynamic> data = <String, dynamic>{};
111 + return data;
112 +}
......
1 import 'dart:convert'; 1 import 'dart:convert';
2 import 'package:Parlando/generated/json/base/json_field.dart'; 2 import 'package:Parlando/generated/json/base/json_field.dart';
3 -import 'package:Parlando/generated/json/login_entity.g.dart'; 3 +import 'package:Parlando/generated/json/auth_entity.g.dart';
4 4
5 @JsonSerializable() 5 @JsonSerializable()
6 class AuthEntity { 6 class AuthEntity {
...@@ -13,9 +13,9 @@ class AuthEntity { ...@@ -13,9 +13,9 @@ class AuthEntity {
13 AuthEntity(); 13 AuthEntity();
14 14
15 factory AuthEntity.fromJson(Map<String, dynamic> json) => 15 factory AuthEntity.fromJson(Map<String, dynamic> json) =>
16 - $LoginEntityFromJson(json); 16 + $AuthEntityFromJson(json);
17 17
18 - Map<String, dynamic> toJson() => $LoginEntityToJson(this); 18 + Map<String, dynamic> toJson() => $AuthEntityToJson(this);
19 19
20 @override 20 @override
21 String toString() { 21 String toString() {
...@@ -30,9 +30,9 @@ class AuthData { ...@@ -30,9 +30,9 @@ class AuthData {
30 AuthData(); 30 AuthData();
31 31
32 factory AuthData.fromJson(Map<String, dynamic> json) => 32 factory AuthData.fromJson(Map<String, dynamic> json) =>
33 - $LoginDataFromJson(json); 33 + $AuthDataFromJson(json);
34 34
35 - Map<String, dynamic> toJson() => $LoginDataToJson(this); 35 + Map<String, dynamic> toJson() => $AuthDataToJson(this);
36 36
37 @override 37 @override
38 String toString() { 38 String toString() {
...@@ -45,12 +45,12 @@ class AuthError { ...@@ -45,12 +45,12 @@ class AuthError {
45 AuthError(); 45 AuthError();
46 46
47 factory AuthError.fromJson(Map<String, dynamic> json) => 47 factory AuthError.fromJson(Map<String, dynamic> json) =>
48 - $LoginErrorFromJson(json); 48 + $AuthErrorFromJson(json);
49 49
50 - Map<String, dynamic> toJson() => $LoginErrorToJson(this); 50 + Map<String, dynamic> toJson() => $AuthErrorToJson(this);
51 51
52 @override 52 @override
53 String toString() { 53 String toString() {
54 return jsonEncode(this); 54 return jsonEncode(this);
55 } 55 }
56 -} 56 +}
...\ No newline at end of file ...\ No newline at end of file
......
1 +import 'package:Parlando/account/view_models/account_view_model.dart';
1 import 'package:dio/dio.dart'; 2 import 'package:dio/dio.dart';
2 import 'package:flustars/flustars.dart'; 3 import 'package:flustars/flustars.dart';
3 import 'package:flutter/material.dart'; 4 import 'package:flutter/material.dart';
...@@ -88,15 +89,10 @@ class MyApp extends StatelessWidget { ...@@ -88,15 +89,10 @@ class MyApp extends StatelessWidget {
88 /// 统一添加身份验证请求头 89 /// 统一添加身份验证请求头
89 interceptors.add(AuthInterceptor()); 90 interceptors.add(AuthInterceptor());
90 91
91 - /// 刷新Token
92 - interceptors.add(TokenInterceptor());
93 -
94 /// 打印Log(生产模式去除) 92 /// 打印Log(生产模式去除)
95 if (!Constant.inProduction) { 93 if (!Constant.inProduction) {
96 interceptors.add(LoggingInterceptor()); 94 interceptors.add(LoggingInterceptor());
97 } 95 }
98 -
99 - /// 适配数据(根据自己的数据结构,可自行选择添加)
100 interceptors.add(AdapterInterceptor()); 96 interceptors.add(AdapterInterceptor());
101 configDio( 97 configDio(
102 baseUrl: 'http://www.yiyan.pub/api/v1/', 98 baseUrl: 'http://www.yiyan.pub/api/v1/',
...@@ -131,7 +127,8 @@ class MyApp extends StatelessWidget { ...@@ -131,7 +127,8 @@ class MyApp extends StatelessWidget {
131 final Widget app = MultiProvider( 127 final Widget app = MultiProvider(
132 providers: [ 128 providers: [
133 ChangeNotifierProvider(create: (_) => ThemeProvider()), 129 ChangeNotifierProvider(create: (_) => ThemeProvider()),
134 - ChangeNotifierProvider(create: (_) => LocaleProvider()) 130 + ChangeNotifierProvider(create: (_) => LocaleProvider()),
131 + ChangeNotifierProvider(create: (_) => AccountViewProvider())
135 ], 132 ],
136 child: Consumer2<ThemeProvider, LocaleProvider>( 133 child: Consumer2<ThemeProvider, LocaleProvider>(
137 builder: 134 builder:
...@@ -145,14 +142,13 @@ class MyApp extends StatelessWidget { ...@@ -145,14 +142,13 @@ class MyApp extends StatelessWidget {
145 return OKToast( 142 return OKToast(
146 backgroundColor: Colors.black54, 143 backgroundColor: Colors.black54,
147 textPadding: 144 textPadding:
148 - const EdgeInsets.symmetric(horizontal: 16.0, vertical: 10.0), 145 + const EdgeInsets.symmetric(horizontal: 16.0, vertical: 10.0),
149 radius: 20.0, 146 radius: 20.0,
150 position: ToastPosition.bottom, 147 position: ToastPosition.bottom,
151 child: app); 148 child: app);
152 } 149 }
153 150
154 - Widget _buildMaterialApp( 151 + Widget _buildMaterialApp(ThemeProvider provider, LocaleProvider localeProvider) {
155 - ThemeProvider provider, LocaleProvider localeProvider) {
156 return MaterialApp( 152 return MaterialApp(
157 title: '一言', 153 title: '一言',
158 // showPerformanceOverlay: true, //显示性能标签 154 // showPerformanceOverlay: true, //显示性能标签
......
...@@ -120,6 +120,33 @@ class DioUtils { ...@@ -120,6 +120,33 @@ class DioUtils {
120 return options; 120 return options;
121 } 121 }
122 122
123 + Future request<T>(
124 + String method,
125 + String url, {
126 + Object? data,
127 + Map<String, dynamic>? queryParameters,
128 + CancelToken? cancelToken,
129 + Options? options,
130 + }) async {
131 + final Response<String> response = await _dio.request<String>(
132 + url,
133 + data: data,
134 + queryParameters: queryParameters,
135 + options: _checkOptions(method, options),
136 + cancelToken: cancelToken,
137 + );
138 + try {
139 + final String data = response.data.toString();
140 + final bool isCompute = !Constant.isDriverTest && data.length > 10 * 1024;
141 + final Map<String, dynamic> _map =
142 + isCompute ? await compute(parseData, data) : parseData(data);
143 + return BaseEntity<T>.fromJson(_map);
144 + } catch (e) {
145 + debugPrint(e.toString());
146 + return BaseEntity<T>(ExceptionHandle.parse_error, '数据解析错误!', null);
147 + }
148 + }
149 +
123 Future requestNetwork<T>( 150 Future requestNetwork<T>(
124 Method method, 151 Method method,
125 String url, { 152 String url, {
......
...@@ -3,6 +3,7 @@ class HttpApi { ...@@ -3,6 +3,7 @@ class HttpApi {
3 static const String register = 'register'; 3 static const String register = 'register';
4 static const String verify = 'verify'; 4 static const String verify = 'verify';
5 static const String login = 'login'; 5 static const String login = 'login';
6 + static const String user = 'user';
6 static const String search = 'search/repositories'; 7 static const String search = 'search/repositories';
7 static const String subscriptions = 'users/simplezhli/subscriptions'; 8 static const String subscriptions = 'users/simplezhli/subscriptions';
8 static const String upload = 'uuc/upload-inco'; 9 static const String upload = 'uuc/upload-inco';
......
...@@ -14,12 +14,11 @@ import 'error_handle.dart'; ...@@ -14,12 +14,11 @@ import 'error_handle.dart';
14 class AuthInterceptor extends Interceptor { 14 class AuthInterceptor extends Interceptor {
15 @override 15 @override
16 void onRequest(RequestOptions options, RequestInterceptorHandler handler) { 16 void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
17 - final String accessToken = SpUtil.getString(Constant.accessToken).nullSafe; 17 + final String accessToken = SpUtil.getString(Constant.userToken).nullSafe;
18 if (accessToken.isNotEmpty) { 18 if (accessToken.isNotEmpty) {
19 - options.headers['Authorization'] = 'token $accessToken'; 19 + options.headers['Authorization'] = 'Bearer $accessToken';
20 } 20 }
21 if (!Device.isWeb) { 21 if (!Device.isWeb) {
22 - // https://developer.github.com/v3/#user-agent-required
23 options.headers['User-Agent'] = 'Mozilla/5.0'; 22 options.headers['User-Agent'] = 'Mozilla/5.0';
24 } 23 }
25 super.onRequest(options, handler); 24 super.onRequest(options, handler);
......
...@@ -1423,5 +1423,5 @@ packages: ...@@ -1423,5 +1423,5 @@ packages:
1423 source: hosted 1423 source: hosted
1424 version: "3.1.0" 1424 version: "3.1.0"
1425 sdks: 1425 sdks:
1426 - dart: ">=2.16.0 <3.0.0" 1426 + dart: ">=2.16.2 <3.0.0"
1427 flutter: ">=2.10.0" 1427 flutter: ">=2.10.0"
......
...@@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev ...@@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
18 version: 1.0.0+1 18 version: 1.0.0+1
19 19
20 environment: 20 environment:
21 - sdk: ">=2.14.0 <3.0.0" 21 + sdk: ">=2.16.2 <3.0.0"
22 flutter: ">=2.5.0" 22 flutter: ">=2.5.0"
23 23
24 # Dependencies specify other packages that your package needs in poem to work. 24 # Dependencies specify other packages that your package needs in poem to work.
......