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

离线基本传参

上级 c73dec65
......@@ -85,8 +85,14 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt
void getBookDetails() async {
bookDetails = await LibraryAPI.details(bookId:bookId);
// 将阅读最后章节写入到数据库
final result = await SqlManager.updateReadHistoryByBookId(int.parse(bookId), bookDetails.chapterId!.toInt());
Console.log('Sql-------存入数据库读到的章节----------------book_id:$bookId-----chapterId:${bookDetails.chapterId!.toInt()}---------result:$result--');
try {
final result = await SqlManager.updateReadHistoryByBookId(int.parse(bookId), bookDetails.chapterId!.toInt());
Console.log('Sql-------存入数据库读到的章节----------------book_id:$bookId-----chapterId:${bookDetails.chapterId!.toInt()}---------result:$result--');
}
catch(err){
Console.log('Sql--------------err------------------$err');
}
update();
}
/// 收藏 与 取消收藏
......
......@@ -690,6 +690,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
// url: Uri.parse(writeFilePath),
url: WebUri.uri(Uri.parse(writeFilePath))
));
queryLocalNote();
}
// 本地阅读 读取上一章节 或 下一章节
......@@ -778,6 +779,33 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
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 {
// getTemporaryDirectory
......@@ -786,7 +814,6 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
}
/// 获取目录信息
void _getChapters() async {
chapters = await LibraryAPI.chapters(bookId: bookId);
......
......@@ -26,6 +26,7 @@ import 'package:just_audio/just_audio.dart' as just_audio;
import 'package:path_provider/path_provider.dart';
import 'dart:async';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
import 'package:sqflite/sqflite.dart';
import '../../apis/index.dart';
import '../../models/index.dart';
......
......@@ -209,6 +209,56 @@ class _ReadPageState extends State<ReadPage> {
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(
......@@ -411,17 +461,26 @@ class _ReadPageState extends State<ReadPage> {
Console.log('++++++++++++++++++++++++${model.tag}');
if (controller.show){
if(model.selected){
return Container(
color: const Color(0xFF000000).withOpacity(0.5),
padding: EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.2),
child: ClipRRect(
borderRadius: BorderRadius.only(topRight: Radius.circular(8.w),topLeft: Radius.circular(8.w)),
child: Container(
color: Colors.white,
child: detail(controller, model)
return GestureDetector(
onTap: (){
controller.chooseTool(model);
},
child: Container(
color: const Color(0xFF000000).withOpacity(0.5),
padding: EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.2),
child: ClipRRect(
borderRadius: BorderRadius.only(topRight: Radius.circular(8.w),topLeft: Radius.circular(8.w)),
child: Container(
color: Colors.white,
child: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: (){},
child: detail(controller, model),
)
),
),
// child: ReadCategoryPage(),
),
// child: ReadCategoryPage(),
);
}
else{
......
......@@ -22,6 +22,7 @@ const String kUserRechargeAgreement = '/html/agreement/rec_agreement.html';
const String kUserWrongDes = 'http://150.158.138.40:9200/evaluating_wrong.html';
// 阅读页 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';
// 答题结果页
......
......@@ -34,6 +34,7 @@ class SqlManager {
"chapter_id INTEGER, "
"node_id INTEGER, "
"is_open INTEGER, "
"del INTEGER, "
"color TEXT, "
"content TEXT, "
"upload INTEGER, "
......@@ -50,23 +51,92 @@ class SqlManager {
}
}
static Future<Database?> getCurrentDatabase() async {
if (_database == null) {
await init();
}
return _database;
}
// 关闭数据库
static Future<void> closeDatabase() async {
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 {
List<Map<String, dynamic>> results = await _database!.query(
Database? db = await SqlManager.getCurrentDatabase();
List<Map<String, dynamic>>? results = await db?.query(
'members_book_notes',
where: 'upload = ?',
whereArgs: [0],
);
return results.isNotEmpty ? results : [];
return results ??[];
}
// 将所有 upload 为 0 的数据的 upload 字段值更新为 1
static Future<void> updateUploadStatus() async {
final result = await _database!.update(
Database? db = await SqlManager.getCurrentDatabase();
final result = await db?.update(
'members_book_notes',
{'upload': 1},
where: 'upload = ?',
......@@ -76,32 +146,32 @@ class SqlManager {
}
// 根据 book_id 查询当前读到的 章节
static Future<String> queryReadHistoryByBookId(int bookId) async {
List<Map<String, dynamic>> results = await _database!.query(
Database? db = await SqlManager.getCurrentDatabase();
List<Map<String, dynamic>>? results = await db?.query(
'read_history',
where: 'book_id = ?',
whereArgs: [bookId],
);
return results.isNotEmpty ? results.first['chapter_id'].toString() : '';
return results?.first['chapter_id'].toString() ?? '';
}
// 根据 book_id 写入当前读到的 章节
static Future<int> updateReadHistoryByBookId(int bookId ,int chapterId) async {
Database? db = await SqlManager.getCurrentDatabase();
final queryResult = await queryReadHistoryByBookId(bookId);
if (queryResult.isEmpty){
Console.log('Sql----------没有当前书籍的数据----------------------');
final result = await _database!.insert(
final result = await db?.insert(
'read_history',
{'chapter_id':chapterId, 'book_id':bookId},
conflictAlgorithm: ConflictAlgorithm.replace,
);
Console.log('Sql----------插入数据结果:$result----------------------');
return result;
return result??0;
}
else{
Console.log('Sql----------有当前书籍的数据----------------------');
final result = await _database!.update(
final result = await db!.update(
'read_history',
{'chapter_id':chapterId},
where: 'book_id = ?',
......@@ -116,7 +186,8 @@ class SqlManager {
// 插入数据
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',
data,
conflictAlgorithm: ConflictAlgorithm.replace,
......@@ -131,22 +202,25 @@ class SqlManager {
// 查询所有数据
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 查询数据
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',
where: 'id = ?',
whereArgs: [id],
);
return results.isNotEmpty ? results.first : null;
return results?.first??{};
}
// 更新数据
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',
newData,
where: 'id = ?',
......@@ -156,7 +230,8 @@ class SqlManager {
// 删除数据
static Future<void> deleteData(int id) async {
await _database?.delete(
Database? db = await SqlManager.getCurrentDatabase();
await db?.delete(
'members_book_notes',
where: 'id = ?',
whereArgs: [id],
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论