提交 ce4a0087 authored 作者: maodou's avatar maodou

Merge remote-tracking branch 'origin/test' into test

...@@ -302,5 +302,20 @@ abstract class LibraryAPI { ...@@ -302,5 +302,20 @@ abstract class LibraryAPI {
return false; return false;
} }
/// 15、批量上传离线笔记、高亮、划线的内容
static Future <bool> uploadOffline({
required String node,
}) async {
final result = await HttpService.to.post(
'/v1/book/Information/addOfflineNotes',
params: {
'nodes_list':node,
},
);
if (result.data is Map && result.data['is_success'] == 1){
return true;
}
return false;
}
} }
\ No newline at end of file
...@@ -18,8 +18,6 @@ class Global { ...@@ -18,8 +18,6 @@ class Global {
// print('本地服务器已成功启动,根目录为: $documentRoot'); // print('本地服务器已成功启动,根目录为: $documentRoot');
SqlManager.init(); SqlManager.init();
WidgetsBinding.instance?.addObserver(AppLifecycleObserver()); WidgetsBinding.instance?.addObserver(AppLifecycleObserver());
await Future.wait([ await Future.wait([
......
library bai_dict;
import 'package:flutter/material.dart';
import 'package:flutter_book/utils/index.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
part 'view.dart';
\ No newline at end of file
part of bai_dict;
class BaiDictPage extends StatefulWidget {
final String keyword;
const BaiDictPage({
Key? key,
required this.keyword
}) : super(key: key);
@override
State<BaiDictPage> createState() => _BaiKePageState();
}
class _BaiKePageState extends State<BaiDictPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: false,
title: Text('$widget.keyword',style: TextStyle(fontSize: 14.w,fontWeight: Fonts.medium,color: Colours.c3),),
),
body: InAppWebView(
initialUrlRequest: URLRequest(
url: Uri.parse('https://hanyu.baidu.com/hanyu-page/zici/s?from=aladdin&query=${widget.keyword}&srcid=51368&wd=${widget.keyword}&ptype=zici'),
),
),
);
}
}
\ No newline at end of file
...@@ -56,6 +56,8 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt ...@@ -56,6 +56,8 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt
/// 获取图书详细信息 /// 获取图书详细信息
void getBookDetails() async { void getBookDetails() async {
bookDetails = await LibraryAPI.details(bookId:bookId); bookDetails = await LibraryAPI.details(bookId:bookId);
// 将阅读最后章节写入到数据库
SqlManager.updateReadHistoryByBookId(int.parse(bookId), bookDetails.chapterId!.toInt());
update(); update();
} }
/// 收藏 与 取消收藏 /// 收藏 与 取消收藏
......
...@@ -73,16 +73,38 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{ ...@@ -73,16 +73,38 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{
vsync: this, vsync: this,
duration: const Duration(milliseconds: 100), duration: const Duration(milliseconds: 100),
); );
super.onInit(); super.onInit();
} }
@override @override
void onReady() { void onReady() async {
// 获取标签数据 // 获取标签数据
_getLabels(); _getLabels();
_getAds(); _getAds();
onRefresh(); onRefresh();
Map<String, dynamic> data = {
'types': 1,
'book_id': 175,
'chapter_id': 334,
'is_open': 1,
'color': 'blue',
'content': 'This is a note content',
'upload': 0,
'positioning': 'top',
'note': 'This is a note',
'node_id': 0,
};
await SqlManager.insertData(data);
final result = await Tools.checkCurrentNetStatus();
// 有网络的时候上传 笔记
if (result){
upload();
}
super.onReady(); super.onReady();
} }
...@@ -176,20 +198,6 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{ ...@@ -176,20 +198,6 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{
/// 获取tab分类数据 /// 获取tab分类数据
void _getTabs() async { void _getTabs() async {
Map<String, dynamic> data = {
'types': 1,
'book_id': 123,
'chapter_id': 456,
// 'is_open': 1,
// 'color': 'blue',
// 'content': 'This is a note content',
// 'del': 0,
// 'positioning': 'top',
// 'note': 'This is a note',
};
await SqlManager.insertData(data);
categories = await LibraryAPI.categories(); categories = await LibraryAPI.categories();
tabController.dispose(); tabController.dispose();
tabController = TabController(length:categories.length, vsync: this); tabController = TabController(length:categories.length, vsync: this);
...@@ -232,6 +240,18 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{ ...@@ -232,6 +240,18 @@ class LibraryController extends GetxController with GetTickerProviderStateMixin{
} }
} }
/// 批量上传离线笔记、高亮、划线的内容
void upload() async{
List<Map<String, dynamic>> data = await SqlManager.queryNoUploadData();
Console.log('查询到的数据----------------------------------------------------$data');
final result = await LibraryAPI.uploadOffline(node: jsonEncode(data));
// 上传成功后 更新数据库中的字段
if (result) {
SqlManager.updateUploadStatus();
}
}
/// 获取图书列表数据 /// 获取图书列表数据
Future<void> _getBooks([bool isRefresh = false]) async { Future<void> _getBooks([bool isRefresh = false]) async {
......
library library; library library;
import 'dart:convert';
import 'package:azlistview/azlistview.dart'; import 'package:azlistview/azlistview.dart';
import 'package:easy_refresh/easy_refresh.dart'; import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
......
...@@ -18,6 +18,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; ...@@ -18,6 +18,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_sound/public/flutter_sound_recorder.dart'; import 'package:flutter_sound/public/flutter_sound_recorder.dart';
import 'package:flutter_sound_platform_interface/flutter_sound_platform_interface.dart'; import 'package:flutter_sound_platform_interface/flutter_sound_platform_interface.dart';
import 'package:flutter_sound_platform_interface/flutter_sound_recorder_platform_interface.dart'; import 'package:flutter_sound_platform_interface/flutter_sound_recorder_platform_interface.dart';
import 'package:flutter_tts/flutter_tts.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
......
...@@ -102,6 +102,7 @@ class _ReadPageState extends State<ReadPage> { ...@@ -102,6 +102,7 @@ class _ReadPageState extends State<ReadPage> {
// 监听笔记回调 // 监听笔记回调
controller.addJavaScriptHandler(handlerName: 'noteCallBack', callback: (args){ controller.addJavaScriptHandler(handlerName: 'noteCallBack', callback: (args){
Console.log('监听笔记回调------------------------------------------------$args');
readController.noteTitle = args.first; readController.noteTitle = args.first;
readController.setShowChat(true); readController.setShowChat(true);
readController.setChatType(1); readController.setChatType(1);
...@@ -110,16 +111,41 @@ class _ReadPageState extends State<ReadPage> { ...@@ -110,16 +111,41 @@ class _ReadPageState extends State<ReadPage> {
// 监听百科回调 // 监听百科回调
controller.addJavaScriptHandler(handlerName: 'baikeCallBack', callback: (args){ controller.addJavaScriptHandler(handlerName: 'baikeCallBack', callback: (args){
Console.log('监听百科回调------------------------------------------------$args');
context.pushNamed(Routes.baiKe,queryParameters: {'keyword':args.first}); context.pushNamed(Routes.baiKe,queryParameters: {'keyword':args.first});
}); });
// 监听字典回调
controller.addJavaScriptHandler(handlerName: 'dicCallBack', callback: (args){
Console.log('监听百科回调------------------------------------------------$args');
context.pushNamed(Routes.baiDict,queryParameters: {'keyword':args.first});
});
// 监听朗读回调
controller.addJavaScriptHandler(handlerName: 'readCallBack', callback: (args){
Console.log('监听朗读回调------------------------------------------------$args');
readController.speak(args.first.toString());
// readController.speak('中国共产党(英文名:the Communist Party of China,简写CPC),'
// '创建于1921年7月23日,1921年中国共产党成立后,确立了新民主主义革命的正确道路,让灾难深重的中'
// '国人民看到了新的希望、有了新的依靠。我们党探索出农村包围城市、武装夺取政权的正确革命道路,“唤起工'
// '农千百万”“夺过鞭子揍敌人”,经过土地革命战争、抗日战争、解放战争,推翻了压在中国人民头上的帝国主义、'
// '封建主义、官僚资本主义“三座大山”,建立了人民当家作主的中华人民共和国,彻底结束了近代以来中国内忧外患、积贫积弱的悲惨境地,开启了中华民族发展进步的新纪元'
// );
});
// 监听讨论回调 // 监听讨论回调
controller.addJavaScriptHandler(handlerName: 'discussCallBack', callback: (args){ controller.addJavaScriptHandler(handlerName: 'discussCallBack', callback: (args){
Console.log('监听讨论回调------------------------------------------------$args');
readController.setShowChat(true); readController.setShowChat(true);
readController.setChatType(0); readController.setChatType(0);
readController.titleInput.text = args.first.toString(); readController.titleInput.text = args.first.toString();
}); });
// 监听 上一节 下一节
controller.addJavaScriptHandler(handlerName: 'readCallBack', callback: (args){
Console.log('监听 上一节 下一节------------------------------------------------$args');
});
}, },
), ),
// AnimatedPositioned( // AnimatedPositioned(
......
...@@ -45,6 +45,7 @@ import 'package:go_router/go_router.dart'; ...@@ -45,6 +45,7 @@ import 'package:go_router/go_router.dart';
import '../models/index.dart'; import '../models/index.dart';
import '../pages/ad_detail/index.dart'; import '../pages/ad_detail/index.dart';
import '../pages/bai_dict/index.dart';
import '../pages/bai_ke/index.dart'; import '../pages/bai_ke/index.dart';
import '../pages/read_web/index.dart'; import '../pages/read_web/index.dart';
import '../pages/user_edit_note/index.dart'; import '../pages/user_edit_note/index.dart';
......
...@@ -40,7 +40,8 @@ abstract class Routes { ...@@ -40,7 +40,8 @@ abstract class Routes {
/// 图书馆模块 /// 图书馆模块
// 百科 // 百科
static const baiKe = 'bai_ke'; static const baiKe = 'bai_ke';
// 字典
static const baiDict = 'bai_dict';
/// 书架模块 /// 书架模块
static const creditPoints = 'credit_points'; static const creditPoints = 'credit_points';
...@@ -595,6 +596,17 @@ abstract class Routes { ...@@ -595,6 +596,17 @@ abstract class Routes {
child: AdDetailPage(adModel: state.extra as AdModel,), child: AdDetailPage(adModel: state.extra as AdModel,),
) )
), ),
GoRoute( // 字典
path: '/$baiDict',
name: baiDict,
pageBuilder: (context, state) =>CupertinoPage(
name: state.uri.toString(),
key: state.pageKey,
child: BaiDictPage(
keyword: state.uri.queryParameters['keyword'].toString(),
)
)
),
] ]
); );
......
...@@ -32,6 +32,7 @@ class SqlManager { ...@@ -32,6 +32,7 @@ class SqlManager {
"types INTEGER, " "types INTEGER, "
"book_id INTEGER, " "book_id INTEGER, "
"chapter_id INTEGER, " "chapter_id INTEGER, "
"node_id INTEGER, "
"is_open INTEGER, " "is_open INTEGER, "
"color TEXT, " "color TEXT, "
"content TEXT, " "content TEXT, "
...@@ -65,15 +66,16 @@ class SqlManager { ...@@ -65,15 +66,16 @@ class SqlManager {
} }
// 将所有 upload 为 0 的数据的 upload 字段值更新为 1 // 将所有 upload 为 0 的数据的 upload 字段值更新为 1
static Future<void> updateUploadStatus() async { static Future<void> updateUploadStatus() async {
await _database!.update( final result = await _database!.update(
'members_book_notes', 'members_book_notes',
{'upload': 1}, {'upload': 1},
where: 'upload = ?', where: 'upload = ?',
whereArgs: [0], whereArgs: [0],
); );
Console.log('更新数据-------------------------------$result');
} }
// 根据 book_id 查询当前读到的 章节 // 根据 book_id 查询当前读到的 章节
static Future<int> queryDataByBookId(int bookId) async { static Future<String> queryReadHistoryByBookId(int bookId) async {
List<Map<String, dynamic>> results = await _database!.query( List<Map<String, dynamic>> results = await _database!.query(
'read_history', 'read_history',
where: 'book_id = ?', where: 'book_id = ?',
...@@ -83,9 +85,9 @@ class SqlManager { ...@@ -83,9 +85,9 @@ class SqlManager {
} }
// 根据 book_id 写入当前读到的 章节 // 根据 book_id 写入当前读到的 章节
static Future<int?> updateReadHistoryBookId(int bookId ,int chapterId) async { static Future<int> updateReadHistoryByBookId(int bookId ,int chapterId) async {
final result = await _database?.update( final result = await _database!.update(
'members_book_notes', 'members_book_notes',
{'chapter_id':chapterId}, {'chapter_id':chapterId},
where: 'book_id = ?', where: 'book_id = ?',
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论