提交 0a97ea16 authored 作者: yueweilu's avatar yueweilu

标识当前阅读的位置

上级 20e12c38
...@@ -50,32 +50,7 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt ...@@ -50,32 +50,7 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt
} }
} }
/// 设置当前读的章节id void writeCurrentReadChapterIdToData(List<ChapterModel> data) {
void setCurrentReadChapterId(){
for(ChapterModel chapterModel in chapters){
chapterModel.currentRead = false;
if(chapterModel.id == currentChapterId){
chapterModel.currentRead = true;
chapterModel.selected = true;
}
writeCurrentReadChapterIdToData(chapterModel);
}
}
void writeCurrentReadChapterIdToData(ChapterModel chapterModel){
for(ChapterModel cModel in chapterModel.children!){
cModel.currentRead = false;
if(cModel.id == currentChapterId){
cModel.currentRead = true;
cModel.selected = true;
chapterModel.selected = true;
}
writeCurrentReadChapterIdToData(cModel);
}
}
void testWriteCurrentReadChapterIdToData(List<ChapterModel> data) {
for(ChapterModel cModel in data){ for(ChapterModel cModel in data){
cModel.currentRead = false; cModel.currentRead = false;
if(cModel.id == currentChapterId){ if(cModel.id == currentChapterId){
...@@ -83,12 +58,12 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt ...@@ -83,12 +58,12 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt
cModel.selected = true; cModel.selected = true;
} }
else{ else{
testWriteCurrentReadChapterIdToData(cModel.children!); writeCurrentReadChapterIdToData(cModel.children!);
} }
} }
ChapterModel? tModel = findChapterById(chapters, currentChapterId); ChapterModel? tModel = findChapterById(chapters, currentChapterId);
if(tModel == null){ if(tModel != null){
updateParentsStatus(chapters, tModel!); updateParentsStatus(chapters, tModel!);
} }
...@@ -108,23 +83,21 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt ...@@ -108,23 +83,21 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt
} }
void updateParentsStatus(List<ChapterModel> data, ChapterModel model) { void updateParentsStatus(List<ChapterModel> data, ChapterModel model) {
ChapterModel? parentNode = findParentNode(data, model); ChapterModel? parentNode = findParentChapter(data, model);
while (parentNode != null) { while (parentNode != null) {
parentNode.selected = true; parentNode.selected = true;
parentNode = findParentNode(data, parentNode); parentNode = findParentChapter(data, parentNode);
} }
} }
ChapterModel? findParentNode(List<ChapterModel> nodes, ChapterModel node) { ChapterModel? findParentChapter(List<ChapterModel> data, ChapterModel model){
for (var n in nodes) { for (ChapterModel tModel in data){
for (var child in n.children!) { if(tModel.id == model.pid){
if (child == node) { return tModel;
return n; }
} ChapterModel? cModel = findParentChapter(tModel.children!, model);
var parent = findParentNode(child.children!, node); if(cModel != null) {
if (parent != null) { return cModel;
return parent;
}
} }
} }
return null; return null;
...@@ -151,8 +124,7 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt ...@@ -151,8 +124,7 @@ class BookDetailController extends GetxController with GetSingleTickerProviderSt
writeData(chapters, result); writeData(chapters, result);
chapters = result; chapters = result;
setCurrentReadChapterId(); writeCurrentReadChapterIdToData(chapters);
// testWriteCurrentReadChapterIdToData(chapters)
update(); update();
} }
......
...@@ -157,13 +157,13 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide ...@@ -157,13 +157,13 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
update(); update();
} }
// 设置 chapterId 和 chapterName // // 设置 chapterId 和 chapterName
void setChapterInfo({required String id,required String name}){ // void setChapterInfo({required String id,required String name}){
chapterId = id; // chapterId = id;
chapterName = name; // chapterName = name;
setCurrentReadChapterId(); // writeCurrentReadChapterIdToData(chapters);
update(); // update();
} // }
void setShow(bool value) { void setShow(bool value) {
_show = !value; _show = !value;
update(); update();
...@@ -181,6 +181,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide ...@@ -181,6 +181,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
void selectChapter(ChapterModel model) { void selectChapter(ChapterModel model) {
chapterName = model.name??''; chapterName = model.name??'';
chapterId = model.id.toString(); chapterId = model.id.toString();
writeCurrentReadChapterIdToData(chapters);
update(); update();
} }
...@@ -855,35 +856,62 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide ...@@ -855,35 +856,62 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
/// 获取目录信息 /// 获取目录信息
void _getChapters() async { void _getChapters() async {
chapters = await LibraryAPI.chapters(bookId: bookId); chapters = await LibraryAPI.chapters(bookId: bookId);
setCurrentReadChapterId(); writeCurrentReadChapterIdToData(chapters);
update(); update();
} }
/// 设置当前读的章节id void writeCurrentReadChapterIdToData(List<ChapterModel> data) {
void setCurrentReadChapterId(){ for(ChapterModel cModel in data){
for(ChapterModel chapterModel in chapters){ cModel.currentRead = false;
chapterModel.currentRead = false; if(cModel.id == int.parse(chapterId)){
if(chapterModel.id == int.parse(chapterId)){ cModel.currentRead = true;
chapterModel.currentRead = true; cModel.selected = true;
chapterModel.selected = true; }
else{
writeCurrentReadChapterIdToData(cModel.children!);
} }
writeCurrentReadChapterIdToData(chapterModel); }
ChapterModel? tModel = findChapterById(chapters, int.parse(chapterId));
if(tModel != null){
updateParentsStatus(chapters, tModel!);
} }
} }
void writeCurrentReadChapterIdToData(ChapterModel chapterModel){ ChapterModel? findChapterById(List<ChapterModel> data,num id){
for(ChapterModel cModel in chapterModel.children!){ for (ChapterModel cModel in data){
cModel.currentRead = false; if(cModel.id == id){
if(cModel.id == int.parse(chapterId)){ return cModel;
cModel.currentRead = true; }
cModel.selected = true; ChapterModel? tModel = findChapterById(cModel.children!, id);
chapterModel.selected = true; if(tModel !=null){
return tModel;
} }
writeCurrentReadChapterIdToData(cModel);
} }
return null;
} }
void updateParentsStatus(List<ChapterModel> data, ChapterModel model) {
ChapterModel? parentNode = findParentChapter(data, model);
while (parentNode != null) {
parentNode.selected = true;
parentNode = findParentChapter(data, parentNode);
}
}
ChapterModel? findParentChapter(List<ChapterModel> data, ChapterModel model){
for (ChapterModel tModel in data){
if(tModel.id == model.pid){
return tModel;
}
ChapterModel? cModel = findParentChapter(tModel.children!, model);
if(cModel != null) {
return cModel;
}
}
return null;
}
/// 添加阅读时长 /// 添加阅读时长
void _addReadTime({required type}) async{ void _addReadTime({required type}) async{
......
...@@ -200,7 +200,9 @@ class _ReadPageState extends State<ReadPage> { ...@@ -200,7 +200,9 @@ class _ReadPageState extends State<ReadPage> {
controller.addJavaScriptHandler(handlerName: 'loadChapterCallBack', callback: (args){ controller.addJavaScriptHandler(handlerName: 'loadChapterCallBack', callback: (args){
String chapterId = args.first[0].toString(); String chapterId = args.first[0].toString();
String chapterName = args.first[1].toString(); String chapterName = args.first[1].toString();
readController.setChapterInfo(id: chapterId, name: chapterName ?? ''); ChapterModel chapterModel = ChapterModel(id: int.parse(chapterId), name: chapterName);
// readController.setChapterInfo(id: chapterId, name: chapterName ?? '');
readController.selectChapter(chapterModel);
Console.log('监听 上一节 下一节------------------------------------------------$args'); Console.log('监听 上一节 下一节------------------------------------------------$args');
}); });
...@@ -420,7 +422,7 @@ class _ReadPageState extends State<ReadPage> { ...@@ -420,7 +422,7 @@ class _ReadPageState extends State<ReadPage> {
controller.chooseTool(model); controller.chooseTool(model);
// 选择了新的章节 刷新 webview // 选择了新的章节 刷新 webview
controller.webViewController.reload(); controller.webViewController.reload();
controller.setCurrentReadChapterId(); // controller.setCurrentReadChapterId();
}, },
); );
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论