Skip to content

Commit bbd3bec

Browse files
committed
feat:增加登录功能,完成自动登录
1 parent 6c06de1 commit bbd3bec

File tree

17 files changed

+456
-179
lines changed

17 files changed

+456
-179
lines changed

lib/components/widgetComp.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import 'package:efox_flutter/components/markdownComp.dart' as MarkDownComp;
33
import 'package:efox_flutter/lang/index.dart' show AppLocalizations;
44
import 'package:efox_flutter/components/exampleComp.dart' as ExampleComp;
55
import 'package:efox_flutter/components/updatingComp.dart' as UpdatingComp;
6-
import 'package:efox_flutter/utils/file.dart' as FileUtils;
6+
import 'package:efox_flutter/utils/loadAsset.dart' as AssetUtils;
77
import 'package:efox_flutter/router/index.dart' show FluroRouter;
88
import 'package:efox_flutter/config/theme.dart' show AppTheme;
99
import 'package:efox_flutter/utils/share.dart' as AppShare;
1010
import 'package:efox_flutter/widget/author_list.dart' as AuthorList;
1111
import 'package:efox_flutter/store/objects/author_info.dart' show AuthorInfo;
12-
import 'package:efox_flutter/store/index.dart' show AuthorModel, ConfigModel, Provide;
12+
import 'package:efox_flutter/store/index.dart' show AuthorModel, ConfigModel, Store;
1313

