Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
book-app
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
book-app
Commits
7961e323
提交
7961e323
authored
3月 07, 2024
作者:
yueweilu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
离线基本传参
上级
c73dec65
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
197 行增加
和
28 行删除
+197
-28
controller.dart
lib/pages/book_detail/controller.dart
+8
-2
controller.dart
lib/pages/read_web/controller.dart
+28
-1
index.dart
lib/pages/read_web/index.dart
+1
-0
view.dart
lib/pages/read_web/view.dart
+68
-9
constants.dart
lib/utils/constants.dart
+1
-0
sql.dart
lib/utils/sql.dart
+91
-16
没有找到文件。
lib/pages/book_detail/controller.dart
浏览文件 @
7961e323
...
...
@@ -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
();
}
/// 收藏 与 取消收藏
...
...
lib/pages/read_web/controller.dart
浏览文件 @
7961e323
...
...
@@ -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
);
...
...
lib/pages/read_web/index.dart
浏览文件 @
7961e323
...
...
@@ -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'
;
...
...
lib/pages/read_web/view.dart
浏览文件 @
7961e323
...
...
@@ -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
{
...
...
lib/utils/constants.dart
浏览文件 @
7961e323
...
...
@@ -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'
;
// 答题结果页
...
...
lib/utils/sql.dart
浏览文件 @
7961e323
...
...
@@ -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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论