1- import 'package:dio/dio.dart' ;
21import 'package:flutter/material.dart' ;
32
43import '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}
0 commit comments