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

标识当前阅读的位置

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