feat: fix pull to refresh

This commit is contained in:
omkar 2025-01-31 20:22:48 +05:30
parent 9f1d38010e
commit 2fab0e7745
3 changed files with 23 additions and 3 deletions

View file

@ -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),

View file

@ -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();
}

View file

@ -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');