提交 7961e323 authored 作者: yueweilu's avatar yueweilu

离线基本传参

上级 c73dec65
...@@ -85,8 +85,14 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt ...@@ -85,8 +85,14 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt
void getBookDetails() async { void getBookDetails() async {
bookDetails = await LibraryAPI.details(bookId:bookId); bookDetails = await LibraryAPI.details(bookId:bookId);
// 将阅读最后章节写入到数据库 // 将阅读最后章节写入到数据库
try {
final result = await SqlManager.updateReadHistoryByBookId(int.parse(bookId), bookDetails.chapterId!.toInt()); final result = await SqlManager.updateReadHistoryByBookId(int.parse(bookId), bookDetails.chapterId!.toInt());
Console.log('Sql-------存入数据库读到的章节----------------book_id:$bookId-----chapterId:${bookDetails.chapterId!.toInt()}---------result:$result--'); Console.log('Sql-------存入数据库读到的章节----------------book_id:$bookId-----chapterId:${bookDetails.chapterId!.toInt()}---------result:$result--');
}
catch(err){
Console.log('Sql--------------err------------------$err');
}
update(); update();
} }
/// 收藏 与 取消收藏 /// 收藏 与 取消收藏
......
...@@ -690,6 +690,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide ...@@ -690,6 +690,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
// url: Uri.parse(writeFilePath), // url: Uri.parse(writeFilePath),
url: WebUri.uri(Uri.parse(writeFilePath)) url: WebUri.uri(Uri.parse(writeFilePath))
)); ));
queryLocalNote();
} }
// 本地阅读 读取上一章节 或 下一章节 // 本地阅读 读取上一章节 或 下一章节
...@@ -778,6 +779,33 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide ...@@ -778,6 +779,33 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
return ''; return '';
} }
// 查询本地划线高亮笔记
void queryLocalNote() async {
final result = await SqlManager.queryLocalNote(bookId: int.parse(bookId), chapterId: int.parse(chapterId));
Console.log('前端-----------queryLocalNote---------------------$result');
webViewController.evaluateJavascript(source: 'querySuccessCallBack($result)');
}
// 本地添加划线高亮笔记
void addLocalNote(Map<String, dynamic> data) async {
data['book_id'] = int.parse(bookId);
data['chapter_id'] = int.parse(chapterId);
final result = await SqlManager.addLocalNote(data);
Console.log('前端-----------addLocalNote---------------------$result');
webViewController.evaluateJavascript(source: 'addSuccessCallBack($result)');
}
// 本地删除划线高亮笔记
void delLocalNote({required int id}) async {
final result = await SqlManager.delLocalNote(id: id);
Console.log('前端-----------delLocalNote---------------------$result');
webViewController.evaluateJavascript(source: 'delSuccessCallBack($result)');
}
// 修改本地划线高亮笔记
void updateLocalNote({required int id,required Map<String, dynamic> data}) async {
final result = await SqlManager.updateLocalNote(id: id, data: data);
Console.log('前端-----------updateLocalNote---------------------$result');
webViewController.evaluateJavascript(source: 'updateSuccessCallBack($result)');
}
//获取存储目录 //获取存储目录
Future<String> _getDirectory() async { Future<String> _getDirectory() async {
// getTemporaryDirectory // getTemporaryDirectory
...@@ -786,7 +814,6 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide ...@@ -786,7 +814,6 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
} }
/// 获取目录信息 /// 获取目录信息
void _getChapters() async { void _getChapters() async {
chapters = await LibraryAPI.chapters(bookId: bookId); chapters = await LibraryAPI.chapters(bookId: bookId);
......
...@@ -26,6 +26,7 @@ import 'package:just_audio/just_audio.dart' as just_audio; ...@@ -26,6 +26,7 @@ import 'package:just_audio/just_audio.dart' as just_audio;
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'dart:async'; import 'dart:async';
import 'package:plugin_platform_interface/plugin_platform_interface.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart';
import 'package:sqflite/sqflite.dart';
import '../../apis/index.dart'; import '../../apis/index.dart';
import '../../models/index.dart'; import '../../models/index.dart';
......
...@@ -209,6 +209,56 @@ class _ReadPageState extends State<ReadPage> { ...@@ -209,6 +209,56 @@ class _ReadPageState extends State<ReadPage> {
context.pushNamed(Routes.link,queryParameters: {'url': args.first.toString()}); context.pushNamed(Routes.link,queryParameters: {'url': args.first.toString()});
}); });
/// 离线需要参数
// //
// Map<String, dynamic> param111 = {
// 'book_id': readController.bookId,
// 'chapter_id': readController.chapterId,
// 'token':UserStore.to.token
// };
// String jsonStr = jsonEncode(param111);
// controller.evaluateJavascript(source: 'offlineCallbackInFlutterComponent($jsonStr)');
// // controller.evaluateJavascript(source: 'callbackInFlutterComponent("$str");');
// 添加高亮划线笔记
controller.addJavaScriptHandler(handlerName: 'offlineAddNoteCallBack', callback: (args){
Map<String, dynamic> data = {};
readController.addLocalNote(data);
});
// 删除高亮划线笔记
controller.addJavaScriptHandler(handlerName: 'offlineDelNoteCallBack', callback: (args){
int id = 0;
readController.delLocalNote(id: id);
});
// 更新高亮划线笔记
controller.addJavaScriptHandler(handlerName: 'offlineUpdateNoteCallBack', callback: (args){
int id = 0;
Map<String, dynamic> data = {};
readController.updateLocalNote(id: id,data: data);
});
// 查询高亮划线笔记
controller.addJavaScriptHandler(handlerName: 'offlineQueryNoteCallBack', callback: (args){
});
// 上一节下一节
controller.addJavaScriptHandler(handlerName: 'offlineReadNoteCallBack', callback: (args){
int type = 0;
// 上一节
if (type == 0){
readController.readChapter(type: 0);
}
// 下一节
else{
readController.readChapter(type: 1);
}
});
}, },
), ),
// AnimatedPositioned( // AnimatedPositioned(
...@@ -411,17 +461,26 @@ class _ReadPageState extends State<ReadPage> { ...@@ -411,17 +461,26 @@ class _ReadPageState extends State<ReadPage> {
Console.log('++++++++++++++++++++++++${model.tag}'); Console.log('++++++++++++++++++++++++${model.tag}');
if (controller.show){ if (controller.show){
if(model.selected){ if(model.selected){
return Container( return GestureDetector(
onTap: (){
controller.chooseTool(model);
},
child: Container(
color: const Color(0xFF000000).withOpacity(0.5), color: const Color(0xFF000000).withOpacity(0.5),
padding: EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.2), padding: EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.2),
child: ClipRRect( child: ClipRRect(
borderRadius: BorderRadius.only(topRight: Radius.circular(8.w),topLeft: Radius.circular(8.w)), borderRadius: BorderRadius.only(topRight: Radius.circular(8.w),topLeft: Radius.circular(8.w)),
child: Container( child: Container(
color: Colors.white, color: Colors.white,
child: detail(controller, model) child: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: (){},
child: detail(controller, model),
)
), ),
), ),
// child: ReadCategoryPage(), // child: ReadCategoryPage(),
),
); );
} }
else{ else{
......
...@@ -22,6 +22,7 @@ const String kUserRechargeAgreement = '/html/agreement/rec_agreement.html'; ...@@ -22,6 +22,7 @@ const String kUserRechargeAgreement = '/html/agreement/rec_agreement.html';
const String kUserWrongDes = 'http://150.158.138.40:9200/evaluating_wrong.html'; const String kUserWrongDes = 'http://150.158.138.40:9200/evaluating_wrong.html';
// 阅读页 html // 阅读页 html
const String kReadBook = 'http://150.158.138.40:9200/read.html'; const String kReadBook = 'http://150.158.138.40:9200/read.html';
const String kReadTestUnderLineBook = 'http://150.158.138.40:9200/read-unline.html';
// 答题页 // 答题页
const String kAnswer = 'http://150.158.138.40:9200/evaluating.html'; const String kAnswer = 'http://150.158.138.40:9200/evaluating.html';
// 答题结果页 // 答题结果页
......
...@@ -34,6 +34,7 @@ class SqlManager { ...@@ -34,6 +34,7 @@ class SqlManager {
"chapter_id INTEGER, " "chapter_id INTEGER, "
"node_id INTEGER, " "node_id INTEGER, "
"is_open INTEGER, " "is_open INTEGER, "
"del INTEGER, "
"color TEXT, " "color TEXT, "
"content TEXT, " "content TEXT, "
"upload INTEGER, " "upload INTEGER, "
...@@ -50,23 +51,92 @@ class SqlManager { ...@@ -50,23 +51,92 @@ class SqlManager {
} }
} }
static Future<Database?> getCurrentDatabase() async {
if (_database == null) {
await init();
}
return _database;
}
// 关闭数据库 // 关闭数据库
static Future<void> closeDatabase() async { static Future<void> closeDatabase() async {
await _database?.close(); await _database?.close();
} }
// 查询划线高亮笔记
static Future<Map<String, dynamic>> queryLocalNote({required int bookId,required int chapterId}) async {
Database? db = await SqlManager.getCurrentDatabase();
Map<String, dynamic> returnMap = {};
// 划线
List<Map<String, dynamic>>? lineResult = await db?.query(
'members_book_notes',
where: 'book_id = ? and chapter_id = ? and types = ? and del = ?',
whereArgs: [bookId, chapterId,2,0],
);
// 高亮
List<Map<String, dynamic>>? colorResult = await db?.query(
'members_book_notes',
where: 'book_id = ? and chapter_id = ? and types = ? and del = ?',
whereArgs: [bookId, chapterId,3,0],
);
returnMap['line_list'] = lineResult;
returnMap['color_line'] = colorResult;
Console.log('Sql-----------queryLocalNote---------------------$returnMap');
return returnMap;
}
// 添加划线高亮笔记
static Future<int> addLocalNote(Map<String, dynamic> data) async {
Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.insert(
'members_book_notes',
data,
conflictAlgorithm: ConflictAlgorithm.replace,
);
return result??0;
}
// 删除划线高亮笔记
static Future<int> delLocalNote({required int id}) async {
Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.update(
'members_book_notes',
{'del': 1},
where: 'id = ?',
whereArgs: [id],
);
return result??0;
}
// 修改划线高亮笔记
static Future<int> updateLocalNote({required int id,required Map<String, dynamic> data}) async {
Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.update(
'members_book_notes',
data,
where: 'id = ?',
whereArgs: [id],
);
return result??0;
}
// 查询所有没有上传的数据 // 查询所有没有上传的数据
static Future<List<Map<String, dynamic>>> queryNoUploadData() async { static Future<List<Map<String, dynamic>>> queryNoUploadData() async {
List<Map<String, dynamic>> results = await _database!.query( Database? db = await SqlManager.getCurrentDatabase();
List<Map<String, dynamic>>? results = await db?.query(
'members_book_notes', 'members_book_notes',
where: 'upload = ?', where: 'upload = ?',
whereArgs: [0], whereArgs: [0],
); );
return results.isNotEmpty ? results : []; return results ??[];
} }
// 将所有 upload 为 0 的数据的 upload 字段值更新为 1 // 将所有 upload 为 0 的数据的 upload 字段值更新为 1
static Future<void> updateUploadStatus() async { static Future<void> updateUploadStatus() async {
final result = await _database!.update( Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.update(
'members_book_notes', 'members_book_notes',
{'upload': 1}, {'upload': 1},
where: 'upload = ?', where: 'upload = ?',
...@@ -76,32 +146,32 @@ class SqlManager { ...@@ -76,32 +146,32 @@ class SqlManager {
} }
// 根据 book_id 查询当前读到的 章节 // 根据 book_id 查询当前读到的 章节
static Future<String> queryReadHistoryByBookId(int bookId) async { static Future<String> queryReadHistoryByBookId(int bookId) async {
Database? db = await SqlManager.getCurrentDatabase();
List<Map<String, dynamic>> results = await _database!.query( List<Map<String, dynamic>>? results = await db?.query(
'read_history', 'read_history',
where: 'book_id = ?', where: 'book_id = ?',
whereArgs: [bookId], whereArgs: [bookId],
); );
return results.isNotEmpty ? results.first['chapter_id'].toString() : ''; return results?.first['chapter_id'].toString() ?? '';
} }
// 根据 book_id 写入当前读到的 章节 // 根据 book_id 写入当前读到的 章节
static Future<int> updateReadHistoryByBookId(int bookId ,int chapterId) async { static Future<int> updateReadHistoryByBookId(int bookId ,int chapterId) async {
Database? db = await SqlManager.getCurrentDatabase();
final queryResult = await queryReadHistoryByBookId(bookId); final queryResult = await queryReadHistoryByBookId(bookId);
if (queryResult.isEmpty){ if (queryResult.isEmpty){
Console.log('Sql----------没有当前书籍的数据----------------------'); Console.log('Sql----------没有当前书籍的数据----------------------');
final result = await _database!.insert( final result = await db?.insert(
'read_history', 'read_history',
{'chapter_id':chapterId, 'book_id':bookId}, {'chapter_id':chapterId, 'book_id':bookId},
conflictAlgorithm: ConflictAlgorithm.replace, conflictAlgorithm: ConflictAlgorithm.replace,
); );
Console.log('Sql----------插入数据结果:$result----------------------'); Console.log('Sql----------插入数据结果:$result----------------------');
return result; return result??0;
} }
else{ else{
Console.log('Sql----------有当前书籍的数据----------------------'); Console.log('Sql----------有当前书籍的数据----------------------');
final result = await _database!.update( final result = await db!.update(
'read_history', 'read_history',
{'chapter_id':chapterId}, {'chapter_id':chapterId},
where: 'book_id = ?', where: 'book_id = ?',
...@@ -116,7 +186,8 @@ class SqlManager { ...@@ -116,7 +186,8 @@ class SqlManager {
// 插入数据 // 插入数据
static Future<bool> insertData(Map<String, dynamic> data) async { static Future<bool> insertData(Map<String, dynamic> data) async {
final result = await _database?.insert( Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.insert(
'members_book_notes', 'members_book_notes',
data, data,
conflictAlgorithm: ConflictAlgorithm.replace, conflictAlgorithm: ConflictAlgorithm.replace,
...@@ -131,22 +202,25 @@ class SqlManager { ...@@ -131,22 +202,25 @@ class SqlManager {
// 查询所有数据 // 查询所有数据
static Future<List<Map<String, dynamic>>?> queryAllData() async { static Future<List<Map<String, dynamic>>?> queryAllData() async {
return await _database?.query('members_book_notes'); Database? db = await SqlManager.getCurrentDatabase();
return await db?.query('members_book_notes');
} }
// 根据 ID 查询数据 // 根据 ID 查询数据
static Future<Map<String, dynamic>?> queryDataById(int id) async { static Future<Map<String, dynamic>?> queryDataById(int id) async {
List<Map<String, dynamic>> results = await _database!.query( Database? db = await SqlManager.getCurrentDatabase();
List<Map<String, dynamic>>? results = await db?.query(
'members_book_notes', 'members_book_notes',
where: 'id = ?', where: 'id = ?',
whereArgs: [id], whereArgs: [id],
); );
return results.isNotEmpty ? results.first : null; return results?.first??{};
} }
// 更新数据 // 更新数据
static Future<void> updateData(int id, Map<String, dynamic> newData) async { static Future<void> updateData(int id, Map<String, dynamic> newData) async {
await _database?.update( Database? db = await SqlManager.getCurrentDatabase();
await db?.update(
'members_book_notes', 'members_book_notes',
newData, newData,
where: 'id = ?', where: 'id = ?',
...@@ -156,7 +230,8 @@ class SqlManager { ...@@ -156,7 +230,8 @@ class SqlManager {
// 删除数据 // 删除数据
static Future<void> deleteData(int id) async { static Future<void> deleteData(int id) async {
await _database?.delete( Database? db = await SqlManager.getCurrentDatabase();
await db?.delete(
'members_book_notes', 'members_book_notes',
where: 'id = ?', where: 'id = ?',
whereArgs: [id], whereArgs: [id],
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论