feat: useInfiniteQuery hook add

This commit is contained in:
Kingkor Roy Tirtho
2023-02-23 23:21:57 +06:00
parent 7fabf44756
commit f9a5207403
7 changed files with 396 additions and 121 deletions
@@ -8,6 +8,7 @@ import 'package:fl_query/src/core/client.dart';
import 'package:fl_query/src/core/infinite_query.dart';
import 'package:fl_query/src/widgets/mixins/rebuilder.dart';
import 'package:flutter/material.dart';
import 'package:flutter/src/foundation/diagnostics.dart';
typedef InfiniteQueryBuilderFn<DataType, ErrorType, PageType> = Widget Function(
BuildContext context,
@@ -68,15 +69,7 @@ class _InfiniteQueryBuilderState<DataType, ErrorType, PageType>
Future<void> initialize() async {
setState(() {
query = QueryClient.of(context).createInfiniteQuery(
widget.queryKey,
widget.queryFn,
initialParam: widget.initialPage,
nextPage: widget.nextPage,
retryConfig: widget.retryConfig,
refreshConfig: widget.refreshConfig,
jsonConfig: widget.jsonConfig,
);
_createQuery();
if (widget.onData != null)
dataSubscription = query!.dataStream.listen(widget.onData);
@@ -90,6 +83,18 @@ class _InfiniteQueryBuilderState<DataType, ErrorType, PageType>
}
}
void _createQuery() {
query = QueryClient.of(context).createInfiniteQuery(
widget.queryKey,
widget.queryFn,
initialParam: widget.initialPage,
nextPage: widget.nextPage,
retryConfig: widget.retryConfig,
refreshConfig: widget.refreshConfig,
jsonConfig: widget.jsonConfig,
);
}
@override
void initState() {
super.initState();
@@ -140,8 +145,61 @@ class _InfiniteQueryBuilderState<DataType, ErrorType, PageType>
@override
Widget build(BuildContext context) {
if (query == null) {
return const SizedBox.shrink();
_createQuery();
}
return widget.builder(context, query!);
}
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty<
InfiniteQueryBuilderFn<DataType, ErrorType, PageType>>(
'builder',
widget.builder,
));
properties.add(DiagnosticsProperty<InfiniteQueryFn<DataType, PageType>>(
'queryFn',
widget.queryFn,
));
properties
.add(DiagnosticsProperty<InfiniteQueryNextPage<DataType, PageType>>(
'nextPage',
widget.nextPage,
));
properties.add(DiagnosticsProperty<PageType>(
'initialPage',
widget.initialPage,
));
properties.add(DiagnosticsProperty<RetryConfig>(
'retryConfig',
widget.retryConfig,
));
properties.add(DiagnosticsProperty<RefreshConfig>(
'refreshConfig',
widget.refreshConfig,
));
properties.add(DiagnosticsProperty<JsonConfig<DataType>>(
'jsonConfig',
widget.jsonConfig,
));
properties
.add(DiagnosticsProperty<ValueChanged<PageEvent<DataType, PageType>>>(
'onData',
widget.onData,
));
properties
.add(DiagnosticsProperty<ValueChanged<PageEvent<ErrorType, PageType>>>(
'onError',
widget.onError,
));
properties.add(DiagnosticsProperty<bool>(
'enabled',
widget.enabled,
));
properties.add(DiagnosticsProperty<String>(
'queryKey',
widget.queryKey,
));
}
}
@@ -123,11 +123,7 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
Future<void> initialize() async {
setState(() {
mutation = QueryClient.of(context).createMutation(
widget.mutationKey,
widget.mutationFn,
retryConfig: widget.retryConfig,
);
_createMutation();
subscribeOnMutate();
subscribeOnData();
subscribeOnError();
@@ -135,6 +131,14 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
});
}
void _createMutation() {
mutation = QueryClient.of(context).createMutation(
widget.mutationKey,
widget.mutationFn,
retryConfig: widget.retryConfig,
);
}
@override
void initState() {
super.initState();
@@ -190,7 +194,7 @@ class _MutationBuilderState<DataType, ErrorType, VariablesType, RecoveryType>
@override
Widget build(BuildContext context) {
if (mutation == null) {
return const SizedBox.shrink();
_createMutation();
}
return widget.builder(context, mutation!);
}
@@ -63,17 +63,20 @@ class _QueryBuilderState<DataType, ErrorType>
StreamSubscription<DataType>? dataSubscription;
StreamSubscription<ErrorType>? errorSubscription;
void _createQuery() {
query = QueryClient.of(context).createQuery(
widget.queryKey,
widget.queryFn,
initial: widget.initial,
retryConfig: widget.retryConfig,
refreshConfig: widget.refreshConfig,
jsonConfig: widget.jsonConfig,
);
}
Future<void> initialize() async {
setState(() {
query = QueryClient.of(context).createQuery(
widget.queryKey,
widget.queryFn,
initial: widget.initial,
retryConfig: widget.retryConfig,
refreshConfig: widget.refreshConfig,
jsonConfig: widget.jsonConfig,
);
_createQuery();
if (widget.onData != null)
dataSubscription = query!.dataStream.listen(widget.onData);
if (widget.onData != null)
@@ -135,7 +138,7 @@ class _QueryBuilderState<DataType, ErrorType>
@override
Widget build(BuildContext context) {
if (query == null) {
return const SizedBox.shrink();
_createQuery();
}
return widget.builder(context, query!);
}