removed dependOnQuery from beacuse of infinite renders

example created for various usecases with various features
hooks now use standard hook API instead of using Hook Class
variable query & mutation not working bug fix
mutation onMutate listeners not getting called bug fix
This commit is contained in:
Kingkor Roy Tirtho
2022-06-24 12:51:27 +06:00
parent 2ead7fd2be
commit d8024714cd
27 changed files with 1117 additions and 680 deletions
+46 -150
View File
@@ -1,11 +1,17 @@
import 'dart:math';
import 'package:example/another_component.dart';
import 'package:example/dependent_query_example.dart';
import 'package:example/hooks_example.dart';
import 'package:example/lazy_query.dart';
import 'package:example/mutation_example.dart';
import 'package:example/query_with_external_data.dart';
import 'package:example/components/basic_mutation.dart';
import 'package:example/components/basic_query.dart';
import 'package:example/components/hooks/basic_hook_mutation.dart';
import 'package:example/components/hooks/basic_hook_query.dart';
import 'package:example/components/hooks/lazy_hook_query.dart';
import 'package:example/components/hooks/mutation_hook_variable_key.dart';
import 'package:example/components/hooks/query_hook_external_data.dart';
import 'package:example/components/hooks/query_hook_variable_key.dart';
import 'package:example/components/lazy_query.dart';
import 'package:example/components/mutation_variable_key.dart';
import 'package:example/components/query_external_data.dart';
import 'package:example/components/query_variable_key.dart';
import 'package:fl_query/fl_query.dart';
import 'package:flutter/material.dart';
import 'dart:async';
@@ -33,21 +39,6 @@ class MyApp extends StatelessWidget {
}
}
final successJob = QueryJob<String, void>(
queryKey: "greetings",
task: (queryKey, _, __) => Future.delayed(const Duration(seconds: 2),
() => "Welcome ($queryKey) ${Random.secure().nextInt(100)}"),
);
final failedJob = QueryJob<String, void>(
queryKey: "failure",
task: (queryKey, _, __) => Random().nextBool()
? Future.error("[$queryKey] Failed for unknown reason")
: Future.value(
"Success, you'll get slowly ${Random().nextInt(100)}!",
),
);
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@@ -56,142 +47,47 @@ class MyHomePage extends StatefulWidget {
}
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
print("LIFE CYCLE STATE: $state");
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Fl Query Example"),
),
body: Column(
children: [
Row(
children: [
QueryBuilder<String, void>(
job: successJob,
externalData: null,
builder: (context, query) {
if (!query.hasData || query.isLoading || query.isRefetching) {
return const CircularProgressIndicator();
}
return TextButton(
child: Text(query.data!),
onPressed: () async {
await query.refetch();
},
);
},
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
// Regular Flutter Examples
const BasicQueryExample(),
const QueryExternalDataExample(),
const LazyQueryExample(),
const QueryVariableKeyExample(),
const Divider(),
const BasicMutationExample(),
const MutationVariableKeyExample(),
const Divider(color: Colors.amber, thickness: 5),
Align(
alignment: Alignment.topLeft,
child: Text(
"!Warning! Cool people only...\nFlutter Hooks Example",
style: Theme.of(context).textTheme.headline3,
),
QueryBuilder<String, void>(
job: successJob,
externalData: null,
builder: (context, query) {
if (!query.hasData || query.isLoading || query.isRefetching) {
return const CircularProgressIndicator();
}
return ElevatedButton(
child: Text(query.data!),
onPressed: () async {
await query.refetch();
},
);
},
),
QueryBuilder<String, void>(
job: failedJob,
externalData: null,
builder: (context, query) {
return Row(
children: [
if (query.hasError)
Text(
"${query.error}. Retrying: ${query.retryAttempts}",
),
if (query.hasData)
Text(
"Success after ${query.retryAttempts}. Data: ${query.data}"),
ElevatedButton(
child: Text("Refetch ${query.queryKey}"),
onPressed: () => query.refetch(),
)
],
);
},
),
],
),
ElevatedButton(
child: const Text("External Data Example"),
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const QueryWithExternalData(),
),
);
},
),
const SizedBox(height: 10),
ElevatedButton(
child: const Text("Non Enabled Query Example"),
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const LazyQuery(),
),
);
},
),
const SizedBox(height: 10),
ElevatedButton(
child: const Text("Mutation Example"),
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const MutationExample(),
),
);
},
),
ElevatedButton(
child: const Text("flutter_hooks Example"),
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const HookExample(),
),
);
},
),
ElevatedButton(
child: const Text("Dependent Query Example"),
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const DependentQueryExample(),
),
);
},
),
const AnotherComponent(),
],
),
),
const Divider(color: Colors.amber, thickness: 5),
// elite flutter_hooks examples for only elite flutter
// developers
const BasicHookQueryExample(),
const QueryHookExternalDataExample(),
const LazyHookQueryExample(),
const QueryHookVariableKeyExample(),
const Divider(),
const BasicHookMutationExample(),
const MutationHookVariableKeyExample(),
],
),
)),
);
}
}