mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 15:57:25 +00:00
Add a setting for number of images preloaded. Close #192
This commit is contained in:
@@ -332,7 +332,8 @@
|
|||||||
"Created successfully": "创建成功",
|
"Created successfully": "创建成功",
|
||||||
"name": "名称",
|
"name": "名称",
|
||||||
"Reverse tap to turn Pages": "反转点击翻页",
|
"Reverse tap to turn Pages": "反转点击翻页",
|
||||||
"Show all": "显示全部"
|
"Show all": "显示全部",
|
||||||
|
"Number of images preloaded": "预加载图片数量"
|
||||||
},
|
},
|
||||||
"zh_TW": {
|
"zh_TW": {
|
||||||
"Home": "首頁",
|
"Home": "首頁",
|
||||||
@@ -667,6 +668,7 @@
|
|||||||
"Created successfully": "創建成功",
|
"Created successfully": "創建成功",
|
||||||
"name": "名稱",
|
"name": "名稱",
|
||||||
"Reverse tap to turn Pages": "反轉點擊翻頁",
|
"Reverse tap to turn Pages": "反轉點擊翻頁",
|
||||||
"Show all": "顯示全部"
|
"Show all": "顯示全部",
|
||||||
|
"Number of images preloaded": "預加載圖片數量"
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -158,6 +158,7 @@ class _Settings with ChangeNotifier {
|
|||||||
'sni': true,
|
'sni': true,
|
||||||
'autoAddLanguageFilter': 'none', // none, chinese, english, japanese
|
'autoAddLanguageFilter': 'none', // none, chinese, english, japanese
|
||||||
'comicSourceListUrl': "https://cdn.jsdelivr.net/gh/venera-app/venera-configs@latest/index.json",
|
'comicSourceListUrl': "https://cdn.jsdelivr.net/gh/venera-app/venera-configs@latest/index.json",
|
||||||
|
'preloadImageCount': 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
operator [](String key) {
|
operator [](String key) {
|
||||||
|
@@ -105,7 +105,7 @@ class _GalleryModeState extends State<_GalleryMode>
|
|||||||
|
|
||||||
late List<bool> cached;
|
late List<bool> cached;
|
||||||
|
|
||||||
int get preCacheCount => 4;
|
int get preCacheCount => appdata.settings["preloadImageCount"];
|
||||||
|
|
||||||
var photoViewControllers = <int, PhotoViewController>{};
|
var photoViewControllers = <int, PhotoViewController>{};
|
||||||
|
|
||||||
@@ -371,6 +371,9 @@ class _ContinuousModeState extends State<_ContinuousMode>
|
|||||||
var fingers = 0;
|
var fingers = 0;
|
||||||
bool disableScroll = false;
|
bool disableScroll = false;
|
||||||
|
|
||||||
|
late List<bool> cached;
|
||||||
|
int get preCacheCount => appdata.settings["preloadImageCount"];
|
||||||
|
|
||||||
/// Whether the user was scrolling the page.
|
/// Whether the user was scrolling the page.
|
||||||
/// The gesture detector has a delay to detect tap event.
|
/// The gesture detector has a delay to detect tap event.
|
||||||
/// To handle the tap event, we need to know if the user was scrolling before the delay.
|
/// To handle the tap event, we need to know if the user was scrolling before the delay.
|
||||||
@@ -388,6 +391,11 @@ class _ContinuousModeState extends State<_ContinuousMode>
|
|||||||
reader = context.reader;
|
reader = context.reader;
|
||||||
reader._imageViewController = this;
|
reader._imageViewController = this;
|
||||||
itemPositionsListener.itemPositions.addListener(onPositionChanged);
|
itemPositionsListener.itemPositions.addListener(onPositionChanged);
|
||||||
|
cached = List.filled(reader.maxPage + 2, false);
|
||||||
|
Future.delayed(
|
||||||
|
const Duration(milliseconds: 100),
|
||||||
|
() => cacheImages(reader.page),
|
||||||
|
);
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -404,6 +412,7 @@ class _ContinuousModeState extends State<_ContinuousMode>
|
|||||||
reader.setPage(page);
|
reader.setPage(page);
|
||||||
context.readerScaffold.update();
|
context.readerScaffold.update();
|
||||||
}
|
}
|
||||||
|
cacheImages(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
double? futurePosition;
|
double? futurePosition;
|
||||||
@@ -443,6 +452,15 @@ class _ContinuousModeState extends State<_ContinuousMode>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cacheImages(int current) {
|
||||||
|
for (int i = current + 1; i <= current + preCacheCount; i++) {
|
||||||
|
if (i <= reader.maxPage && !cached[i]) {
|
||||||
|
_precacheImage(i, context);
|
||||||
|
cached[i] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
Widget widget = ScrollablePositionedList.builder(
|
Widget widget = ScrollablePositionedList.builder(
|
||||||
@@ -473,8 +491,6 @@ class _ContinuousModeState extends State<_ContinuousMode>
|
|||||||
width = double.infinity;
|
width = double.infinity;
|
||||||
}
|
}
|
||||||
|
|
||||||
_precacheImage(index, context);
|
|
||||||
|
|
||||||
ImageProvider image = _createImageProvider(index, context);
|
ImageProvider image = _createImageProvider(index, context);
|
||||||
|
|
||||||
return ComicImage(
|
return ComicImage(
|
||||||
|
@@ -143,6 +143,13 @@ class _ReaderSettingsState extends State<ReaderSettings> {
|
|||||||
callback: () => context.to(() => _CustomImageProcessing()),
|
callback: () => context.to(() => _CustomImageProcessing()),
|
||||||
actionTitle: "Edit".tl,
|
actionTitle: "Edit".tl,
|
||||||
).toSliver(),
|
).toSliver(),
|
||||||
|
_SliderSetting(
|
||||||
|
title: "Number of images preloaded".tl,
|
||||||
|
settingsIndex: "preloadImageCount",
|
||||||
|
interval: 1,
|
||||||
|
min: 1,
|
||||||
|
max: 16,
|
||||||
|
).toSliver(),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user