1414
class Index extends StatefulWidget {
1515
final List<Widget> demoChild;
@@ -40,7 +40,7 @@ class IndexState extends State<Index> {
4040
}
4141

4242
authorTile(nameKey) {
43-
AuthorInfo info = Provide.value<AuthorModel>(context).list[nameKey];
43+
AuthorInfo info = Store.value<AuthorModel>(context).list[nameKey];
4444
return Container(
4545
child: ListTile(
4646
onTap: () {
@@ -97,6 +97,7 @@ class IndexState extends State<Index> {
9797

9898
@override
9999
Widget build(BuildContext context) {
100+
print('widgetcomp context =$context');
100101
return Scaffold(
101102
appBar: AppBar(
102103
elevation: 0,
@@ -115,12 +116,12 @@ class IndexState extends State<Index> {
115116
}
116117

117118
Future getMdFile(url) async {
118-
// bool productionEnv = Provide.value<ConfigModel>(context).isPro;
119+
// bool productionEnv = Store.value<ConfigModel>(context).isPro;
119120
bool productionEnv = false;
120121
if (productionEnv) {
121-
return await FileUtils.readRemoteFile(url);
122+
return await AssetUtils.readRemoteFile(url);
122123
} else {
123-
return await FileUtils.readLocaleFile(url);
124+
return await AssetUtils.readLocaleFile(url);
124125
}
125126
}
126127

@@ -143,7 +144,7 @@ class IndexState extends State<Index> {
143144
color: Color(AppTheme.blackColor),
144145
onPressed: () {
145146
dynamic origin =
146-
Provide.value<ConfigModel>(context).env.githubAssetOrigin;
147+
Store.value<ConfigModel>(context).env.githubAssetOrigin;
147148
AppShare.shareText(origin + widget.mdUrl);
148149
},
149150
),

lib/controller/index.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
// import 'package:efox_flutter/store/index.dart' show Store, ConfigModel, Provider;
1+
import 'package:efox_flutter/store/index.dart' show Store, ConfigModel, UserModel;
22

33
void initState() {
4-
// Store.valueNotContext<ConfigModel>().setVersion();
5-
// Provider,
4+
// 获取版本号
5+
Store.valueNotCtx<ConfigModel>().$getAppVersion();
6+
// 登录
7+
Store.valueNotCtx<UserModel>().$getUserInfo();
68
}

lib/lang/index.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import 'dart:async';
33
import 'dart:convert';
44
import 'package:efox_flutter/lang/config.dart' as I18NConfig;
55
import 'package:flutter/services.dart' show rootBundle;
6-
import 'package:efox_flutter/utils/localstage.dart' show LocalStorage;
6+
import 'package:efox_flutter/utils/localStorage.dart' show LocalStorage;
77

88
class AppLocalizations {
99
Locale _locale; // language

lib/main.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import 'package:efox_flutter/lang/index.dart'
55
import 'package:efox_flutter/lang/config.dart' show ConfigLanguage;
66
import 'package:efox_flutter/store/index.dart'
77
show Store, ConfigModel; //引用Store 层
8-
import 'package:provide/provide.dart' show Provide;
98
import 'package:efox_flutter/router/index.dart' show FluroRouter; //路由
109
import 'package:efox_flutter/config/theme.dart' show AppTheme; //主题
1110
import 'package:efox_flutter/utils/analytics.dart' as Analytics; //统计
@@ -27,16 +26,16 @@ class MainAppState extends State<MainApp> {
2726
//实例化多语言
2827
super.initState();
2928
_delegate = AppLocalizationsDelegate();
30-
print('===main ============ $context');
3129
}
3230

3331
@override
3432
Widget build(BuildContext context) {
3533
print('main view rebuild $context');
36-
Provide.value<ConfigModel>(context).getTheme();
34+
Store.value<ConfigModel>(context).$getTheme();
35+
Store.setContext(context);
3736
return Store.connect<ConfigModel>(
3837
builder: (context, child, model) {
39-
print('model===========================${model.theme}');
38+
print('store connect context =$context');
4039
return MaterialApp(
4140
localeResolutionCallback: (deviceLocale, supportedLocales) {
4241
print(

lib/page/app-login/index.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:efox_flutter/lang/index.dart' show AppLocalizations;
3-
3+
import 'package:efox_flutter/store/index.dart' show Store, UserModel;
44
class Index extends StatefulWidget {
55

66
Index({Key key}) : super(key: key);
@@ -73,8 +73,10 @@ class _IndexState extends State<Index> {
7373
onPressed: () {
7474
if ((_formKey.currentState as FormState)
7575
.validate()) {
76-
// widget.model.dispatch('user', 'login',
77-
// {'name': nameCtl.text, 'pwd': pwdCtl.text});
76+
Store.value<UserModel>(context).$login({
77+
'name': nameCtl.text,
78+
'pwd':pwdCtl.text
79+
});
7880
}
7981
},
8082
),

lib/page/home.dart

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'mine/index.dart' as MyIndex;
77
import 'app-login/index.dart' as LoginIndex;
88

99
import 'package:efox_flutter/utils/appVersion.dart' show AppVersion;
10+
import 'package:efox_flutter/store/index.dart' show Store, UserModel;
1011

1112
class Index extends StatefulWidget {
1213
@override
@@ -21,6 +22,7 @@ class _IndexState extends State<Index> {
2122
super.initState();
2223
_pageController = PageController();
2324
print('==============home context $context');
25+
Controller.initState();
2426
AppVersion().check(context);
2527
}
2628

@@ -43,14 +45,16 @@ class _IndexState extends State<Index> {
4345
type: BottomNavigationBarType.fixed,
4446
currentIndex: _currentIndex,
4547
onTap: (int index) {
46-
// TODO
47-
// Controller.initState();
4848
_pageController.jumpToPage(index);
4949
},
5050
);
5151
}
5252

53+
/**
54+
* 抽屉面板
55+
*/
5356
renderDrawer() {
57+
print('renderDrawer $context');
5458
return Drawer(
5559
child: Column(
5660
crossAxisAlignment: CrossAxisAlignment.start,
@@ -71,10 +75,14 @@ class _IndexState extends State<Index> {
7175
),
7276
),
7377
),
74-
Text(
75-
'Guest',
76-
style: TextStyle(fontWeight: FontWeight.bold),
77-
)
78+
Store.connect<UserModel>(
79+
builder: (context, child, model) {
80+
return Text(
81+
model.user.name ?? 'Guest',
82+
style: TextStyle(fontWeight: FontWeight.bold),
83+
);
84+
},
85+
),
7886
],
7987
),
8088
),
@@ -91,6 +99,20 @@ class _IndexState extends State<Index> {
9199
}));
92100
},
93101
),
102+
ListTile(
103+
leading: Icon(Icons.account_circle),
104+
title: Text(AppLocalizations.$t('common.login')),
105+
onTap: () {
106+
Store.value<UserModel>(context).$getUserInfo();
107+
},
108+
),
109+
ListTile(
110+
leading: Icon(Icons.account_circle),
111+
title: Text(AppLocalizations.$t('common.login')),
112+
onTap: () {
113+
Store.value<UserModel>(context).$checkAuthentication();
114+
},
115+
),
94116
],
95117
),
96118
),

lib/page/mine/index.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
22
import 'dart:io' show Platform;
33
import 'package:efox_flutter/lang/index.dart' show AppLocalizations;
44
import 'package:efox_flutter/config/theme.dart' show AppTheme;
5-
import 'package:efox_flutter/store/index.dart' show ConfigModel, Provide;
5+
import 'package:efox_flutter/store/index.dart' show ConfigModel, Store;
66
import 'package:efox_flutter/config/color.dart' show materialColor;
77
import 'package:efox_flutter/utils/appVersion.dart' show AppVersion;
88
import 'package:efox_flutter/components/expansionTile.dart' as Comp;
@@ -87,7 +87,7 @@ class _IndexState extends State<Index> {
8787
margin: EdgeInsets.fromLTRB(5, 5, 0, 0),
8888
child: Container(
8989
color: Color(materialColor[
90-
Provide.value<ConfigModel>(context).theme]),
90+
Store.value<ConfigModel>(context).theme]),
9191
height: 15,
9292
width: 15,
9393
),
@@ -119,7 +119,7 @@ class _IndexState extends State<Index> {
119119
child: Row(
120120
mainAxisSize: MainAxisSize.min,
121121
children: <Widget>[
122-
Text(Provide.value<ConfigModel>(context).appVersion),
122+
Text(Store.value<ConfigModel>(context).appVersion),
123123
Icon(Icons.navigate_next)
124124
],
125125
),
@@ -137,7 +137,7 @@ class _IndexState extends State<Index> {
137137
Widget Edage(name, color, context) {
138138
return GestureDetector(
139139
onTap: () {
140-
Provide.value<ConfigModel>(context).setTheme(name);
140+
Store.value<ConfigModel>(context).$setTheme(name);
141141
},
142142
child: Container(
143143
color: Color(color),

lib/store/http.dart

Lines changed: 54 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,30 @@
1-
import 'package:dio/dio.dart' show Dio, DioError, Options, InterceptorsWrapper, RequestOptions, Response;
1+
import 'package:dio/dio.dart'
2+
show
3+
Dio,
4+
DioError,
5+
Options,
6+
InterceptorsWrapper,
7+
RequestOptions,
8+
// LogInterceptor,
9+
Response;
10+
import 'package:efox_flutter/utils/localStorage.dart' show LocalStorage;
11+
12+
void _print(title, message) {
13+
if (message == null) {
14+
print('$title');
15+
} else {
16+
print('=================$title=============');
17+
print('$message');
18+
print('=================response end=============');
19+
}
20+
;
21+
}
222

323
Dio getDio([Options options]) {
424
if (options == null) {
525
options = Options(
626
headers: {
727
'context-type': 'application/json',
8-
'user-agent': 'dio',
9-
'common-header': 'xx'
1028
},
1129
);
1230
}
@@ -16,42 +34,47 @@ Dio getDio([Options options]) {
1634
dio.options.connectTimeout = 30 * 1000; //5s
1735
dio.options.receiveTimeout = 30 * 1000;
1836
dio.options.headers = options.headers;
19-
20-
dio.interceptors.add(InterceptorsWrapper(
21-
onRequest:(RequestOptions options){
22-
// Do something before request is sent
23-
return options; //continue
24-
// If you want to resolve the request with some custom data,
25-
// you can return a `Response` object or return `dio.resolve(data)`.
26-
// If you want to reject the request with a error message,
27-
// you can return a `DioError` object or return `dio.reject(errMsg)`
28-
},
29-
onResponse:(Response response) {
30-
// Do something with response data
31-
print('onResponse --- $response');
32-
return response; // continue
33-
},
34-
onError: (DioError e) {
35-
// Do something with response error
36-
print('onError --- $e');
37-
return e;//continue
38-
}
39-
));
4037

4138
// Add request interceptor
39+
dio.interceptors
40+
.add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
41+
String token = await LocalStorage.get('githubRespLoginToken') ?? '';
42+
if (options.headers['Authorization'] == null) {
43+
options.headers['Authorization'] = 'token $token';
44+
}
45+
// Do something before request is sent
46+
return options; //continue
47+
// If you want to resolve the request with some custom data,
48+
// you can return a `Response` object or return `dio.resolve(data)`.
49+
// If you want to reject the request with a error message,
50+
// you can return a `DioError` object or return `dio.reject(errMsg)`
51+
}, onResponse: (Response response) {
52+
// Do something with response data
53+
_print('http.dart response success', response);
54+
return response; // continue
55+
}, onError: (DioError e) {
56+
// Do something with response error
57+
_print('http.dart response fail',
58+
'${e.response.data} status: ${e.response.statusCode}');
59+
// return e; //continue
60+
}));
61+
// dio.interceptors.add(LogInterceptor(responseBody: false)); //开启请求日志
62+
4263
return dio;
4364
}
4465

45-
Future<dynamic> get(url, [data = const {}]) async {
66+
Future<dynamic> get({url, data = const {}}) async {
4667
try {
47-
return await getDio().get(url).then((res) {
48-
return res.data;
49-
});
68+
return getDio().get(url).then((resp) => resp.data);
5069
} on DioError catch (e) {
51-
return e.response;
70+
return {'code': e.response.statusCode, 'msg': e.response.data};
5271
}
5372
}
5473

55-
Future post(url, [data = const {}, params = const {}, options]) async {
56-
return getDio(options).post(url, data: data);
74+
Future post({url, data = const {}, options}) async {
75+
try {
76+
return getDio(options).post(url, data: data).then((resp) => resp.data);
77+
} on DioError catch (e) {
78+
return {'code': e.response.statusCode, 'msg': e.response.data};
79+
}
5780
}

0 commit comments

Comments
 (0)