Skip to content

Commit b885e0e

Browse files
committed
trend store
1 parent 5b9fc26 commit b885e0e

File tree

8 files changed

+133
-60
lines changed

8 files changed

+133
-60
lines changed

ios/Podfile.lock

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ PODS:
55
- device_info (0.0.1):
66
- Flutter
77
- Flutter (1.0.0)
8+
- flutter_statusbar (0.0.1):
9+
- Flutter
810
- flutter_webview_plugin (0.0.1):
911
- Flutter
1012
- fluttertoast (0.0.2):
@@ -31,6 +33,7 @@ DEPENDENCIES:
3133
- connectivity (from `.symlinks/plugins/connectivity/ios`)
3234
- device_info (from `.symlinks/plugins/device_info/ios`)
3335
- Flutter (from `.symlinks/flutter/ios`)
36+
- flutter_statusbar (from `.symlinks/plugins/flutter_statusbar/ios`)
3437
- flutter_webview_plugin (from `.symlinks/plugins/flutter_webview_plugin/ios`)
3538
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
3639
- get_version (from `.symlinks/plugins/get_version/ios`)
@@ -52,6 +55,8 @@ EXTERNAL SOURCES:
5255
:path: ".symlinks/plugins/device_info/ios"
5356
Flutter:
5457
:path: ".symlinks/flutter/ios"
58+
flutter_statusbar:
59+
:path: ".symlinks/plugins/flutter_statusbar/ios"
5560
flutter_webview_plugin:
5661
:path: ".symlinks/plugins/flutter_webview_plugin/ios"
5762
fluttertoast:
@@ -73,6 +78,7 @@ SPEC CHECKSUMS:
7378
connectivity: d5992e3758d68b1c4b12d6e012fe0813f1aa1645
7479
device_info: 76ce0b32e13034d1883be4a382433648f9dcee63
7580
Flutter: 9d0fac939486c9aba2809b7982dfdbb47a7b0296
81+
flutter_statusbar: a563eb9416256f17660646aceb2314b113127da9
7682
flutter_webview_plugin: 116575b48572029304775b768e9f15ebfc316274
7783
fluttertoast: ad0527b15297baf11349f3f581dae4d40f24f340
7884
FMDB: 6198a90e7b6900cfc046e6bc0ef6ebb7be9236aa

ios/Runner.xcodeproj/project.pbxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@
231231
"${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework",
232232
"${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework",
233233
"${BUILT_PRODUCTS_DIR}/device_info/device_info.framework",
234+
"${BUILT_PRODUCTS_DIR}/flutter_statusbar/flutter_statusbar.framework",
234235
"${BUILT_PRODUCTS_DIR}/flutter_webview_plugin/flutter_webview_plugin.framework",
235236
"${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework",
236237
"${BUILT_PRODUCTS_DIR}/get_version/get_version.framework",
@@ -247,6 +248,7 @@
247248
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework",
248249
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework",
249250
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info.framework",
251+
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_statusbar.framework",
250252
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_webview_plugin.framework",
251253
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework",
252254
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/get_version.framework",

lib/common/dao/ReposDao.dart

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,11 @@ import 'package:gsy_github_app_flutter/common/model/User.dart';
2929
import 'package:gsy_github_app_flutter/common/net/Address.dart';
3030
import 'package:gsy_github_app_flutter/common/net/Api.dart';
3131
import 'package:gsy_github_app_flutter/common/net/trending/GithubTrending.dart';
32+
import 'package:gsy_github_app_flutter/common/redux/TrendRedux.dart';
3233
import 'package:gsy_github_app_flutter/common/style/GSYStyle.dart';
3334
import 'package:gsy_github_app_flutter/common/utils/CommonUtils.dart';
3435
import 'package:pub_semver/pub_semver.dart';
36+
import 'package:redux/redux.dart';
3537

