chore: more comment and 1 level deep BuildContext
This commit is contained in:
@@ -334,6 +334,8 @@ class InfiniteQuery<DataType, ErrorType, PageType>
|
||||
///
|
||||
/// This is internally used to update queryFn when external data
|
||||
/// has changed. Used by [InfiniteQueryBuilder] and [QueryClient]
|
||||
///
|
||||
/// This can also refresh if [RefreshConfig.refreshOnQueryFnChange] is true
|
||||
void updateQueryFn(InfiniteQueryFn<DataType, PageType> queryFn) {
|
||||
if (_queryFn == queryFn) return;
|
||||
_queryFn = queryFn;
|
||||
|
||||
@@ -29,7 +29,11 @@ class InfiniteQueryBuilder<DataType, ErrorType, PageType>
|
||||
final ValueChanged<PageEvent<DataType, PageType>>? onData;
|
||||
final ValueChanged<PageEvent<ErrorType, PageType>>? onError;
|
||||
|
||||
// widget specific
|
||||
/// Toggle to fetch data on initial load or not
|
||||
///
|
||||
/// This is useful when you want to fetch data manually after certain action
|
||||
///
|
||||
/// Once user manually fetch data, this will be set to true internally
|
||||
final bool enabled;
|
||||
final InfiniteQueryBuilderFn<DataType, ErrorType, PageType> builder;
|
||||
|
||||
@@ -66,9 +70,9 @@ class _InfiniteQueryBuilderState<DataType, ErrorType, PageType>
|
||||
StreamSubscription<PageEvent<DataType, PageType>>? dataSubscription;
|
||||
StreamSubscription<PageEvent<ErrorType, PageType>>? errorSubscription;
|
||||
|
||||
Future<void> initialize() async {
|
||||
Future<void> initialize(QueryClient client) async {
|
||||
setState(() {
|
||||
_createQuery();
|
||||
_createQuery(client);
|
||||
|
||||
if (widget.onData != null)
|
||||
dataSubscription = query!.dataStream.listen(widget.onData);
|
||||
@@ -82,8 +86,8 @@ class _InfiniteQueryBuilderState<DataType, ErrorType, PageType>
|
||||
}
|
||||
}
|
||||
|
||||
void _createQuery() {
|
||||
query = QueryClient.of(context).createInfiniteQuery(
|
||||
void _createQuery(QueryClient client) {
|
||||
query = client.createInfiniteQuery(
|
||||
widget.queryKey,
|
||||
widget.queryFn,
|
||||
initialParam: widget.initialPage,
|
||||
@@ -98,7 +102,7 @@ class _InfiniteQueryBuilderState<DataType, ErrorType, PageType>
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
initialize();
|
||||
initialize(QueryClient.of(context));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -118,7 +122,7 @@ class _InfiniteQueryBuilderState<DataType, ErrorType, PageType>
|
||||
dataSubscription?.cancel();
|
||||
errorSubscription?.cancel();
|
||||
removeListener?.call();
|
||||
initialize();
|
||||
initialize(QueryClient.of(context));
|
||||
return;
|
||||
} else if (oldWidget.enabled != widget.enabled && widget.enabled) {
|
||||
query!.fetch();
|
||||
@@ -144,7 +148,7 @@ class _InfiniteQueryBuilderState<DataType, ErrorType, PageType>
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (query == null) {
|
||||
_createQuery();
|
||||
_createQuery(QueryClient.of(context));
|
||||
}
|
||||
return widget.builder(context, query!);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:fl_query/fl_query.dart';
|
||||
import 'package:fl_query/src/widgets/mixins/rebuilder.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fl_query/src/widgets/state_notifier_listenable.dart';
|
||||
|
||||
@@ -26,7 +27,8 @@ class InfiniteQueryListenable<DataType, ErrorType, PageType>
|
||||
}
|
||||
|
||||
class _InfiniteQueryListenableState<DataType, ErrorType, PageType>
|
||||
extends State<InfiniteQueryListenable<DataType, ErrorType, PageType>> {
|
||||
extends State<InfiniteQueryListenable<DataType, ErrorType, PageType>>
|
||||
with SafeRebuild {
|
||||
StreamSubscription<QueryCacheEvent>? _subscription;
|
||||
|
||||
@override
|
||||
@@ -37,9 +39,8 @@ class _InfiniteQueryListenableState<DataType, ErrorType, PageType>
|
||||
switch (event.type) {
|
||||
case QueryCacheEventType.addInfiniteQuery:
|
||||
case QueryCacheEventType.removeInfiniteQuery:
|
||||
if (mounted &&
|
||||
(event.data as InfiniteQuery).key == widget.queryKey) {
|
||||
setState(() {});
|
||||
if ((event.data as InfiniteQuery).key == widget.queryKey) {
|
||||
rebuild();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -73,7 +73,7 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
|
||||
|
||||
RecoveryType? recoveryData;
|
||||
|
||||
void subscribeOnMutate() {
|
||||
void subscribeOnMutate(QueryClient client) {
|
||||
if (widget.onMutate != null)
|
||||
mutationSubscription = mutation!.mutationStream.listen(
|
||||
(event) async {
|
||||
@@ -81,7 +81,7 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
|
||||
|
||||
if (widget.onData != null) {
|
||||
dataSubscription?.cancel();
|
||||
subscribeOnData();
|
||||
subscribeOnData(client);
|
||||
}
|
||||
|
||||
if (widget.onError != null) {
|
||||
@@ -92,7 +92,7 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
|
||||
);
|
||||
}
|
||||
|
||||
void subscribeOnData() {
|
||||
void subscribeOnData(QueryClient client) {
|
||||
if (widget.onData != null ||
|
||||
widget.refreshInfiniteQueries != null ||
|
||||
widget.refreshQueries != null)
|
||||
@@ -100,11 +100,10 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
|
||||
(event) {
|
||||
final data = widget.onData?.call(event, recoveryData);
|
||||
if (widget.refreshQueries != null && mounted) {
|
||||
QueryClient.of(context).refreshQueries(widget.refreshQueries!);
|
||||
client.refreshQueries(widget.refreshQueries!);
|
||||
}
|
||||
if (widget.refreshInfiniteQueries != null && mounted) {
|
||||
QueryClient.of(context)
|
||||
.refreshInfiniteQueries(widget.refreshInfiniteQueries!);
|
||||
client.refreshInfiniteQueries(widget.refreshInfiniteQueries!);
|
||||
}
|
||||
return data;
|
||||
},
|
||||
@@ -120,18 +119,18 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> initialize() async {
|
||||
Future<void> initialize(QueryClient client) async {
|
||||
setState(() {
|
||||
_createMutation();
|
||||
subscribeOnMutate();
|
||||
subscribeOnData();
|
||||
_createMutation(client);
|
||||
subscribeOnMutate(client);
|
||||
subscribeOnData(client);
|
||||
subscribeOnError();
|
||||
removeListener = mutation!.addListener(rebuild);
|
||||
});
|
||||
}
|
||||
|
||||
void _createMutation() {
|
||||
mutation = QueryClient.of(context).createMutation(
|
||||
void _createMutation(QueryClient client) {
|
||||
mutation = client.createMutation(
|
||||
widget.mutationKey,
|
||||
widget.mutationFn,
|
||||
retryConfig: widget.retryConfig,
|
||||
@@ -142,7 +141,7 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||
await initialize();
|
||||
await initialize(QueryClient.of(context));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -161,12 +160,14 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
|
||||
) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
|
||||
final client = QueryClient.of(context);
|
||||
|
||||
if (oldWidget.mutationKey != widget.mutationKey) {
|
||||
mutationSubscription?.cancel();
|
||||
dataSubscription?.cancel();
|
||||
errorSubscription?.cancel();
|
||||
removeListener?.call();
|
||||
initialize();
|
||||
initialize(client);
|
||||
return;
|
||||
}
|
||||
if (oldWidget.mutationFn != widget.mutationFn) {
|
||||
@@ -174,15 +175,15 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
|
||||
}
|
||||
if (oldWidget.onMutate != widget.onMutate) {
|
||||
mutationSubscription?.cancel();
|
||||
subscribeOnMutate();
|
||||
subscribeOnMutate(client);
|
||||
}
|
||||
if (oldWidget.onData != widget.onData ||
|
||||
oldWidget.refreshQueries != widget.refreshQueries ||
|
||||
oldWidget.refreshInfiniteQueries != widget.refreshInfiniteQueries) {
|
||||
dataSubscription?.cancel();
|
||||
subscribeOnData();
|
||||
subscribeOnData(client);
|
||||
mutationSubscription?.cancel();
|
||||
subscribeOnMutate();
|
||||
subscribeOnMutate(client);
|
||||
}
|
||||
if (oldWidget.onError != widget.onError) {
|
||||
errorSubscription?.cancel();
|
||||
@@ -193,7 +194,7 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (mutation == null) {
|
||||
_createMutation();
|
||||
_createMutation(QueryClient.of(context));
|
||||
}
|
||||
return widget.builder(context, mutation!);
|
||||
}
|
||||
|
||||
@@ -62,8 +62,8 @@ class _QueryBuilderState<DataType, ErrorType>
|
||||
StreamSubscription<DataType>? dataSubscription;
|
||||
StreamSubscription<ErrorType>? errorSubscription;
|
||||
|
||||
void _createQuery() {
|
||||
query = QueryClient.of(context).createQuery(
|
||||
void _createQuery(QueryClient client) {
|
||||
query = client.createQuery(
|
||||
widget.queryKey,
|
||||
widget.queryFn,
|
||||
initial: widget.initial,
|
||||
@@ -73,9 +73,9 @@ class _QueryBuilderState<DataType, ErrorType>
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> initialize() async {
|
||||
Future<void> initialize(QueryClient client) async {
|
||||
setState(() {
|
||||
_createQuery();
|
||||
_createQuery(client);
|
||||
if (widget.onData != null)
|
||||
dataSubscription = query!.dataStream.listen(widget.onData);
|
||||
if (widget.onData != null)
|
||||
@@ -92,7 +92,7 @@ class _QueryBuilderState<DataType, ErrorType>
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||
await initialize();
|
||||
await initialize(QueryClient.of(context));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ class _QueryBuilderState<DataType, ErrorType>
|
||||
dataSubscription?.cancel();
|
||||
errorSubscription?.cancel();
|
||||
removeListener?.call();
|
||||
initialize();
|
||||
initialize(QueryClient.of(context));
|
||||
return;
|
||||
} else if (oldWidget.enabled != widget.enabled && widget.enabled) {
|
||||
query!.fetch();
|
||||
@@ -137,7 +137,7 @@ class _QueryBuilderState<DataType, ErrorType>
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (query == null) {
|
||||
_createQuery();
|
||||
_createQuery(QueryClient.of(context));
|
||||
}
|
||||
return widget.builder(context, query!);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:fl_query/fl_query.dart';
|
||||
import 'package:fl_query/src/widgets/mixins/rebuilder.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fl_query/src/widgets/state_notifier_listenable.dart';
|
||||
|
||||
@@ -24,7 +25,7 @@ class QueryListenable<DataType, ErrorType> extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _QueryListenableState<DataType, ErrorType>
|
||||
extends State<QueryListenable<DataType, ErrorType>> {
|
||||
extends State<QueryListenable<DataType, ErrorType>> with SafeRebuild {
|
||||
StreamSubscription<QueryCacheEvent>? _subscription;
|
||||
|
||||
@override
|
||||
@@ -35,8 +36,8 @@ class _QueryListenableState<DataType, ErrorType>
|
||||
switch (event.type) {
|
||||
case QueryCacheEventType.addQuery:
|
||||
case QueryCacheEventType.removeQuery:
|
||||
if (mounted && (event.data as Query).key == widget.queryKey) {
|
||||
setState(() {});
|
||||
if ((event.data as Query).key == widget.queryKey) {
|
||||
rebuild();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -17,6 +17,7 @@ Mutation<DataType, ErrorType, VariablesType>
|
||||
List<String>? refreshInfiniteQueries,
|
||||
List<Object?>? keys,
|
||||
}) {
|
||||
final mounted = useIsMounted();
|
||||
final rebuild = useUpdater();
|
||||
final client = useQueryClient();
|
||||
final mutation =
|
||||
@@ -42,7 +43,9 @@ Mutation<DataType, ErrorType, VariablesType>
|
||||
useEffect(() {
|
||||
if (onMutate != null) {
|
||||
return mutation.mutationStream.listen((event) async {
|
||||
recoveryData.value = await onMutate.call(event);
|
||||
if (mounted()) {
|
||||
recoveryData.value = await onMutate.call(event);
|
||||
}
|
||||
}).cancel;
|
||||
}
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user