Skip to content

Commit b1f5e37

Browse files
committed
ViewState强化
区分网络异常和其他异常,页面区分显示
1 parent 8d9f4a6 commit b1f5e37

29 files changed

+241
-128
lines changed

android/app/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ android {
4444
versionCode flutterVersionCode.toInteger()
4545
versionName flutterVersionName
4646
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
47-
// archivesBaseName = "FunAndroid${flutterVersionName}"
4847
}
4948
signingConfigs {
5049
release {

android/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ buildscript {
55
}
66

77
dependencies {
8-
classpath 'com.android.tools.build:gradle:3.2.1'
8+
//classpath 'com.android.tools.build:gradle:3.2.1'
9+
classpath 'com.android.tools.build:gradle:3.5.1'
910
}
1011
}
1112

android/gradle/wrapper/gradle-wrapper.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
7+
#distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

assets/fonts/iconfont.ttf

-2.15 KB
Binary file not shown.

lib/config/resource_mananger.dart

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ class ImageHelper {
2121

2222
static Widget placeHolder({double width, double height}) {
2323
return SizedBox(
24-
width: width, height: height, child: CupertinoActivityIndicator(
25-
radius: min(10.0, width / 3)
26-
));
24+
width: width,
25+
height: height,
26+
child: CupertinoActivityIndicator(radius: min(10.0, width / 3)));
2727
}
2828

2929
static Widget error({double width, double height, double size}) {
@@ -38,19 +38,18 @@ class ImageHelper {
3838

3939
static String randomUrl(
4040
{int width = 100, int height = 100, Object key = ''}) {
41-
return 'http://placeimg.com/$width/$height/${key.hashCode.toString()+key.toString()}';
41+
return 'http://placeimg.com/$width/$height/${key.hashCode.toString() + key.toString()}';
4242
}
4343
}
4444

4545
class IconFonts {
4646
IconFonts._();
4747

48+
/// iconfont:flutter base
4849
static const String fontFamily = 'iconfont';
4950

5051
static const IconData pageEmpty = IconData(0xe63c, fontFamily: fontFamily);
5152
static const IconData pageError = IconData(0xe600, fontFamily: fontFamily);
52-
static const IconData pageUnAuthorized =
53-
IconData(0xe65f, fontFamily: fontFamily);
54-
static const IconData train = IconData(0xe89a, fontFamily: fontFamily);
55-
static const IconData hotel = IconData(0xe8a0, fontFamily: fontFamily);
53+
static const IconData pageNetworkError = IconData(0xe678, fontFamily: fontFamily);
54+
static const IconData pageUnAuth = IconData(0xe65f, fontFamily: fontFamily);
5655
}

lib/generated/i18n.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,12 @@ class S implements WidgetsLocalizations {
8282
String get twoPwdDifferent => "The two passwords differ";
8383
String get unLike => "UnLike";
8484
String get userName => "Username";
85-
String get viewStateButtonError => "Load Failed";
8685
String get viewStateButtonLogin => "Sign In";
8786
String get viewStateButtonRefresh => "Refresh";
8887
String get viewStateButtonRetry => "Retry";
8988
String get viewStateMessageEmpty => "Nothing Found";
89+
String get viewStateMessageError => "Load Failed";
90+
String get viewStateMessageNetworkError => "Load Failed,Check network ";
9091
String get viewStateMessageUnAuth => "Not sign in yet";
9192
String get wechatAccount => "Wechat";
9293
String appUpdateFoundNewVersion(String version) => "New version $version";
@@ -139,6 +140,8 @@ class $zh_CN extends S {
139140
@override
140141
String get Like => "收藏";
141142
@override
143+
String get viewStateMessageNetworkError => "网络连接异常,请检查网络或稍后重试";
144+
@override
142145
String get appUpdateActionDownloadAgain => "重新下载";
143146
@override
144147
String get autoBySystem => "跟随系统";
@@ -159,8 +162,6 @@ class $zh_CN extends S {
159162
@override
160163
String get noAccount => "还没账号? ";
161164
@override
162-
String get viewStateButtonError => "加载失败";
163-
@override
164165
String get openBrowser => "浏览器打开";
165166
@override
166167
String get appUpdateActionUpdate => "更新";
@@ -183,6 +184,8 @@ class $zh_CN extends S {
183184
@override
184185
String get signIn3thd => "第三方登录";
185186
@override
187+
String get viewStateMessageError => "加载失败";
188+
@override
186189
String get rate => "评分";
187190
@override
188191
String get actionCancel => "取消";

lib/provider/view_state.dart

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,53 @@
1-
enum ViewState { idle, busy, empty, error, unAuthorized }
1+
import 'package:fun_android/config/net/api.dart';
2+
import 'package:fun_android/provider/view_state_model.dart';
3+
4+
/// 页面状态类型
5+
enum ViewState {
6+
idle,
7+
busy, //加载中
8+
empty, //无数据
9+
error, //加载失败
10+
unAuthorized, //未登录
11+
}
12+
13+
/// 错误类型
14+
enum ErrorType {
15+
defaultError,
16+
networkError,
17+
}
18+
19+
class ViewStateError {
20+
ErrorType _type = ErrorType.defaultError;
21+
String _message;
22+
String _errorMessage;
23+
24+
ViewStateError(e, {String message, StackTrace stackTrace}) {
25+
// if(e is String){
26+
// _errorMessage = e;
27+
// } else if (e is Error) {//错误类型
28+
// _errorMessage = e.toString();
29+
// } else { //exception
30+
// _errorMessage = e.message;
31+
// }
32+
printErrorStack(e, stackTrace);
33+
_errorMessage = e.toString();
34+
_message = message;
35+
if (e is DioError) {
36+
_type = ErrorType.networkError;
37+
}
38+
}
39+
40+
ErrorType get errorType => _type;
41+
42+
String get message => _message ?? _errorMessage;
43+
44+
String get errorMessage => _errorMessage;
45+
46+
@override
47+
String toString() {
48+
return 'ViewStateError{_errorType: $_type, _message: $_message, _errorMessage: $_errorMessage}';
49+
}
50+
}
251

352
//enum ConnectivityStatus { WiFi, Cellular, Offline }
453

lib/provider/view_state_list_model.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ abstract class ViewStateListModel<T> extends ViewStateModel {
2424
setIdle();
2525
}
2626
} catch (e, s) {
27-
handleException(e, s);
27+
setError(e,stackTrace: s);
2828
}
2929
}
3030

lib/provider/view_state_model.dart

Lines changed: 30 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:dio/dio.dart';
21
import 'package:flutter/material.dart';
32

43
import 'view_state.dart';
@@ -20,14 +19,16 @@ class ViewStateModel with ChangeNotifier {
2019
ViewState get viewState => _viewState;
2120

2221
set viewState(ViewState viewState) {
22+
_viewStateError = null;
2323
_viewState = viewState;
2424
notifyListeners();
2525
}
2626

27-
/// 出错时的message
28-
String _errorMessage;
27+
ViewStateError _viewStateError;
2928

30-
String get errorMessage => _errorMessage;
29+
ViewStateError get viewStateError => _viewStateError;
30+
31+
String get errorMessage => _viewStateError?.message;
3132

3233
/// 以下变量是为了代码书写方便,加入的变量.严格意义上讲,并不严谨
3334
@@ -42,49 +43,35 @@ class ViewStateModel with ChangeNotifier {
4243
bool get unAuthorized => viewState == ViewState.unAuthorized;
4344

4445
void setIdle() {
45-
_errorMessage = null;
4646
viewState = ViewState.idle;
4747
}
4848

4949
void setBusy() {
50-
_errorMessage = null;
5150
viewState = ViewState.busy;
5251
}
5352

5453
void setEmpty() {
55-
_errorMessage = null;
5654
viewState = ViewState.empty;
5755
}
5856

57+
void setUnAuthorized() {
58+
viewState = ViewState.unAuthorized;
59+
onUnAuthorizedException();
60+
}
61+
5962
/// [e]分类Error和Exception两种
6063
void setError(e, {String message, StackTrace stackTrace}) {
61-
if (e is String) {
62-
_errorMessage = e;
63-
} else {
64-
debugPrint('''
65-
<-----↓↓↓↓↓↓↓↓↓↓-----error-----↓↓↓↓↓↓↓↓↓↓----->
66-
$e
67-
<-----↑↑↑↑↑↑↑↑↑↑-----error-----↑↑↑↑↑↑↑↑↑↑----->
68-
''');
69-
70-
debugPrint('''
71-
<-----↓↓↓↓↓↓↓↓↓↓-----trace-----↓↓↓↓↓↓↓↓↓↓----->
72-
$stackTrace
73-
<-----↑↑↑↑↑↑↑↑↑↑-----trace-----↑↑↑↑↑↑↑↑↑↑----->
74-
''');
75-
_errorMessage = message ?? (e is Error ? e.toString() : e.message);
76-
}
7764
viewState = ViewState.error;
65+
_viewStateError =
66+
ViewStateError(e, message: message, stackTrace: stackTrace);
7867
}
7968

80-
void setUnAuthorized() {
81-
_errorMessage = null;
82-
viewState = ViewState.unAuthorized;
83-
}
69+
/// 未授权的回调
70+
void onUnAuthorizedException() {}
8471

8572
@override
8673
String toString() {
87-
return 'BaseModel{_viewState: $viewState, _errorMessage: $_errorMessage}';
74+
return 'BaseModel{_viewState: $viewState, _viewStateError: $_viewStateError}';
8875
}
8976

9077
@override
@@ -99,18 +86,20 @@ $stackTrace
9986
_disposed = true;
10087
super.dispose();
10188
}
89+
}
10290

103-
/// Handle Error and Exception
104-
///
105-
/// 统一处理子类的异常情况
106-
/// [e],有可能是Error,也有可能是Exception.所以需要判断处理
107-
/// [s] 为堆栈信息
108-
void handleException(e, s) {
109-
// DioError的判断,理论不应该拿进来,增强了代码耦合性,抽取为时组件时.应移除
110-
if (e is DioError && e.error is UnAuthorizedException) {
111-
setUnAuthorized();
112-
} else {
113-
setError(e, stackTrace: s);
114-
}
115-
}
91+
/// [e]为错误类型 :可能为 Error , Exception ,String
92+
/// [s]为堆栈信息
93+
printErrorStack(e, s) {
94+
debugPrint('''
95+
<-----↓↓↓↓↓↓↓↓↓↓-----error-----↓↓↓↓↓↓↓↓↓↓----->
96+
$e
97+
<-----↑↑↑↑↑↑↑↑↑↑-----error-----↑↑↑↑↑↑↑↑↑↑----->
98+
''');
99+
100+
debugPrint('''
101+
<-----↓↓↓↓↓↓↓↓↓↓-----trace-----↓↓↓↓↓↓↓↓↓↓----->
102+
$s
103+
<-----↑↑↑↑↑↑↑↑↑↑-----trace-----↑↑↑↑↑↑↑↑↑↑----->
104+
''');
116105
}

lib/provider/view_state_refresh_list_model.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ abstract class ViewStateRefreshListModel<T> extends ViewStateListModel<T> {
4343
}
4444
return data;
4545
} catch (e, s) {
46-
handleException(e, s);
46+
setError(e,stackTrace: s);
4747
return null;
4848
}
4949
}

0 commit comments

Comments
 (0)