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/streamio_addons/extension/query_extension.dart';
|
||||||
import 'package:madari_client/features/widgetter/plugin_base.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/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/state/widget_state_provider.dart';
|
||||||
import 'package:madari_client/features/widgetter/types/home_layout_model.dart';
|
import 'package:madari_client/features/widgetter/types/home_layout_model.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
@ -48,10 +49,14 @@ class LayoutManagerState extends State<LayoutManager> {
|
||||||
super.didChangeDependencies();
|
super.didChangeDependencies();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> refresh() {
|
Future<void> refresh() async {
|
||||||
return _loadLayouts(
|
final result = await _loadLayouts(
|
||||||
refresh: true,
|
refresh: true,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
HomeLayoutService.instance.refreshWidgets.add(true);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _loadLayouts({
|
Future<void> _loadLayouts({
|
||||||
|
|
@ -60,7 +65,8 @@ class LayoutManagerState extends State<LayoutManager> {
|
||||||
try {
|
try {
|
||||||
_logger.info('Loading layouts');
|
_logger.info('Loading layouts');
|
||||||
final query = Query(
|
final query = Query(
|
||||||
key: "home_layout_${SelectedProfileService.instance.selectedProfileId}${widget.hasSearch}",
|
key:
|
||||||
|
"home_layout_${SelectedProfileService.instance.selectedProfileId}${widget.hasSearch}",
|
||||||
config: QueryConfig(
|
config: QueryConfig(
|
||||||
ignoreCacheDuration: refresh,
|
ignoreCacheDuration: refresh,
|
||||||
cacheDuration: const Duration(hours: 8),
|
cacheDuration: const Duration(hours: 8),
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:cached_query_flutter/cached_query_flutter.dart';
|
import 'package:cached_query_flutter/cached_query_flutter.dart';
|
||||||
import 'package:flex_color_picker/flex_color_picker.dart';
|
import 'package:flex_color_picker/flex_color_picker.dart';
|
||||||
import 'package:flutter/material.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/models/stremio_base_types.dart';
|
||||||
import '../../../../streamio_addons/service/stremio_addon_service.dart';
|
import '../../../../streamio_addons/service/stremio_addon_service.dart';
|
||||||
import '../../../interface/widgets.dart';
|
import '../../../interface/widgets.dart';
|
||||||
|
import '../../../service/home_layout_service.dart';
|
||||||
import '../../../state/widget_state_provider.dart';
|
import '../../../state/widget_state_provider.dart';
|
||||||
import '../utils/size.dart';
|
import '../utils/size.dart';
|
||||||
import 'catalog_featured_shimmer.dart';
|
import 'catalog_featured_shimmer.dart';
|
||||||
|
|
@ -53,6 +56,8 @@ class _CatalogGridState extends State<CatalogGrid> implements Refreshable {
|
||||||
late final id =
|
late final id =
|
||||||
'catalog-${widget.config["type"]}-${widget.config["addon"]}-${widget.config["id"]}';
|
'catalog-${widget.config["type"]}-${widget.config["addon"]}-${widget.config["id"]}';
|
||||||
|
|
||||||
|
late StreamSubscription<void> _refresh;
|
||||||
|
|
||||||
InfiniteQuery<List<Meta>, int> getQuery({
|
InfiniteQuery<List<Meta>, int> getQuery({
|
||||||
String? id,
|
String? id,
|
||||||
}) {
|
}) {
|
||||||
|
|
@ -160,6 +165,11 @@ class _CatalogGridState extends State<CatalogGrid> implements Refreshable {
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_query = getQuery();
|
_query = getQuery();
|
||||||
|
|
||||||
|
_refresh = HomeLayoutService.instance.refreshWidgets.listen((value) {
|
||||||
|
_query.refetch();
|
||||||
|
});
|
||||||
|
|
||||||
_gridFocusNode = FocusNode(
|
_gridFocusNode = FocusNode(
|
||||||
debugLabel: 'CatalogGrid-$id',
|
debugLabel: 'CatalogGrid-$id',
|
||||||
onKeyEvent: _handleKeyEvent,
|
onKeyEvent: _handleKeyEvent,
|
||||||
|
|
@ -184,6 +194,7 @@ class _CatalogGridState extends State<CatalogGrid> implements Refreshable {
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_scrollController.dispose();
|
_scrollController.dispose();
|
||||||
_gridFocusNode.dispose();
|
_gridFocusNode.dispose();
|
||||||
|
_refresh.cancel();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:cached_query_flutter/cached_query_flutter.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:madari_client/features/settings/service/selected_profile.dart';
|
import 'package:madari_client/features/settings/service/selected_profile.dart';
|
||||||
import 'package:pocketbase/pocketbase.dart';
|
import 'package:pocketbase/pocketbase.dart';
|
||||||
|
import 'package:rxdart/subjects.dart';
|
||||||
|
|
||||||
import '../../pocketbase/service/pocketbase.service.dart';
|
import '../../pocketbase/service/pocketbase.service.dart';
|
||||||
import '../types/widget_gallery.dart';
|
import '../types/widget_gallery.dart';
|
||||||
|
|
@ -12,6 +13,8 @@ class HomeLayoutService {
|
||||||
static final HomeLayoutService instance = HomeLayoutService._internal();
|
static final HomeLayoutService instance = HomeLayoutService._internal();
|
||||||
HomeLayoutService._internal();
|
HomeLayoutService._internal();
|
||||||
|
|
||||||
|
final BehaviorSubject refreshWidgets = BehaviorSubject();
|
||||||
|
|
||||||
Future<List<LayoutWidgetConfig>> loadLayoutWidgets() async {
|
Future<List<LayoutWidgetConfig>> loadLayoutWidgets() async {
|
||||||
try {
|
try {
|
||||||
_logger.info('Loading layout widgets');
|
_logger.info('Loading layout widgets');
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue