Skip to content

Commit ad36b6e

Browse files
committed
fix 用户动态错位与缓存问题
1 parent 0821720 commit ad36b6e

File tree

5 files changed

+74
-62
lines changed

5 files changed

+74
-62
lines changed

lib/common/ab/provider/event/UserEventDbProvider.dart

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,29 +52,39 @@ class UserEventDbProvider extends BaseDbProvider {
5252
return name;
5353
}
5454

55+
Future _getProvider(Database db, String userName) async {
56+
List<Map> maps = await db.query(name, columns: [columnId, columnData, columnUserName], where: "$columnUserName = ?", whereArgs: [userName]);
57+
if (maps.length > 0) {
58+
UserEventDbProvider provider = UserEventDbProvider.fromMap(maps.first);
59+
return provider;
60+
}
61+
return null;
62+
}
63+
5564
///插入到数据库
5665
Future insert(String userName, String eventMapString) async {
5766
Database db = await getDataBase();
58-
59-
///清空后再插入,因为只保存第一页面
60-
db.execute("delete from $name");
67+
var provider = await _getProvider(db, userName);
68+
if (provider != null) {
69+
await db.delete(name, where: "$columnUserName = ?", whereArgs: [userName]);
70+
}
6171
return await db.insert(name, toMap(userName, eventMapString));
6272
}
6373

6474
///获取事件数据
65-
Future<List<Event>> getEvents() async {
75+
Future<List<Event>> getEvents(userName) async {
6676
Database db = await getDataBase();
67-
List<Map> maps = await db.query(name, columns: [columnId, columnData]);
68-
List<Event> list = new List();
69-
if (maps.length > 0) {
70-
UserEventDbProvider provider = UserEventDbProvider.fromMap(maps.first);
77+
var provider = await _getProvider(db, userName);
78+
if (provider != null) {
79+
List<Event> list = new List();
7180
List<dynamic> eventMap = json.decode(provider.data);
7281
if (eventMap.length > 0) {
7382
for (var item in eventMap) {
7483
list.add(Event.fromJson(item));
7584
}
7685
}
86+
return list;
7787
}
78-
return list;
88+
return null;
7989
}
8090
}

lib/common/dao/EventDao.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class EventDao {
6363
List<Event> list = new List();
6464
var data = res.data;
6565
if (data == null || data.length == 0) {
66-
return null;
66+
return new DataResult(list, true);
6767
}
6868
if(needDb) {
6969
provider.insert(userName, json.encode(data));
@@ -77,8 +77,8 @@ class EventDao {
7777
}
7878
}
7979
if(needDb) {
80-
List<Event> dbList = await provider.getEvents();
81-
if(dbList == null && dbList.length == 0) {
80+
List<Event> dbList = await provider.getEvents(userName);
81+
if(dbList == null || dbList.length == 0) {
8282
return await next();
8383
}
8484
DataResult dataResult = new DataResult(dbList, true, next: next());

lib/page/MyPage.dart

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'package:gsy_github_app_flutter/common/redux/UserRedux.dart';
1212
import 'package:gsy_github_app_flutter/common/style/GSYStyle.dart';
1313
import 'package:gsy_github_app_flutter/common/utils/EventUtils.dart';
1414
import 'package:gsy_github_app_flutter/common/utils/NavigatorUtils.dart';
15+
import 'package:gsy_github_app_flutter/widget/BasePersonState.dart';
1516
import 'package:gsy_github_app_flutter/widget/EventItem.dart';
1617
import 'package:gsy_github_app_flutter/widget/GSYListState.dart';
1718
import 'package:gsy_github_app_flutter/widget/GSYPullLoadWidget.dart';
@@ -30,38 +31,13 @@ class MyPage extends StatefulWidget {
3031
}
3132

3233
// ignore: mixin_inherits_from_not_object
33-
class _MyPageState extends GSYListState<MyPage> {
34+
class _MyPageState extends BasePersonState<MyPage> {
3435
String beStaredCount = '---';
3536

3637
Color notifyColor = const Color(GSYColors.subTextColor);
3738

3839
final List<UserOrg> orgList = new List();
3940

40-
_renderEventItem(Store<GSYState> store, userInfo, index) {
41-
if (index == 0) {
42-
return new UserHeaderItem(
43-
userInfo,
44-
beStaredCount,
45-
store.state.themeData.primaryColor,
46-
notifyColor: notifyColor,
47-
refreshCallBack: () {
48-
_refreshNotify();
49-
},
50-
orgList: orgList,
51-
);
52-
}
53-
54-
if (getUserType() == "Organization") {
55-
return new UserItem(UserItemViewModel.fromMap(pullLoadWidgetControl.dataList[index - 1]), onPressed: () {
56-
NavigatorUtils.goPerson(context, UserItemViewModel.fromMap(pullLoadWidgetControl.dataList[index - 1]).userName);
57-
});
58-
} else {
59-
Event event = pullLoadWidgetControl.dataList[index - 1];
60-
return new EventItem(EventViewModel.fromEventMap(event), onPressed: () {
61-
EventUtils.ActionUtils(context, event, "");
62-
});
63-
}
64-
}
6541

6642
Store<GSYState> _getStore() {
6743
return StoreProvider.of(context);
@@ -182,7 +158,9 @@ class _MyPageState extends GSYListState<MyPage> {
182158
builder: (context, store) {
183159
return GSYPullLoadWidget(
184160
pullLoadWidgetControl,
185-
(BuildContext context, int index) => _renderEventItem(store, store.state.userInfo, index),
161+
(BuildContext context, int index) => renderItem(index, store.state.userInfo, beStaredCount, notifyColor, () {
162+
_refreshNotify();
163+
}, orgList),
186164
handleRefresh,
187165
onLoadMore,
188166
refreshKey: refreshIndicatorKey,

lib/page/PersonPage.dart

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'package:gsy_github_app_flutter/common/style/GSYStyle.dart';
1212
import 'package:gsy_github_app_flutter/common/utils/CommonUtils.dart';
1313
import 'package:gsy_github_app_flutter/common/utils/EventUtils.dart';
1414
import 'package:gsy_github_app_flutter/common/utils/NavigatorUtils.dart';
15+
import 'package:gsy_github_app_flutter/widget/BasePersonState.dart';
1516
import 'package:gsy_github_app_flutter/widget/EventItem.dart';
1617
import 'package:gsy_github_app_flutter/widget/GSYCommonOptionWidget.dart';
1718
import 'package:gsy_github_app_flutter/widget/GSYListState.dart';
@@ -36,7 +37,7 @@ class PersonPage extends StatefulWidget {
3637
_PersonState createState() => _PersonState(userName);
3738
}
3839

39-
class _PersonState extends GSYListState<PersonPage> {
40+
class _PersonState extends BasePersonState<PersonPage> {
4041
final String userName;
4142

4243
String beStaredCount = "---";
@@ -69,12 +70,6 @@ class _PersonState extends GSYListState<PersonPage> {
6970
}
7071
isLoading = true;
7172
page = 1;
72-
73-
///从Dao中获取数据
74-
///如果第一次返回的是网络数据,next为空
75-
///如果返回的是数据库数据,next不为空
76-
///这样数据库返回数据较快,马上显示
77-
///next异步再请求后,再更新
7873
var userResult = await UserDao.getUserInfo(userName, needDb: true);
7974
if (userResult != null && userResult.result) {
8075
_resolveUserInfo(userResult);
@@ -118,21 +113,6 @@ class _PersonState extends GSYListState<PersonPage> {
118113
}
119114
}
120115

121-
_renderEventItem(index) {
122-
if (index == 0) {
123-
return new UserHeaderItem(userInfo, beStaredCount, Theme.of(context).primaryColor, orgList: orgList);
124-
}
125-
if (userInfo.type == "Organization") {
126-
return new UserItem(UserItemViewModel.fromMap(pullLoadWidgetControl.dataList[index - 1]), onPressed: () {
127-
NavigatorUtils.goPerson(context, UserItemViewModel.fromMap(pullLoadWidgetControl.dataList[index - 1]).userName);
128-
});
129-
} else {
130-
Event event = pullLoadWidgetControl.dataList[index - 1];
131-
return new EventItem(EventViewModel.fromEventMap(event), onPressed: () {
132-
EventUtils.ActionUtils(context, event, "");
133-
});
134-
}
135-
}
136116

137117
_getUserName() {
138118
if (userInfo == null) {
@@ -214,7 +194,7 @@ class _PersonState extends GSYListState<PersonPage> {
214194
}),
215195
body: GSYPullLoadWidget(
216196
pullLoadWidgetControl,
217-
(BuildContext context, int index) => _renderEventItem(index),
197+
(BuildContext context, int index) => renderItem(index, userInfo, beStaredCount, null, null, orgList),
218198
handleRefresh,
219199
onLoadMore,
220200
refreshKey: refreshIndicatorKey,

lib/widget/BasePersonState.dart

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:gsy_github_app_flutter/common/model/Event.dart';
3+
import 'package:gsy_github_app_flutter/common/model/User.dart';
4+
import 'package:gsy_github_app_flutter/common/model/UserOrg.dart';
5+
import 'package:gsy_github_app_flutter/common/utils/EventUtils.dart';
6+
import 'package:gsy_github_app_flutter/common/utils/NavigatorUtils.dart';
7+
import 'package:gsy_github_app_flutter/widget/EventItem.dart';
8+
import 'package:gsy_github_app_flutter/widget/GSYListState.dart';
9+
import 'package:gsy_github_app_flutter/widget/UserHeader.dart';
10+
import 'package:gsy_github_app_flutter/widget/UserItem.dart';
11+
12+
/**
13+
* Created by guoshuyu
14+
* Date: 2018-08-30
15+
*/
16+
17+
abstract class BasePersonState<T extends StatefulWidget> extends GSYListState<T> {
18+
19+
renderItem(index, User userInfo, String beStaredCount, Color notifyColor, VoidCallback refreshCallBack, List<UserOrg> orgList) {
20+
if (index == 0) {
21+
return new UserHeaderItem(userInfo, beStaredCount, Theme.of(context).primaryColor,
22+
notifyColor: notifyColor, refreshCallBack: refreshCallBack, orgList: orgList);
23+
}
24+
if (userInfo.type == "Organization") {
25+
return new UserItem(UserItemViewModel.fromMap(pullLoadWidgetControl.dataList[index - 1]), onPressed: () {
26+
NavigatorUtils.goPerson(context, UserItemViewModel.fromMap(pullLoadWidgetControl.dataList[index - 1]).userName);
27+
});
28+
} else {
29+
Event event = pullLoadWidgetControl.dataList[index - 1];
30+
return new EventItem(EventViewModel.fromEventMap(event), onPressed: () {
31+
EventUtils.ActionUtils(context, event, "");
32+
});
33+
}
34+
}
35+
36+
@override
37+
bool get wantKeepAlive => true;
38+
39+
@override
40+
bool get isRefreshFirst => true;
41+
42+
@override
43+
bool get needHeader => true;
44+
}

0 commit comments

Comments
 (0)