mirror of
https://github.com/madari-media/madari-oss.git
synced 2026-03-11 17:15:39 +00:00
feat: fix pull to refresh
This commit is contained in:
parent
9f1d38010e
commit
2fab0e7745
3 changed files with 23 additions and 3 deletions
|
|
@ -5,6 +5,7 @@ import 'package:madari_client/features/settings/service/selected_profile.dart';
|
|||
import 'package:madari_client/features/streamio_addons/extension/query_extension.dart';
|
||||
import 'package:madari_client/features/widgetter/plugin_base.dart';
|
||||
import 'package:madari_client/features/widgetter/plugins/stremio/widgets/catalog_featured_shimmer.dart';
|
||||
import 'package:madari_client/features/widgetter/service/home_layout_service.dart';
|
||||
import 'package:madari_client/features/widgetter/state/widget_state_provider.dart';
|
||||
import 'package:madari_client/features/widgetter/types/home_layout_model.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
|
@ -48,10 +49,14 @@ class LayoutManagerState extends State<LayoutManager> {
|
|||
super.didChangeDependencies();
|
||||
}
|
||||
|
||||
Future<void> refresh() {
|
||||
return _loadLayouts(
|
||||
Future<void> refresh() async {
|
||||
final result = await _loadLayouts(
|
||||
refresh: true,
|
||||
);
|
||||
|
||||
HomeLayoutService.instance.refreshWidgets.add(true);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<void> _loadLayouts({
|
||||
|
|
@ -60,7 +65,8 @@ class LayoutManagerState extends State<LayoutManager> {
|
|||
try {
|
||||
_logger.info('Loading layouts');
|
||||
final query = Query(
|
||||
key: "home_layout_${SelectedProfileService.instance.selectedProfileId}${widget.hasSearch}",
|
||||
key:
|
||||
"home_layout_${SelectedProfileService.instance.selectedProfileId}${widget.hasSearch}",
|
||||
config: QueryConfig(
|
||||
ignoreCacheDuration: refresh,
|
||||
cacheDuration: const Duration(hours: 8),
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:cached_query_flutter/cached_query_flutter.dart';
|
||||
import 'package:flex_color_picker/flex_color_picker.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
@ -15,6 +17,7 @@ import 'package:shimmer/shimmer.dart';
|
|||
import '../../../../streamio_addons/models/stremio_base_types.dart';
|
||||
import '../../../../streamio_addons/service/stremio_addon_service.dart';
|
||||
import '../../../interface/widgets.dart';
|
||||
import '../../../service/home_layout_service.dart';
|
||||
import '../../../state/widget_state_provider.dart';
|
||||
import '../utils/size.dart';
|
||||
import 'catalog_featured_shimmer.dart';
|
||||
|
|
@ -53,6 +56,8 @@ class _CatalogGridState extends State<CatalogGrid> implements Refreshable {
|
|||
late final id =
|
||||
'catalog-${widget.config["type"]}-${widget.config["addon"]}-${widget.config["id"]}';
|
||||
|
||||
late StreamSubscription<void> _refresh;
|
||||
|
||||
InfiniteQuery<List<Meta>, int> getQuery({
|
||||
String? id,
|
||||
}) {
|
||||
|
|
@ -160,6 +165,11 @@ class _CatalogGridState extends State<CatalogGrid> implements Refreshable {
|
|||
void initState() {
|
||||
super.initState();
|
||||
_query = getQuery();
|
||||
|
||||
_refresh = HomeLayoutService.instance.refreshWidgets.listen((value) {
|
||||
_query.refetch();
|
||||
});
|
||||
|
||||
_gridFocusNode = FocusNode(
|
||||
debugLabel: 'CatalogGrid-$id',
|
||||
onKeyEvent: _handleKeyEvent,
|
||||
|
|
@ -184,6 +194,7 @@ class _CatalogGridState extends State<CatalogGrid> implements Refreshable {
|
|||
void dispose() {
|
||||
_scrollController.dispose();
|
||||
_gridFocusNode.dispose();
|
||||
_refresh.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import 'package:cached_query_flutter/cached_query_flutter.dart';
|
|||
import 'package:logging/logging.dart';
|
||||
import 'package:madari_client/features/settings/service/selected_profile.dart';
|
||||
import 'package:pocketbase/pocketbase.dart';
|
||||
import 'package:rxdart/subjects.dart';
|
||||
|
||||
import '../../pocketbase/service/pocketbase.service.dart';
|
||||
import '../types/widget_gallery.dart';
|
||||
|
|
@ -12,6 +13,8 @@ class HomeLayoutService {
|
|||
static final HomeLayoutService instance = HomeLayoutService._internal();
|
||||
HomeLayoutService._internal();
|
||||
|
||||
final BehaviorSubject refreshWidgets = BehaviorSubject();
|
||||
|
||||
Future<List<LayoutWidgetConfig>> loadLayoutWidgets() async {
|
||||
try {
|
||||
_logger.info('Loading layout widgets');
|
||||
|
|
|
|||
Loading…
Reference in a new issue