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