Skip to content

Commit

Permalink
# 功能更新
Browse files Browse the repository at this point in the history
添加本子下的推荐功能
# bug修复
修复部分逻辑问题
# 优化
优化滚动帧率
# 调整
调整部分ui以及点击效果
  • Loading branch information
deretame committed Dec 12, 2024
1 parent 0571449 commit e8ee7a7
Show file tree
Hide file tree
Showing 25 changed files with 1,746 additions and 336 deletions.
4 changes: 3 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'dart:io';
import 'package:catcher_2/catcher_2.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:dio/dio.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
Expand Down Expand Up @@ -36,10 +37,11 @@ final appRouter = AppRouter();

Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
GestureBinding.instance.resamplingEnabled = true;

objectbox = await ObjectBox.create();

manageCacheSize();
await manageCacheSize();

// 告诉系统应该用竖屏
await SystemChrome.setPreferredOrientations(
Expand Down
119 changes: 66 additions & 53 deletions lib/network/http/http_request.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import 'package:flutter/foundation.dart';

import 'http_request_build.dart';

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

Future<Map<String, dynamic>> login(
String username,
String password,
Expand All @@ -14,7 +18,7 @@ Future<Map<String, dynamic>> login(
'POST',
body: json.encode({'email': username, 'password': password}),
);
debugPrint(data.toString());
debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
throw data;
Expand Down Expand Up @@ -49,7 +53,8 @@ Future<Map<String, dynamic>> register(
'POST',
body: json.encode(jsonMap),
);
debugPrint(data.toString());

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
throw data;
Expand All @@ -65,6 +70,8 @@ Future<Map<String, dynamic>> getCategories() async {
cache: false,
);

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
throw data;
}
Expand Down Expand Up @@ -92,6 +99,8 @@ Future<Map<String, dynamic>> getRankingList({
cache: true,
);

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
throw data;
}
Expand All @@ -117,7 +126,6 @@ Future<Map<String, dynamic>> search({
jsonMap["categories"] = categories;
}

debugPrint(jsonMap.toString());
late Map<String, dynamic> data;

if (url.isNotEmpty) {
Expand Down Expand Up @@ -172,10 +180,6 @@ Future<Map<String, dynamic>> search({
);
}

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -192,10 +196,6 @@ Future<Map<String, dynamic>> getSearchKeywords() async {
cache: true,
);

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -213,10 +213,6 @@ Future<Map<String, dynamic>> getComicInfo(
'GET',
);

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -232,10 +228,6 @@ Future<Map<String, dynamic>> favourite(
final Map<String, dynamic> data = await request(
'https://picaapi.picacomic.com/comics/$comicId/favourite', 'POST');

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -251,10 +243,6 @@ Future<Map<String, dynamic>> like(
final Map<String, dynamic> data = await request(
'https://picaapi.picacomic.com/comics/$comicId/like', 'POST');

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -273,10 +261,6 @@ Future<Map<String, dynamic>> getComments(
'GET',
);

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -295,10 +279,6 @@ Future<Map<String, dynamic>> getCommentsChildren(
'GET',
);

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -316,10 +296,44 @@ Future<Map<String, dynamic>> likeComment(
'POST',
);

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
throw data;
}

return data;
}

Future<Map<String, dynamic>> writeComment(
String comicId,
String content,
) async {
final Map<String, dynamic> data = await request(
'https://picaapi.picacomic.com/comics/$comicId',
'POST',
body: json.encode({'content': content}),
);

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
throw data;
}

return data;
}

Future<Map<String, dynamic>> writeCommentChildren(
String comicId,
String content,
) async {
final Map<String, dynamic> data = await request(
'https://picaapi.picacomic.com/comics/$comicId/comments',
'POST',
body: json.encode({'content': content}),
);

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -339,10 +353,24 @@ Future<Map<String, dynamic>> getEps(
cache: true,
);

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
throw data;
}

return data;
}

Future<Map<String, dynamic>> getRecommend(
String comicId,
) async {
final Map<String, dynamic> data = await request(
'https://picaapi.picacomic.com/comics/$comicId/recommendation',
'GET',
cache: true,
);

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -363,10 +391,6 @@ Future<Map<String, dynamic>> getPages(
cache: true,
);

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -382,10 +406,6 @@ Future<Map<String, dynamic>> getUserProfile() async {
'GET',
);

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -403,10 +423,6 @@ Future<Map<String, dynamic>> getFavorites(
'GET',
);

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
Expand All @@ -421,19 +437,16 @@ Future<Map<String, dynamic>> signIn() async {
await request('https://picaapi.picacomic.com/users/punch-in', 'POST');
debugPrint(data.toString());

String limitString(String str, int maxLength) {
return str.substring(0, min(str.length, maxLength));
}

debugPrint(limitString(data.toString(), 150));

if (data['code'] != 200) {
return data;
}

if (data['data']['message'] == 'success' ||
data['data']['res']['status'] == 'fail') {
if (data['data']['message'] == 'success') {
return {"success": "已签到"};
} else if (data['data']['res']['status'] == 'fail') {
return {"successes": "已签到"};
} else {
throw '未知错误';
}
Expand Down
1 change: 1 addition & 0 deletions lib/page/comic_info/bloc/bloc.dart
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export './eps/get_comic_eps_bloc.dart';
export './info/get_comic_info_bloc.dart';
export './recommend/recommend_bloc.dart';
66 changes: 66 additions & 0 deletions lib/page/comic_info/bloc/recommend/recommend_bloc.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import 'package:bloc/bloc.dart';
import 'package:bloc_concurrency/bloc_concurrency.dart';
import 'package:equatable/equatable.dart';
import 'package:stream_transform/stream_transform.dart';
import 'package:zephyr/network/http/http_request.dart';

import '../../json/recommend/recommend_json.dart';

part 'recommend_event.dart';
part 'recommend_state.dart';

const _throttleDuration = Duration(milliseconds: 100);

EventTransformer<E> _throttleDroppable<E>(Duration duration) {
return (events, mapper) {
return droppable<E>().call(events.throttle(duration), mapper);
};
}

class RecommendBloc extends Bloc<RecommendEvent, RecommendState> {
RecommendBloc() : super(RecommendState()) {
on<RecommendEvent>(
_fetchComicList,
transformer: _throttleDroppable(_throttleDuration),
);
}

Future<void> _fetchComicList(
RecommendEvent event,
Emitter<RecommendState> emit,
) async {
if (event.status == RecommendStatus.initial) {
emit(state.copyWith(
status: RecommendStatus.initial,
));
}

try {
final result = await getRecommend(event.comicId);

final comics = result['data']['comics'] as List;

if (comics.isEmpty) {
emit(state.copyWith(
status: RecommendStatus.success,
comicList: null,
));
} else {
List<Comic> comicList = [];
final temp = RecommendJson.fromJson(result);
for (var comic in temp.data.comics) {
comicList.add(comic);
}
emit(state.copyWith(
status: RecommendStatus.success,
comicList: comicList,
));
}
} catch (e) {
emit(state.copyWith(
status: RecommendStatus.failure,
result: e.toString(),
));
}
}
}
14 changes: 14 additions & 0 deletions lib/page/comic_info/bloc/recommend/recommend_event.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
part of 'recommend_bloc.dart';

final class RecommendEvent extends Equatable {
final String comicId;
final RecommendStatus status;

const RecommendEvent(
this.comicId,
this.status,
);

@override
List<Object> get props => [comicId, status];
}
Loading

0 comments on commit e8ee7a7

Please sign in to comment.