Skip to content

Commit 9f1b7b8

Browse files
committed
✨ 收藏集同步
1 parent 3acc80d commit 9f1b7b8

22 files changed

+302
-137
lines changed

lib/app/api/category_api.dart

+27-17
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ import 'package:flutter_unit/app/utils/http_utils/result_bean.dart';
77
/// 说明:
88
99
class CategoryApi {
10-
11-
12-
static Future<ResultBean<bool>> uploadCategoryData(String data) async {
13-
var result = await HttpUtil.getInstance()
14-
.client
15-
.post(PathUnit.categoryDataSync, data: data)
16-
.catchError((err) {
10+
static Future<ResultBean<bool>> uploadCategoryData(
11+
{String data, String likeData}) async {
12+
var result = await HttpUtil.getInstance().client.post(
13+
PathUnit.categoryDataSync,
14+
data: {"data": data, "likeData": likeData}).catchError((err) {
1715
return ResultBean.error('请求错误: ${err.toString()}');
1816
});
1917

@@ -24,29 +22,41 @@ class CategoryApi {
2422
return ResultBean.error('请求错误');
2523
}
2624

27-
28-
static Future<ResultBean<String>> getCategoryData() async {
25+
static Future<ResultBean<CategoryData>> getCategoryData() async {
2926
var result = await HttpUtil.getInstance()
3027
.client
3128
.get(PathUnit.categoryData)
3229
.catchError((err) {
3330
return ResultBean.error('请求错误: ${err.toString()}');
3431
});
3532

36-
3733
// 获取的数据非空且 status = true
3834
if (result.data != null && result.data['status']) {
3935
// 说明有数据
40-
if(result.data['data']!=null){
41-
var dataStr = result.data['data']['data'];
42-
return ResultBean.ok<String>(dataStr);
43-
}else{
44-
return ResultBean.ok<String>(null);
36+
if (result.data['data'] != null) {
37+
return ResultBean.ok<CategoryData>(CategoryData.fromJson(result.data['data']));
38+
} else {
39+
return ResultBean.ok<CategoryData>(null);
4540
}
46-
4741
}
4842

4943
return ResultBean.error('请求错误');
5044
}
51-
5245
}
46+
47+
class CategoryData{
48+
final int categoryDataId;
49+
final int userId;
50+
final String data;
51+
final String likeData;
52+
53+
CategoryData({this.categoryDataId, this.userId, this.data, this.likeData});
54+
55+
factory CategoryData.fromJson(Map<String, dynamic> map) {
56+
return CategoryData(
57+
categoryDataId: map['categoryDataId'],
58+
userId: map["userId"],
59+
likeData: map["likeData"],
60+
data: map["data"]);
61+
}
62+
}

lib/app/res/path_unit.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
55
class PathUnit{
66

7-
// static const baseUrl='http://119.45.173.197:8080/api/v1';
8-
static const baseUrl='http://192.168.0.104:8080/api/v1';
7+
static const baseUrl='http://119.45.173.197:8080/api/v1';
8+
// static const baseUrl='http://192.168.0.100:8080/api/v1';
99

1010
static const sendEmail = '/sendEmail/';
1111
static const register = '/register';

lib/app/router/unit_router.dart

+5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:flutter_unit/views/pages/about/about_app_page.dart';
55
import 'package:flutter_unit/views/pages/about/version_info.dart';
66
import 'package:flutter_unit/views/pages/category/category_detail.dart';
77
import 'package:flutter_unit/views/pages/category/collect_page.dart';
8+
import 'package:flutter_unit/views/pages/data_manage/data_manage_page.dart';
89
import 'package:flutter_unit/views/pages/gallery/gallery_page.dart';
910
import 'package:flutter_unit/views/pages/issues_point/issues_detail.dart';
1011
import 'package:flutter_unit/views/pages/issues_point/issues_point_page.dart';
@@ -54,6 +55,8 @@ class UnitRouter {
5455
static const String about_app = 'AboutAppPage';
5556
static const String register = 'register';
5657

58+
static const String data_manage = 'DataManagePage';
59+
5760
static Route<dynamic> generateRoute(RouteSettings settings) {
5861
switch (settings.name) {
5962
//
@@ -72,6 +75,8 @@ class UnitRouter {
7275

7376
case setting:
7477
return Right2LeftRouter(child: SettingPage());
78+
case data_manage:
79+
return Right2LeftRouter(child: DataManagePage());
7580
case font_setting:
7681
return Right2LeftRouter(child: FontSettingPage());
7782
case theme_color_setting:

lib/blocs/like/like_bloc.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ class LikeWidgetBloc extends Bloc<LikeWidgetEvent, LikeWidgetState> {
2121
LikeWidgetEvent event,
2222
) async* {
2323
if (event is ToggleLikeWidgetEvent) {
24-
await repository.toggleCollect(event.id);
25-
final widgets = await repository.loadCollectWidgets();
24+
await repository.toggleLike(event.id);
25+
final widgets = await repository.loadLikeWidgets();
2626
yield LikeWidgetState(widgets: widgets);
2727
}
28-
if( event is EventSetCollectData){
29-
final widgets = await repository.loadCollectWidgets();
28+
if( event is EventLoadLikeData){
29+
final widgets = await repository.loadLikeWidgets();
3030
yield LikeWidgetState(widgets: widgets);
3131
}
3232
}

lib/blocs/like/like_event.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import 'package:equatable/equatable.dart';
66
77
abstract class LikeWidgetEvent extends Equatable {}
88

9-
class EventSetCollectData extends LikeWidgetEvent {
9+
class EventLoadLikeData extends LikeWidgetEvent {
1010
List<Object> get props => [];
1111
}
1212

lib/model/category_model.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,13 @@ class CategoryModel extends Equatable {
6262
class CategoryTo{
6363
final CategoryPo model;
6464
final List<int> widgetIds;
65+
final List<dynamic> likesData;
6566

66-
CategoryTo({this.model, this.widgetIds});
67+
CategoryTo({this.model, this.widgetIds,this.likesData});
6768

6869
Map toJson() => {
6970
"model": this.model,
7071
"widgetIds": this.widgetIds,
72+
"likesData":this.likesData
7173
};
7274
}

lib/repositories/impl/catagory_db_repository.dart

+38-4
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class CategoryDbRepository implements CategoryRepository {
7373
@override
7474
Future<List<CategoryTo>> loadCategoryData() async {
7575
List<Map<String, dynamic>> data = await _categoryDao.queryAll();
76+
7677
Completer<List<CategoryTo>> completer = Completer();
7778
List<CategoryTo> collects = [];
7879

@@ -82,8 +83,9 @@ class CategoryDbRepository implements CategoryRepository {
8283

8384
for (int i = 0; i < data.length; i++) {
8485
List<int> ids = await _categoryDao.loadCollectWidgetIds(data[i]['id']);
85-
collects
86-
.add(CategoryTo(widgetIds: ids, model: CategoryPo.fromJson(data[i])));
86+
collects.add(CategoryTo(
87+
widgetIds: ids,
88+
model: CategoryPo.fromJson(data[i])));
8789

8890
if (i == data.length - 1) {
8991
completer.complete(collects);
@@ -94,16 +96,48 @@ class CategoryDbRepository implements CategoryRepository {
9496
}
9597

9698
@override
97-
Future<bool> syncCategoryByData(String data) async {
99+
Future<List<dynamic>> loadLikesData() async {
100+
101+
final db = await storage.db;
102+
var likes = await db.rawQuery("SELECT id "
103+
"FROM widget WHERE collected = 1 ORDER BY family,lever DESC");
104+
var likesData = likes.map((e) => e['id']).toList();
105+
106+
return likesData;
107+
}
108+
109+
110+
Future<void> _setLikes(List<dynamic> ids) async {
111+
if(ids.isEmpty) return;
112+
final db = await storage.db;
113+
String sql = 'UPDATE widget SET collected = 1 WHERE ';
114+
for(int i=0;i<ids.length;i++){
115+
if(i==0){
116+
sql += 'id = ${ids[i]} ';
117+
}else{
118+
sql += 'OR id = ${ids[i]} ';
119+
}
120+
}
121+
122+
await db.rawUpdate(sql, );
123+
List<Map<String, dynamic>> data = await db.rawQuery('SELECT id FROM widget WHERE collected = 1', []);
124+
print(data);
125+
}
126+
127+
@override
128+
Future<bool> syncCategoryByData(String data,String likeData) async {
98129
try {
99130
await _categoryDao.clear();
100131
List<dynamic> dataMap = json.decode(data);
101132
for (int i = 0; i < dataMap.length; i++) {
102133
CategoryPo po = CategoryPo.fromNetJson(dataMap[i]["model"]);
103134
List<dynamic> widgetIds = dataMap[i]["widgetIds"];
104135
await addCategory(po);
105-
await _categoryDao.addWidgets(po.id, widgetIds);
136+
if(widgetIds.isNotEmpty){
137+
await _categoryDao.addWidgets(po.id, widgetIds);
138+
}
106139
}
140+
await _setLikes(json.decode(likeData));
107141
return true;
108142
} catch (e) {
109143
print(e);

lib/repositories/impl/widget_db_repository.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class WidgetDbRepository implements WidgetRepository {
3232
}
3333

3434
@override
35-
Future<List<WidgetModel>> loadCollectWidgets() async {
35+
Future<List<WidgetModel>> loadLikeWidgets() async {
3636
List<Map<String, dynamic>> data = await _widgetDao.queryCollect();
3737
List<WidgetPo> widgets = data.map((e) => WidgetPo.fromJson(e)).toList();
3838
List<WidgetModel> list = widgets.map(WidgetModel.fromPo).toList();
@@ -62,7 +62,7 @@ class WidgetDbRepository implements WidgetRepository {
6262
}
6363

6464
@override
65-
Future<void> toggleCollect(
65+
Future<void> toggleLike(
6666
int id,
6767
) {
6868
return _widgetDao.toggleCollect(id);

lib/repositories/itf/category_repository.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ abstract class CategoryRepository {
2121

2222
// 获取 所有收藏集 及 收藏集对应的组件 id 列表
2323
Future<List<CategoryTo>> loadCategoryData();
24+
Future<List<dynamic>> loadLikesData();
2425

2526
// 根据 Category 数据 同步 收藏集
26-
Future<bool> syncCategoryByData(String data);
27+
Future<bool> syncCategoryByData(String data,String likeData);
2728

2829

2930
//添加收藏集

lib/repositories/itf/widget_repository.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ abstract class WidgetRepository {
1515

1616
Future<List<NodeModel>> loadNode(WidgetModel widgetModel);
1717

18-
Future<void> toggleCollect(int id);
18+
Future<void> toggleLike(int id);
1919

20-
Future<List<WidgetModel>> loadCollectWidgets();
20+
Future<List<WidgetModel>> loadLikeWidgets();
2121

2222
Future<bool> collected(int id);
2323
}

lib/user_system/pages/login/login_form.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ class _LoginFromState extends State<LoginFrom> {
226226
elevation: 0,
227227
shape: RoundedRectangleBorder(
228228
borderRadius: BorderRadius.all(Radius.circular(20))),
229-
color: Colors.blue.withOpacity(0.7),
229+
color: Colors.blue.withOpacity(0.4),
230230
onPressed: _doLogIn,
231231
child: CupertinoActivityIndicator(),
232232
));

0 commit comments

Comments
 (0)