diff --git a/packages/fl_query/example/lib/pages/infinite_query.dart b/packages/fl_query/example/lib/pages/infinite_query.dart index a9c12b9..72d6ce8 100644 --- a/packages/fl_query/example/lib/pages/infinite_query.dart +++ b/packages/fl_query/example/lib/pages/infinite_query.dart @@ -21,8 +21,7 @@ class _InfiniteQueryPageWidgetState extends State { super.initState(); controller.addListener(() async { if (controller.position.pixels == controller.position.maxScrollExtent) { - final query = QueryClient.of(context) - .getInfiniteQuery(const ValueKey("products")); + final query = QueryClient.of(context).getInfiniteQuery("products"); await query?.fetchNext(); } }); @@ -40,8 +39,8 @@ class _InfiniteQueryPageWidgetState extends State { appBar: AppBar( title: const Text('Infinite Query'), ), - floatingActionButton: InfiniteQueryListenable(const ValueKey("products"), - builder: (context, query) { + floatingActionButton: + InfiniteQueryListenable("products", builder: (context, query) { return FloatingActionButton( onPressed: () { query?.fetchNext(); @@ -49,8 +48,8 @@ class _InfiniteQueryPageWidgetState extends State { child: Text(query?.pages.length.toString() ?? "-69"), ); }), - body: InfiniteQueryBuilder( - const ValueKey("products"), + body: InfiniteQueryBuilder( + "products", (page) async { final res = await get(Uri.parse( "https://dummyjson.com/products?limit=10&skip=${page * 10}", diff --git a/packages/fl_query/example/lib/pages/mutation/mutation.dart b/packages/fl_query/example/lib/pages/mutation/mutation.dart index fa98adc..4e134b0 100644 --- a/packages/fl_query/example/lib/pages/mutation/mutation.dart +++ b/packages/fl_query/example/lib/pages/mutation/mutation.dart @@ -35,9 +35,9 @@ class _MutationPageState extends State { appBar: AppBar( title: const Text('Mutation'), ), - body: MutationBuilder, dynamic, String, - Map, dynamic>( - const ValueKey('sign-up'), + body: MutationBuilder, dynamic, Map, + dynamic>( + 'sign-up', (variables) { return Future.delayed( const Duration(seconds: 1), @@ -56,9 +56,7 @@ class _MutationPageState extends State { print('onData: $data'); print('recoveryData: $recoveryData'); }, - refreshQueries: const [ - ValueKey('hello'), - ], + refreshQueries: const ['hello'], builder: (context, mutation) { if (mutation.hasData) { return ListView( diff --git a/packages/fl_query/example/lib/pages/query.dart b/packages/fl_query/example/lib/pages/query.dart index 0d4fbae..c4b8a4f 100644 --- a/packages/fl_query/example/lib/pages/query.dart +++ b/packages/fl_query/example/lib/pages/query.dart @@ -13,8 +13,8 @@ class QueryPage extends StatelessWidget { appBar: AppBar( title: const Text('Query'), ), - floatingActionButton: QueryListenable( - const ValueKey('hello'), builder: (context, query) { + floatingActionButton: + QueryListenable('hello', builder: (context, query) { if (query == null) { return const SizedBox(); } @@ -25,8 +25,8 @@ class QueryPage extends StatelessWidget { child: Text(query.data ?? 'No Data'), ); }), - body: QueryBuilder( - const ValueKey('hello'), + body: QueryBuilder( + 'hello', () { return Future.delayed( const Duration(seconds: 6), () => 'Hello World! $value'); diff --git a/packages/fl_query/lib/src/core/client.dart b/packages/fl_query/lib/src/core/client.dart index e1f7908..e211dcb 100644 --- a/packages/fl_query/lib/src/core/client.dart +++ b/packages/fl_query/lib/src/core/client.dart @@ -16,8 +16,8 @@ class QueryClient { QueryClient({QueryCache? cache}) : this.cache = cache ?? QueryCache(); - Query createQuery( - ValueKey key, + Query createQuery( + String key, QueryFn queryFn, { DataType? initial, RetryConfig retryConfig = DefaultConstants.retryConfig, @@ -27,7 +27,7 @@ class QueryClient { final query = cache.queries .firstWhere( (query) => query.key == key, - orElse: () => Query( + orElse: () => Query( key, queryFn, initial: initial, @@ -36,21 +36,21 @@ class QueryClient { jsonConfig: jsonConfig, ), ) - .cast(); + .cast(); query.updateQueryFn(queryFn); cache.addQuery(query); return query; } - Future fetchQuery( - ValueKey key, + Future fetchQuery( + String key, QueryFn queryFn, { DataType? initial, RetryConfig retryConfig = DefaultConstants.retryConfig, RefreshConfig refreshConfig = DefaultConstants.refreshConfig, JsonConfig? jsonConfig, }) async { - final query = createQuery( + final query = createQuery( key, queryFn, initial: initial, @@ -61,33 +61,33 @@ class QueryClient { return await query.fetch(); } - Query? getQuery( - ValueKey key) { + Query? getQuery( + String key, + ) { return cache.queries .firstWhereOrNull((query) => query.key == key) - ?.cast(); + ?.cast(); } - List getQueries(List keys) { + List getQueries(List keys) { return cache.queries.where((query) => keys.contains(query.key)).toList(); } - Future refreshQuery( - ValueKey key, + Future refreshQuery(String key, {DataType? initial}) async { - final query = getQuery(key); + final query = getQuery(key); if (query == null) return null; return await query.refresh(); } - Future refreshQueries(List keys) async { + Future refreshQueries(List keys) async { final queries = getQueries(keys); return await Future.wait(queries.map((query) => query.refresh())); } - InfiniteQuery - createInfiniteQuery( - ValueKey key, + InfiniteQuery + createInfiniteQuery( + String key, InfiniteQueryFn queryFn, { required InfiniteQueryNextPage nextPage, required PageType initialParam, @@ -98,7 +98,7 @@ class QueryClient { final query = cache.infiniteQueries .firstWhere( (query) => query.key == key, - orElse: () => InfiniteQuery( + orElse: () => InfiniteQuery( key, queryFn, nextPage: nextPage, @@ -108,20 +108,20 @@ class QueryClient { jsonConfig: jsonConfig, ), ) - .cast(); + .cast(); query.updateQueryFn(queryFn); cache.addInfiniteQuery(query); return query; } - Future fetchInfiniteQuery( - ValueKey key, InfiniteQueryFn queryFn, + Future fetchInfiniteQuery( + String key, InfiniteQueryFn queryFn, {required InfiniteQueryNextPage nextPage, required PageType initialParam, RetryConfig retryConfig = DefaultConstants.retryConfig, RefreshConfig refreshConfig = DefaultConstants.refreshConfig, JsonConfig? jsonConfig}) async { - final query = createInfiniteQuery( + final query = createInfiniteQuery( key, queryFn, nextPage: nextPage, @@ -133,85 +133,83 @@ class QueryClient { return await query.fetch(); } - InfiniteQuery? - getInfiniteQuery( - ValueKey key) { + InfiniteQuery? + getInfiniteQuery(String key) { return cache.infiniteQueries .firstWhereOrNull((query) => query.key == key) - ?.cast(); + ?.cast(); } - List getInfiniteQueries(List keys) { + List getInfiniteQueries(List keys) { return cache.infiniteQueries .where((query) => keys.contains(query.key)) .toList(); } - Future - refreshInfiniteQuery( - ValueKey key, - [PageType? page]) async { - final query = getInfiniteQuery(key); + Future refreshInfiniteQuery( + String key, + [PageType? page]) async { + final query = getInfiniteQuery(key); if (query == null) return null; return await query.refresh(page); } Future?> - refreshInfiniteQueryAllPages( - ValueKey key) async { - final query = getInfiniteQuery(key); + refreshInfiniteQueryAllPages( + String key) async { + final query = getInfiniteQuery(key); if (query == null) return []; return await query.refreshAll(); } - Future refreshInfiniteQueries(List keys) async { + Future refreshInfiniteQueries(List keys) async { final queries = getInfiniteQueries(keys); return await Future.wait(queries.map((query) => query.refresh())); } - Future> refreshInfiniteQueriesAllPages( - List keys) async { + Future> refreshInfiniteQueriesAllPages( + List keys) async { final queries = getInfiniteQueries(keys); return await Future.wait(queries.map( (query) async => MapEntry(query.key, await query.refreshAll()))) .then((qs) => Map.fromEntries(qs)); } - Mutation - createMutation( - ValueKey key, + Mutation + createMutation( + String key, MutationFn mutationFn, { RetryConfig retryConfig = DefaultConstants.retryConfig, }) { final mutation = cache.mutations .firstWhere( (query) => query.key == key, - orElse: () => Mutation( + orElse: () => Mutation( key, mutationFn, retryConfig: retryConfig, ), ) - .cast(); + .cast(); mutation.updateMutationFn(mutationFn); cache.addMutation(mutation); return mutation; } - Future mutateMutation( - ValueKey key, + Future mutateMutation( + String key, VariablesType variables, { MutationFn? mutationFn, RetryConfig retryConfig = DefaultConstants.retryConfig, - List refreshQueries = const [], - List refreshInfiniteQueries = const [], + List refreshQueries = const [], + List refreshInfiniteQueries = const [], }) async { - final mutation = getMutation( + final mutation = getMutation( key, ) ?? (mutationFn != null - ? createMutation( + ? createMutation( key, mutationFn, retryConfig: retryConfig, @@ -223,12 +221,11 @@ class QueryClient { return result; } - Mutation? - getMutation( - ValueKey key) { + Mutation? + getMutation(String key) { return cache.mutations .firstWhereOrNull((query) => query.key == key) - ?.cast(); + ?.cast(); } static QueryClient of(BuildContext context) { diff --git a/packages/fl_query/lib/src/core/infinite_query.dart b/packages/fl_query/lib/src/core/infinite_query.dart index 715b71f..1b32e1a 100644 --- a/packages/fl_query/lib/src/core/infinite_query.dart +++ b/packages/fl_query/lib/src/core/infinite_query.dart @@ -7,7 +7,6 @@ import 'package:fl_query/src/collections/refresh_config.dart'; import 'package:fl_query/src/collections/retry_config.dart'; import 'package:fl_query/src/core/retryer.dart'; import 'package:fl_query/src/core/validation.dart'; -import 'package:flutter/material.dart' hide Listener; import 'package:hive_flutter/adapters.dart'; import 'package:mutex/mutex.dart'; import 'package:state_notifier/state_notifier.dart'; @@ -104,10 +103,10 @@ class PageEvent { } } -class InfiniteQuery +class InfiniteQuery extends StateNotifier> with Retryer { - final ValueKey key; + final String key; final RetryConfig retryConfig; final RefreshConfig refreshConfig; final JsonConfig? jsonConfig; @@ -135,7 +134,7 @@ class InfiniteQuery )) { if (jsonConfig != null) { _mutex.protect(() async { - final Map? json = await _box.get(key.value); + final Map? json = await _box.get(key); if (json != null) { state = state.copyWith( pages: json.entries @@ -223,7 +222,7 @@ class InfiniteQuery _dataController.add(PageEvent.fromPage(dataPage)); if (jsonConfig != null) { await _box.put( - key.value, + key, Map.fromEntries( state.pages.map( (e) => MapEntry( @@ -359,9 +358,8 @@ class InfiniteQuery @override int get hashCode => key.hashCode; - InfiniteQuery - cast() { - return this - as InfiniteQuery; + InfiniteQuery + cast() { + return this as InfiniteQuery; } } diff --git a/packages/fl_query/lib/src/core/mutation.dart b/packages/fl_query/lib/src/core/mutation.dart index 1d5c0b3..2efa7b8 100644 --- a/packages/fl_query/lib/src/core/mutation.dart +++ b/packages/fl_query/lib/src/core/mutation.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:fl_query/src/collections/default_configs.dart'; import 'package:fl_query/src/collections/retry_config.dart'; import 'package:fl_query/src/core/retryer.dart'; -import 'package:flutter/material.dart'; import 'package:mutex/mutex.dart'; import 'package:state_notifier/state_notifier.dart'; @@ -39,10 +38,10 @@ class MutationState { } } -class Mutation +class Mutation extends StateNotifier> with Retryer { - final ValueKey key; + final String key; final MutationFn mutationFn; final RetryConfig retryConfig; @@ -123,16 +122,14 @@ class Mutation @override operator ==(Object other) { - return identical(this, other) || - (other is Mutation && key.value == other.key.value); + return identical(this, other) || (other is Mutation && key == other.key); } @override int get hashCode => key.hashCode; - Mutation - cast() { - return this - as Mutation; + Mutation + cast() { + return this as Mutation; } } diff --git a/packages/fl_query/lib/src/core/query.dart b/packages/fl_query/lib/src/core/query.dart index 8e04c4a..61dc650 100644 --- a/packages/fl_query/lib/src/core/query.dart +++ b/packages/fl_query/lib/src/core/query.dart @@ -6,7 +6,6 @@ import 'package:fl_query/src/collections/refresh_config.dart'; import 'package:fl_query/src/collections/retry_config.dart'; import 'package:fl_query/src/core/retryer.dart'; import 'package:fl_query/src/core/validation.dart'; -import 'package:flutter/material.dart' hide Listener; import 'package:hive_flutter/adapters.dart'; import 'package:mutex/mutex.dart'; import 'package:state_notifier/state_notifier.dart'; @@ -45,10 +44,10 @@ class QueryState with Invalidation { } } -class Query +class Query extends StateNotifier> with Retryer { - final ValueKey key; + final String key; final RefreshConfig refreshConfig; final RetryConfig retryConfig; @@ -178,15 +177,13 @@ class Query @override operator ==(Object other) { - return identical(this, other) || - (other is Query && key.value == other.key.value); + return identical(this, other) || (other is Query && key == other.key); } @override int get hashCode => key.hashCode; - Query - cast() { - return this as Query; + Query cast() { + return this as Query; } } diff --git a/packages/fl_query/lib/src/widgets/infinite_query_builder.dart b/packages/fl_query/lib/src/widgets/infinite_query_builder.dart index afec9a4..c63bd69 100644 --- a/packages/fl_query/lib/src/widgets/infinite_query_builder.dart +++ b/packages/fl_query/lib/src/widgets/infinite_query_builder.dart @@ -8,16 +8,15 @@ import 'package:fl_query/src/core/client.dart'; import 'package:fl_query/src/core/infinite_query.dart'; import 'package:flutter/material.dart'; -typedef InfiniteQueryBuilderFn = Widget - Function( +typedef InfiniteQueryBuilderFn = Widget Function( BuildContext context, - InfiniteQuery query, + InfiniteQuery query, ); -class InfiniteQueryBuilder +class InfiniteQueryBuilder extends StatefulWidget { final InfiniteQueryFn queryFn; - final ValueKey queryKey; + final String queryKey; final PageType initialPage; final InfiniteQueryNextPage nextPage; @@ -31,7 +30,7 @@ class InfiniteQueryBuilder // widget specific final bool enabled; - final InfiniteQueryBuilderFn builder; + final InfiniteQueryBuilderFn builder; const InfiniteQueryBuilder( this.queryKey, @@ -52,15 +51,13 @@ class InfiniteQueryBuilder ); @override - State> - createState() => - _InfiniteQueryBuilderState(); + State> createState() => + _InfiniteQueryBuilderState(); } -class _InfiniteQueryBuilderState - extends State< - InfiniteQueryBuilder> { - InfiniteQuery? query; +class _InfiniteQueryBuilderState + extends State> { + InfiniteQuery? query; VoidCallback? removeListener; diff --git a/packages/fl_query/lib/src/widgets/infinite_query_listenable.dart b/packages/fl_query/lib/src/widgets/infinite_query_listenable.dart index b88bd35..8a55692 100644 --- a/packages/fl_query/lib/src/widgets/infinite_query_listenable.dart +++ b/packages/fl_query/lib/src/widgets/infinite_query_listenable.dart @@ -4,17 +4,16 @@ import 'package:fl_query/fl_query.dart'; import 'package:flutter/material.dart'; import 'package:fl_query/src/widgets/state_notifier_listenable.dart'; -typedef InfiniteQueryListenableBuilder - = Widget Function( +typedef InfiniteQueryListenableBuilder = Widget + Function( BuildContext context, - InfiniteQuery? query, + InfiniteQuery? query, ); -class InfiniteQueryListenable +class InfiniteQueryListenable extends StatefulWidget { - final ValueKey queryKey; - final InfiniteQueryListenableBuilder - builder; + final String queryKey; + final InfiniteQueryListenableBuilder builder; const InfiniteQueryListenable( this.queryKey, { required this.builder, @@ -22,14 +21,12 @@ class InfiniteQueryListenable }); @override - State> - createState() => _InfiniteQueryListenableState(); + State> createState() => + _InfiniteQueryListenableState(); } -class _InfiniteQueryListenableState - extends State< - InfiniteQueryListenable> { +class _InfiniteQueryListenableState + extends State> { StreamSubscription? _subscription; @override @@ -60,8 +57,7 @@ class _InfiniteQueryListenableState @override Widget build(BuildContext context) { final query = QueryClient.of(context) - .getInfiniteQuery( - widget.queryKey); + .getInfiniteQuery(widget.queryKey); if (query == null) { return widget.builder(context, null); @@ -70,8 +66,7 @@ class _InfiniteQueryListenableState InfiniteQueryState>( notifier: query, builder: (context, notifier) { - final query = - notifier as InfiniteQuery; + final query = notifier as InfiniteQuery; return widget.builder(context, query); }, ); diff --git a/packages/fl_query/lib/src/widgets/mutation_builder.dart b/packages/fl_query/lib/src/widgets/mutation_builder.dart index 6230ed3..9c8e2b4 100644 --- a/packages/fl_query/lib/src/widgets/mutation_builder.dart +++ b/packages/fl_query/lib/src/widgets/mutation_builder.dart @@ -7,10 +7,9 @@ import 'package:fl_query/src/core/mutation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/foundation/diagnostics.dart'; -typedef MutationBuilderFn = Widget - Function( +typedef MutationBuilderFn = Widget Function( BuildContext context, - Mutation mutation, + Mutation mutation, ); typedef MutationOnDataFn = void Function( DataType data, @@ -25,10 +24,10 @@ typedef MutationOnMutationFn VariablesType variables, ); -class MutationBuilder +class MutationBuilder extends StatefulWidget { final MutationFn mutationFn; - final ValueKey mutationKey; + final String mutationKey; final RetryConfig retryConfig; @@ -37,9 +36,9 @@ class MutationBuilder final MutationOnMutationFn? onMutate; // widget specific - final MutationBuilderFn builder; - final List? refreshQueries; - final List? refreshInfiniteQueries; + final MutationBuilderFn builder; + final List? refreshQueries; + final List? refreshInfiniteQueries; const MutationBuilder( this.mutationKey, @@ -55,18 +54,15 @@ class MutationBuilder }); @override - State< - MutationBuilder> createState() => _MutationBuilderState(); + State> + createState() => _MutationBuilderState(); } -class _MutationBuilderState +class _MutationBuilderState extends State< - MutationBuilder> { - Mutation? mutation; + MutationBuilder> { + Mutation? mutation; VoidCallback? removeListener; @@ -162,8 +158,7 @@ class _MutationBuilderState - oldWidget, + MutationBuilder oldWidget, ) { super.didUpdateWidget(oldWidget); @@ -208,12 +203,11 @@ class _MutationBuilderState>( + DiagnosticsProperty>( 'mutation', mutation), ); properties.add( - DiagnosticsProperty>('mutationKey', widget.mutationKey), + DiagnosticsProperty('mutationKey', widget.mutationKey), ); properties.add( DiagnosticsProperty>( @@ -242,7 +236,7 @@ class _MutationBuilderState>( + MutationBuilderFn>( 'builder', widget.builder, ), diff --git a/packages/fl_query/lib/src/widgets/query_builder.dart b/packages/fl_query/lib/src/widgets/query_builder.dart index be188f4..5dbe110 100644 --- a/packages/fl_query/lib/src/widgets/query_builder.dart +++ b/packages/fl_query/lib/src/widgets/query_builder.dart @@ -9,14 +9,14 @@ import 'package:fl_query/src/core/query.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/foundation/diagnostics.dart'; -typedef QueryBuilderFn = Widget Function( +typedef QueryBuilderFn = Widget Function( BuildContext context, - Query query, + Query query, ); -class QueryBuilder extends StatefulWidget { +class QueryBuilder extends StatefulWidget { final QueryFn queryFn; - final ValueKey queryKey; + final String queryKey; final DataType? initial; @@ -29,7 +29,7 @@ class QueryBuilder extends StatefulWidget { // widget specific final bool enabled; - final QueryBuilderFn builder; + final QueryBuilderFn builder; const QueryBuilder( this.queryKey, @@ -49,13 +49,13 @@ class QueryBuilder extends StatefulWidget { ); @override - State> createState() => - _QueryBuilderState(); + State> createState() => + _QueryBuilderState(); } -class _QueryBuilderState - extends State> { - Query? query; +class _QueryBuilderState + extends State> { + Query? query; VoidCallback? removeListener; @@ -107,7 +107,7 @@ class _QueryBuilderState @override void didUpdateWidget( - QueryBuilder oldWidget, + QueryBuilder oldWidget, ) { super.didUpdateWidget(oldWidget); @@ -147,13 +147,13 @@ class _QueryBuilderState void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); properties.add( - DiagnosticsProperty>('query', query), + DiagnosticsProperty>('query', query), ); properties.add( - DiagnosticsProperty>('queryKey', widget.queryKey), + DiagnosticsProperty('queryKey', widget.queryKey), ); properties.add( - DiagnosticsProperty>( + DiagnosticsProperty>( 'builder', widget.builder), ); properties.add(DiagnosticsProperty('initial', widget.initial)); diff --git a/packages/fl_query/lib/src/widgets/query_listenable.dart b/packages/fl_query/lib/src/widgets/query_listenable.dart index 72fe308..1170197 100644 --- a/packages/fl_query/lib/src/widgets/query_listenable.dart +++ b/packages/fl_query/lib/src/widgets/query_listenable.dart @@ -4,14 +4,14 @@ import 'package:fl_query/fl_query.dart'; import 'package:flutter/material.dart'; import 'package:fl_query/src/widgets/state_notifier_listenable.dart'; -typedef QueryListenableBuilder = Widget Function( +typedef QueryListenableBuilder = Widget Function( BuildContext context, - Query? query, + Query? query, ); -class QueryListenable extends StatefulWidget { - final ValueKey queryKey; - final QueryListenableBuilder builder; +class QueryListenable extends StatefulWidget { + final String queryKey; + final QueryListenableBuilder builder; const QueryListenable( this.queryKey, { required this.builder, @@ -19,12 +19,12 @@ class QueryListenable extends StatefulWidget { }); @override - State> createState() => - _QueryListenableState(); + State> createState() => + _QueryListenableState(); } -class _QueryListenableState - extends State> { +class _QueryListenableState + extends State> { StreamSubscription? _subscription; @override @@ -53,8 +53,8 @@ class _QueryListenableState @override Widget build(BuildContext context) { - final query = QueryClient.of(context) - .getQuery(widget.queryKey); + final query = + QueryClient.of(context).getQuery(widget.queryKey); if (query == null) { return widget.builder(context, null); @@ -62,7 +62,7 @@ class _QueryListenableState return StateNotifierListenable>( notifier: query, builder: (context, notifier) { - final query = notifier as Query; + final query = notifier as Query; return widget.builder(context, query); }, );