Skip to content

Commit 37d705e

Browse files
committed
增加用户组织数据库
1 parent ff0e035 commit 37d705e

File tree

5 files changed

+122
-16
lines changed

5 files changed

+122
-16
lines changed

VERSION.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
###(待处理)
33

44
* 仓库Pulse。
5-
* 个人组织列表。
65
* 多语言、主题。
76
* markdown点击跳转。
87
* webview点击跳转。
@@ -12,6 +11,7 @@
1211
* readme图片解析优化
1312
* readme图片增加点击查看
1413
* 组织账号不显示活跃记录Item
14+
* 增加用户组织显示
1515

1616

1717

lib/common/ab/provider/user/UserOrgsDbProvider.dart

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1+
import 'dart:async';
2+
import 'dart:convert';
3+
14
import 'package:gsy_github_app_flutter/common/ab/SqlProvider.dart';
5+
import 'package:gsy_github_app_flutter/common/model/UserOrg.dart';
6+
import 'package:sqflite/sqflite.dart';
27

38
/**
49
* 用户组织表
@@ -17,7 +22,9 @@ class UserOrgsDbProvider extends BaseDbProvider {
1722
String userName;
1823
String data;
1924

20-
Map<String, dynamic> toMap() {
25+
UserOrgsDbProvider();
26+
27+
Map<String, dynamic> toMap(String userName, String data) {
2128
Map<String, dynamic> map = {columnUserName: userName, columnData: data};
2229
if (id != null) {
2330
map[columnId] = id;
@@ -32,10 +39,54 @@ class UserOrgsDbProvider extends BaseDbProvider {
3239
}
3340

3441
@override
35-
tableSqlString() {}
42+
tableSqlString() {
43+
return tableBaseString(name, columnId) +
44+
'''
45+
$columnUserName text not null,
46+
$columnData text not null)
47+
''';
48+
}
3649

3750
@override
3851
tableName() {
3952
return name;
4053
}
41-
}
54+
55+
Future _getProvider(Database db, String userName) async {
56+
List<Map<String, dynamic>> maps =
57+
await db.query(name, columns: [columnId, columnUserName, columnData], where: "$columnUserName = ?", whereArgs: [userName]);
58+
if (maps.length > 0) {
59+
UserOrgsDbProvider provider = UserOrgsDbProvider.fromMap(maps.first);
60+
return provider;
61+
}
62+
return null;
63+
}
64+
65+
///插入到数据库
66+
Future insert(String userName, String dataMapString) async {
67+
Database db = await getDataBase();
68+
var provider = await _getProvider(db, userName);
69+
if (provider != null) {
70+
await db.delete(name, where: "$columnUserName = ?", whereArgs: [userName]);
71+
}
72+
return await db.insert(name, toMap(userName, dataMapString));
73+
}
74+
75+
///获取数据
76+
Future<List<UserOrg>> geData(String userName) async {
77+
Database db = await getDataBase();
78+
79+
var provider = await _getProvider(db, userName);
80+
if (provider != null) {
81+
List<UserOrg> list = new List();
82+
List<dynamic> eventMap = json.decode(provider.data);
83+
if (eventMap.length > 0) {
84+
for (var item in eventMap) {
85+
list.add(UserOrg.fromJson(item));
86+
}
87+
}
88+
return list;
89+
}
90+
return null;
91+
}
92+
}

lib/common/dao/UserDao.dart

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:dio/dio.dart';
55
import 'package:gsy_github_app_flutter/common/ab/provider/user/UserFollowedDbProvider.dart';
66
import 'package:gsy_github_app_flutter/common/ab/provider/user/UserFollowerDbProvider.dart';
77
import 'package:gsy_github_app_flutter/common/ab/provider/user/UserInfoDbProvider.dart';
8+
import 'package:gsy_github_app_flutter/common/ab/provider/user/UserOrgsDbProvider.dart';
89
import 'package:gsy_github_app_flutter/common/config/Config.dart';
910
import 'package:gsy_github_app_flutter/common/config/ignoreConfig.dart';
1011
import 'package:gsy_github_app_flutter/common/dao/DaoResult.dart';
@@ -322,20 +323,36 @@ class UserDao {
322323
* 获取用户组织
323324
*/
324325
static getUserOrgsDao(userName, page, {needDb = false}) async {
325-
String url = Address.getUserOrgs(userName) + Address.getPageParams("?", page);
326-
var res = await HttpManager.netFetch(url, null, null, null);
327-
if (res != null && res.result) {
328-
List<UserOrg> list = new List();
329-
var data = res.data;
330-
if (data == null || data.length == 0) {
326+
UserOrgsDbProvider provider = new UserOrgsDbProvider();
327+
next() async {
328+
String url = Address.getUserOrgs(userName) + Address.getPageParams("?", page);
329+
var res = await HttpManager.netFetch(url, null, null, null);
330+
if (res != null && res.result) {
331+
List<UserOrg> list = new List();
332+
var data = res.data;
333+
if (data == null || data.length == 0) {
334+
return new DataResult(null, false);
335+
}
336+
for (int i = 0; i < data.length; i++) {
337+
list.add(new UserOrg.fromJson(data[i]));
338+
}
339+
if (needDb) {
340+
provider.insert(userName, json.encode(data));
341+
}
342+
return new DataResult(list, true);
343+
} else {
331344
return new DataResult(null, false);
332345
}
333-
for (int i = 0; i < data.length; i++) {
334-
list.add(new UserOrg.fromJson(data[i]));
346+
}
347+
348+
if (needDb) {
349+
List<UserOrg> list = await provider.geData(userName);
350+
if (list == null) {
351+
return await next();
335352
}
336-
return new DataResult(list, true);
337-
} else {
338-
return new DataResult(null, false);
353+
DataResult dataResult = new DataResult(list, true, next: next());
354+
return dataResult;
339355
}
356+
return await next();
340357
}
341358
}

lib/page/MyPage.dart

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
import 'dart:async';
2+
13
import 'package:flutter/material.dart';
24
import 'package:flutter_redux/flutter_redux.dart';
35
import 'package:gsy_github_app_flutter/common/dao/EventDao.dart';
46
import 'package:gsy_github_app_flutter/common/dao/ReposDao.dart';
57
import 'package:gsy_github_app_flutter/common/dao/UserDao.dart';
68
import 'package:gsy_github_app_flutter/common/model/Event.dart';
9+
import 'package:gsy_github_app_flutter/common/model/UserOrg.dart';
710
import 'package:gsy_github_app_flutter/common/redux/GSYState.dart';
811
import 'package:gsy_github_app_flutter/common/redux/UserRedux.dart';
912
import 'package:gsy_github_app_flutter/common/style/GSYStyle.dart';
@@ -30,6 +33,8 @@ class _MyPageState extends GSYListState<MyPage> {
3033

3134
Color notifyColor = const Color(GSYColors.subTextColor);
3235

36+
final List<UserOrg> orgList = new List();
37+
3338
_renderEventItem(userInfo, index) {
3439
if (index == 0) {
3540
return new UserHeaderItem(
@@ -39,6 +44,7 @@ class _MyPageState extends GSYListState<MyPage> {
3944
refreshCallBack: () {
4045
_refreshNotify();
4146
},
47+
orgList: orgList,
4248
);
4349
}
4450
Event event = pullLoadWidgetControl.dataList[index - 1];
@@ -68,6 +74,28 @@ class _MyPageState extends GSYListState<MyPage> {
6874
});
6975
}
7076

77+
_getUserOrg(String userName) {
78+
if (page <= 1) {
79+
UserDao.getUserOrgsDao(userName, page, needDb: true).then((res) {
80+
if (res != null && res.result) {
81+
setState(() {
82+
orgList.clear();
83+
orgList.addAll(res.data);
84+
});
85+
return res.next;
86+
}
87+
return new Future.value(null);
88+
}).then((res) {
89+
if (res != null && res.result) {
90+
setState(() {
91+
orgList.clear();
92+
orgList.addAll(res.data);
93+
});
94+
}
95+
});
96+
}
97+
}
98+
7199
@override
72100
bool get wantKeepAlive => true;
73101

@@ -82,11 +110,12 @@ class _MyPageState extends GSYListState<MyPage> {
82110
UserDao.getUserInfo(null).then((res) {
83111
if (res != null && res.result) {
84112
_getStore().dispatch(UpdateUserAction(res.data));
113+
_getUserOrg(_getUserName());
85114
}
86115
});
87116
ReposDao.getUserRepository100StatusDao(_getUserName()).then((res) {
88117
if (res != null && res.result) {
89-
if(isShow) {
118+
if (isShow) {
90119
setState(() {
91120
beStaredCount = res.data.toString();
92121
});

lib/page/PersonPage.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,15 @@ class _PersonState extends GSYListState<PersonPage> {
144144
_getUserOrg() {
145145
if (page <= 1) {
146146
UserDao.getUserOrgsDao(userName, page, needDb: true).then((res) {
147+
if (res != null && res.result) {
148+
setState(() {
149+
orgList.clear();
150+
orgList.addAll(res.data);
151+
});
152+
return res.next;
153+
}
154+
return new Future.value(null);
155+
}).then((res) {
147156
if (res != null && res.result) {
148157
setState(() {
149158
orgList.clear();

0 commit comments

Comments
 (0)