mirror of
https://github.com/hanskokx/arcane_framework.git
synced 2026-05-14 02:19:08 +02:00
Added examples for feature flags
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
enum Feature {
|
enum Feature {
|
||||||
logging(true),
|
logging(true),
|
||||||
|
authentication(true),
|
||||||
;
|
;
|
||||||
|
|
||||||
final bool enabledAtStartup;
|
final bool enabledAtStartup;
|
||||||
|
|||||||
+61
-4
@@ -102,6 +102,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||||||
maxCrossAxisExtent: 300,
|
maxCrossAxisExtent: 300,
|
||||||
padding: const EdgeInsets.all(16),
|
padding: const EdgeInsets.all(16),
|
||||||
children: [
|
children: [
|
||||||
|
// Theme
|
||||||
Card(
|
Card(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
@@ -216,6 +217,10 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Arcane.log(
|
||||||
|
"Setting ${Arcane.theme.currentThemeMode.name} theme color to ${themeColors[index]}",
|
||||||
|
);
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
color: themeColors[index],
|
color: themeColors[index],
|
||||||
@@ -238,6 +243,8 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// Authentication
|
||||||
Card(
|
Card(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
@@ -250,8 +257,8 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||||||
style: Theme.of(context).textTheme.headlineSmall,
|
style: Theme.of(context).textTheme.headlineSmall,
|
||||||
),
|
),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
child: Text(isSignedIn ? "Sign out" : "Sign in"),
|
onPressed: Feature.authentication.enabled
|
||||||
onPressed: () async {
|
? () async {
|
||||||
if (isSignedIn) {
|
if (isSignedIn) {
|
||||||
await Arcane.auth.logOut(
|
await Arcane.auth.logOut(
|
||||||
onLoggedOut: () async {
|
onLoggedOut: () async {
|
||||||
@@ -269,7 +276,9 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
: null,
|
||||||
|
child: Text(isSignedIn ? "Sign out" : "Sign in"),
|
||||||
),
|
),
|
||||||
Center(
|
Center(
|
||||||
child: Text("Status: ${Arcane.auth.status.name}"),
|
child: Text("Status: ${Arcane.auth.status.name}"),
|
||||||
@@ -278,9 +287,50 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// Feature flags
|
||||||
|
Card(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"Feature Flags",
|
||||||
|
style: Theme.of(context).textTheme.headlineSmall,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: ListView.builder(
|
||||||
|
itemCount: Feature.values.length,
|
||||||
|
itemBuilder: (context, i) {
|
||||||
|
final Feature feature = Feature.values[i];
|
||||||
|
return Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Text(feature.name),
|
||||||
|
Switch(
|
||||||
|
value: feature.enabled,
|
||||||
|
onChanged: (_) {
|
||||||
|
feature.enabled
|
||||||
|
? feature.disable()
|
||||||
|
: feature.enable();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
// Logging
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(16.0),
|
padding: const EdgeInsets.all(16.0),
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
@@ -299,6 +349,13 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||||||
fontStyle: FontStyle.italic,
|
fontStyle: FontStyle.italic,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
if (Feature.logging.disabled)
|
||||||
|
Text(
|
||||||
|
"Logging feature is disabled.",
|
||||||
|
style: Theme.of(context).textTheme.labelSmall?.copyWith(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
itemCount: latestLogs.length,
|
itemCount: latestLogs.length,
|
||||||
@@ -320,7 +377,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
_subscription = Arcane.logger.logStream.listen((message) {
|
_subscription = Arcane.logger.logStream.listen((message) {
|
||||||
setState(() {
|
setState(() {
|
||||||
latestLogs.insert(0, message);
|
if (Feature.logging.enabled) latestLogs.insert(0, message);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user