chore: more comment and 1 level deep BuildContext

This commit is contained in:
Kingkor Roy Tirtho
2023-06-10 12:12:49 +06:00
parent c6e484637a
commit 7dd9036e69
7 changed files with 53 additions and 41 deletions
@@ -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;