3638
/**
3739
* Created by guoshuyu
@@ -45,41 +47,33 @@ class ReposDao {
4547
* @param since 数据时长, 本日,本周,本月
4648
* @param languageType 语言
4749
*/
48-
static getTrendDao({since = 'daily', languageType, page = 0, needDb = true}) async {
50+
static getTrendDao(Store store, {since = 'daily', languageType, page = 0, needDb = true}) async {
4951
TrendRepositoryDbProvider provider = new TrendRepositoryDbProvider();
5052
String languageTypeDb = languageType ?? "*";
51-
await provider.getData(languageTypeDb, since);
52-
next() async {
53-
String url = Address.trending(since, languageType);
54-
var res = await new GitHubTrending().fetchTrending(url);
55-
if (res != null && res.result && res.data.length > 0) {
56-
List<TrendingRepoModel> list = new List();
57-
var data = res.data;
58-
if (data == null || data.length == 0) {
59-
return new DataResult(null, false);
60-
}
61-
if (needDb) {
62-
provider.insert(languageTypeDb, since, json.encode(data));
63-
}
64-
for (int i = 0; i < data.length; i++) {
65-
TrendingRepoModel model = data[i];
66-
list.add(model);
67-
}
68-
return new DataResult(list, true);
69-
} else {
53+
List<TrendingRepoModel> list = await provider.getData(languageTypeDb, since);
54+
if (list != null && list.length > 0) {
55+
store.dispatch(new RefreshTrendAction(list));
56+
}
57+
String url = Address.trending(since, languageType);
58+
var res = await new GitHubTrending().fetchTrending(url);
59+
if (res != null && res.result && res.data.length > 0) {
60+
List<TrendingRepoModel> list = new List();
61+
var data = res.data;
62+
if (data == null || data.length == 0) {
7063
return new DataResult(null, false);
7164
}
72-
}
73-
74-
if (needDb) {
75-
List<TrendingRepoModel> list = await provider.getData(languageTypeDb, since);
76-
if (list == null) {
77-
return await next();
65+
if (needDb) {
66+
provider.insert(languageTypeDb, since, json.encode(data));
7867
}
79-
DataResult dataResult = new DataResult(list, true, next: next());
80-
return dataResult;
68+
for (int i = 0; i < data.length; i++) {
69+
TrendingRepoModel model = data[i];
70+
list.add(model);
71+
}
72+
store.dispatch(new RefreshTrendAction(list));
73+
return new DataResult(list, true);
74+
} else {
75+
return new DataResult(null, false);
8176
}
82-
return await next();
8377
}
8478

8579
/**

lib/common/redux/GSYState.dart

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,41 @@
11
import 'package:gsy_github_app_flutter/common/model/Event.dart';
2+
import 'package:gsy_github_app_flutter/common/model/TrendingRepoModel.dart';
23
import 'package:gsy_github_app_flutter/common/model/User.dart';
34
import 'package:gsy_github_app_flutter/common/redux/UserRedux.dart';
45
import 'package:gsy_github_app_flutter/common/redux/EventRedux.dart';
6+
import 'package:gsy_github_app_flutter/common/redux/TrendRedux.dart';
57

68
/**
79
* Redux全局State
810
* Created by guoshuyu
911
* Date: 2018-07-16
1012
*/
13+
1114
///全局Redux store 的对象,保存State数据
1215
class GSYState {
1316
///用户信息
1417
User userInfo;
18+
1519
///用户接受到的事件列表
1620
List<Event> eventList = new List();
17-
///构造方法
18-
GSYState({this.userInfo, this.eventList});
1921

22+
///用户接受到的事件列表
23+
List<TrendingRepoModel> trendList = new List();
24+
25+
///构造方法
26+
GSYState({this.userInfo, this.eventList, this.trendList});
2027
}
2128

2229
///通过 Reducer 创建 store 保存的 GSYState
2330
GSYState appReducer(GSYState state, action) {
2431
return GSYState(
2532
///通过 UserReducer 将 GSYState 内的 userInfo 和 action 关联在一起
2633
userInfo: UserReducer(state.userInfo, action),
34+
2735
///通过 EventReducer 将 GSYState 内的 eventList 和 action 关联在一起
2836
eventList: EventReducer(state.eventList, action),
37+
38+
///通过 TrendReducer 将 GSYState 内的 trendList 和 action 关联在一起
39+
trendList: TrendReducer(state.trendList, action),
2940
);
3041
}
31-

lib/common/redux/TrendRedux.dart

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import 'package:gsy_github_app_flutter/common/model/TrendingRepoModel.dart';
2+
import 'package:redux/redux.dart';
3+
4+
/**
5+
* 事件Redux
6+
* Created by guoshuyu
7+
* Date: 2018-07-16
8+
*/
9+
10+
final TrendReducer = combineReducers<List<TrendingRepoModel>>([
11+
TypedReducer<List<TrendingRepoModel>, RefreshTrendAction>(_refresh),
12+
]);
13+
14+
List<TrendingRepoModel> _refresh(List<TrendingRepoModel> list, action) {
15+
list.clear();
16+
if (action.list == null) {
17+
return list;
18+
} else {
19+
list.addAll(action.list);
20+
return list;
21+
}
22+
}
23+
24+
class RefreshTrendAction {
25+
final List<TrendingRepoModel> list;
26+
27+
RefreshTrendAction(this.list);
28+
}

lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class FlutterReduxApp extends StatelessWidget {
1919

2020
/// 创建Store,引用 GSYState 中的 appReducer 创建 Reducer
2121
/// initialState 初始化 State
22-
final store = new Store<GSYState>(appReducer, initialState: new GSYState(userInfo: User.empty(), eventList: new List()));
22+
final store = new Store<GSYState>(appReducer, initialState: new GSYState(userInfo: User.empty(), eventList: new List(), trendList: new List()));
2323

2424
FlutterReduxApp({Key key}) : super(key: key);
2525

lib/page/TrendPage.dart

Lines changed: 58 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1+
import 'dart:async';
2+
13
import 'package:flutter/material.dart';
4+
import 'package:flutter_redux/flutter_redux.dart';
25
import 'package:gsy_github_app_flutter/common/dao/ReposDao.dart';
6+
import 'package:gsy_github_app_flutter/common/redux/GSYState.dart';
37
import 'package:gsy_github_app_flutter/common/style/GSYStyle.dart';
48
import 'package:gsy_github_app_flutter/common/utils/NavigatorUtils.dart';
59
import 'package:gsy_github_app_flutter/widget/GSYCardItem.dart';
610
import 'package:gsy_github_app_flutter/widget/GSYListState.dart';
711
import 'package:gsy_github_app_flutter/widget/GSYPullLoadWidget.dart';
812
import 'package:gsy_github_app_flutter/widget/ReposItem.dart';
13+
import 'package:redux/redux.dart';
914

1015
/**
1116
* 主页趋势tab页
@@ -18,8 +23,8 @@ class TrendPage extends StatefulWidget {
1823
}
1924

2025
class _TrendPageState extends GSYListState<TrendPage> {
21-
TrendTypeModel selectTime = TrendTime[0];
22-
TrendTypeModel selectType = TrendType[0];
26+
TrendTypeModel selectTime = trendTime[0];
27+
TrendTypeModel selectType = trendType[0];
2328

2429
_renderItem(e) {
2530
ReposViewModel reposViewModel = ReposViewModel.fromTrendMap(e);
@@ -39,14 +44,14 @@ class _TrendPageState extends GSYListState<TrendPage> {
3944
padding: new EdgeInsets.only(left: 0.0, top: 5.0, right: 0.0, bottom: 5.0),
4045
child: new Row(
4146
children: <Widget>[
42-
_renderHeaderPopItem(selectTime.name, TrendTime, (TrendTypeModel result) {
47+
_renderHeaderPopItem(selectTime.name, trendTime, (TrendTypeModel result) {
4348
setState(() {
4449
selectTime = result;
4550
});
4651
showRefreshLoading();
4752
}),
4853
new Container(height: 10.0, width: 0.5, color: Colors.white),
49-
_renderHeaderPopItem(selectType.name, TrendType, (TrendTypeModel result) {
54+
_renderHeaderPopItem(selectType.name, trendType, (TrendTypeModel result) {
5055
setState(() {
5156
selectType = result;
5257
});
@@ -81,9 +86,24 @@ class _TrendPageState extends GSYListState<TrendPage> {
8186
return list;
8287
}
8388

89+
@override
90+
Future<Null> handleRefresh() async {
91+
if (isLoading) {
92+
return null;
93+
}
94+
isLoading = true;
95+
page = 1;
96+
await ReposDao.getTrendDao(_getStore(), since: selectTime.value, languageType: selectType.value);
97+
setState(() {
98+
pullLoadWidgetControl.needLoadMore = false;
99+
});
100+
isLoading = false;
101+
return null;
102+
}
103+
84104
@override
85105
requestRefresh() async {
86-
return await ReposDao.getTrendDao(since: selectTime.value, languageType: selectType.value);
106+
return null;
87107
}
88108

89109
@override
@@ -92,11 +112,15 @@ class _TrendPageState extends GSYListState<TrendPage> {
92112
}
93113

94114
@override
95-
bool get isRefreshFirst => true;
115+
bool get isRefreshFirst => false;
96116

97117
@override
98-
void initState() {
99-
super.initState();
118+
void didChangeDependencies() {
119+
pullLoadWidgetControl.dataList = _getStore().state.trendList;
120+
if (pullLoadWidgetControl.dataList.length == 0) {
121+
showRefreshLoading();
122+
}
123+
super.didChangeDependencies();
100124
}
101125

102126
@override
@@ -105,25 +129,33 @@ class _TrendPageState extends GSYListState<TrendPage> {
105129
clearData();
106130
}
107131

132+
Store<GSYState> _getStore() {
133+
return StoreProvider.of(context);
134+
}
135+
108136
@override
109137
Widget build(BuildContext context) {
110138
super.build(context); // See AutomaticKeepAliveClientMixin.
111-
return new Scaffold(
112-
backgroundColor: Color(GSYColors.mainBackgroundColor),
113-
appBar: new AppBar(
114-
flexibleSpace: _renderHeader(),
115-
backgroundColor: Color(GSYColors.mainBackgroundColor),
116-
leading: new Container(),
117-
elevation: 0.0,
118-
),
119-
body: GSYPullLoadWidget(
120-
pullLoadWidgetControl,
121-
(BuildContext context, int index) => _renderItem(pullLoadWidgetControl.dataList[index]),
122-
handleRefresh,
123-
onLoadMore,
124-
refreshKey: refreshIndicatorKey,
125-
),
126-
);
139+
return new StoreBuilder<GSYState>(
140+
builder: (context, store) {
141+
return new Scaffold(
142+
backgroundColor: Color(GSYColors.mainBackgroundColor),
143+
appBar: new AppBar(
144+
flexibleSpace: _renderHeader(),
145+
backgroundColor: Color(GSYColors.mainBackgroundColor),
146+
leading: new Container(),
147+
elevation: 0.0,
148+
),
149+
body: GSYPullLoadWidget(
150+
pullLoadWidgetControl,
151+
(BuildContext context, int index) => _renderItem(pullLoadWidgetControl.dataList[index]),
152+
handleRefresh,
153+
onLoadMore,
154+
refreshKey: refreshIndicatorKey,
155+
),
156+
);
157+
},
158+
);;
127159
}
128160
}
129161

@@ -134,13 +166,13 @@ class TrendTypeModel {
134166
TrendTypeModel(this.name, this.value);
135167
}
136168

137-
var TrendTime = [
169+
var trendTime = [
138170
TrendTypeModel(GSYStrings.trend_day, "daily"),
139171
TrendTypeModel(GSYStrings.trend_week, "weekly"),
140172
TrendTypeModel(GSYStrings.trend_month, "monthly"),
141173
];
142174

143-
var TrendType = [
175+
var trendType = [
144176
TrendTypeModel(GSYStrings.trend_all, null),
145177
TrendTypeModel("Java", "Java"),
146178
TrendTypeModel("Kotlin", "Kotlin"),

lib/widget/UserHeader.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,14 @@ class UserHeaderItem extends StatelessWidget {
8383
padding: EdgeInsets.only(left: 10.0, right: 10.0),
8484
width: width,
8585
height: height,
86+
///svg chart
8687
child: new SvgPicture.network(
8788
CommonUtils.getUserChartAddress(userInfo.login),
8889
width: width,
8990
height: height - 10,
9091
allowDrawingOutsideViewBox: true,
9192
placeholderBuilder: (BuildContext context) => new Container(
92-
height: height / 2,
93+
height: height,
9394
width: width,
9495
child: Center(
9596
child: const SpinKitRipple (color: Color(GSYColors.primaryValue)),

0 commit comments

Comments
 (0)