mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
Use PageStorage to store state
This commit is contained in:
@@ -281,7 +281,9 @@ class _FilledTabBarState extends State<FilledTabBar> {
|
||||
|
||||
_IndicatorPainter? painter;
|
||||
|
||||
var scrollController = ScrollController();
|
||||
var scrollController = ScrollController(
|
||||
keepScrollOffset: false
|
||||
);
|
||||
|
||||
var tabBarKey = GlobalKey();
|
||||
|
||||
@@ -298,12 +300,20 @@ class _FilledTabBarState extends State<FilledTabBar> {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
PageStorageBucket get bucket => PageStorage.of(context);
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
_controller = widget.controller ?? DefaultTabController.of(context);
|
||||
_controller.animation!.addListener(onTabChanged);
|
||||
initPainter();
|
||||
super.didChangeDependencies();
|
||||
var prevIndex = bucket.readState(context) as int?;
|
||||
if (prevIndex != null && prevIndex != _controller.index) {
|
||||
Future.microtask(() {
|
||||
_controller.index = prevIndex;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -387,6 +397,7 @@ class _FilledTabBarState extends State<FilledTabBar> {
|
||||
}
|
||||
updateScrollOffset(i);
|
||||
previousIndex = i;
|
||||
bucket.writeState(context, i);
|
||||
}
|
||||
|
||||
void updateScrollOffset(int i) {
|
||||
|
@@ -865,6 +865,39 @@ class ComicListState extends State<ComicList> {
|
||||
|
||||
String? _nextUrl;
|
||||
|
||||
Map<String, dynamic> get state => {
|
||||
'maxPage': _maxPage,
|
||||
'data': _data,
|
||||
'page': _page,
|
||||
'error': _error,
|
||||
'loading': _loading,
|
||||
'nextUrl': _nextUrl,
|
||||
};
|
||||
|
||||
void restoreState(Map<String, dynamic>? state) {
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
_maxPage = state['maxPage'];
|
||||
_data.clear();
|
||||
_data.addAll(state['data']);
|
||||
_page = state['page'];
|
||||
_error = state['error'];
|
||||
_loading.clear();
|
||||
_loading.addAll(state['loading']);
|
||||
_nextUrl = state['nextUrl'];
|
||||
}
|
||||
|
||||
void storeState() {
|
||||
PageStorage.of(context).writeState(context, state);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
restoreState(PageStorage.of(context).readState(context));
|
||||
}
|
||||
|
||||
void remove(Comic c) {
|
||||
if (_data[_page] == null || !_data[_page]!.remove(c)) {
|
||||
for (var page in _data.values) {
|
||||
@@ -1025,6 +1058,7 @@ class ComicListState extends State<ComicList> {
|
||||
}
|
||||
} finally {
|
||||
_loading[page] = false;
|
||||
storeState();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1073,6 +1107,7 @@ class ComicListState extends State<ComicList> {
|
||||
);
|
||||
}
|
||||
return SmoothCustomScrollView(
|
||||
key: const PageStorageKey('scroll'),
|
||||
controller: widget.controller,
|
||||
slivers: [
|
||||
if (widget.leadingSliver != null) widget.leadingSliver!,
|
||||
|
Reference in New Issue
Block a user