+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+class SettingsDialog extends StatelessWidget {
+ final GlobalKey<NavigatorState> settingsNavKey = GlobalKey<NavigatorState>();
+ Widget build(BuildContext context) {
+ initialRoute: 'settings/home',
+ onGenerateRoute: (routeSettings) {
+ bool fullScreen = false;
+ switch (routeSettings.name) {
+ builder = (BuildContext _) => SettingsHome(context);
+ builder = (BuildContext _) => SettingsAccentColor(context);
+ return MaterialPageRoute(
+ settings: routeSettings,
+ fullscreenDialog: fullScreen,
+class SettingsHome extends StatelessWidget {
+ final BuildContext topContext;
+ SettingsHome(this.topContext);
+ Widget build(BuildContext context) {
+ final container = SettingsContainer.of(topContext);
+ bool isAndroid = Theme.of(context).platform == TargetPlatform.android;
+ bool isDark = container.settings.isDark;
+ Color accentColor = container.settings.accentColor;
+ title: Text('Settings'),
+ onPressed: () => Navigator.of(topContext).pop(),
+ icon: Icon(Icons.close),
+ title: Text('Dark Mode'),
+ trailing: Switch.adaptive(
+ onChanged: (bool value) {
+ container.updateSettings(isDark: value);
+ activeColor: container.settings.accentColor,
+ title: Text('Accent Color'),
+ mainAxisAlignment: MainAxisAlignment.end,
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ Icon(Icons.chevron_right),
+ onTap: () => Navigator.pushNamed(context, 'settings/color'),
+ trailing: Icon(Icons.info_outline),
+ builder: (BuildContext _) {
+ String title = 'Open External';
+ 'Are you sure you want to navigate outside of app?';
+ content: Text(content),
+ onPressed: () => Navigator.pop(topContext),
+ onPressed: () => Navigator.pop(topContext),
+ : CupertinoAlertDialog(
+ content: Text(content),
+ isDestructiveAction: true,
+ onPressed: () => Navigator.pop(topContext),
+ onPressed: () => Navigator.pop(topContext),
+class SettingsAccentColor extends StatelessWidget {
+ final BuildContext topContext;
+ SettingsAccentColor(this.topContext);
+ Widget build(BuildContext context) {
+ final container = SettingsContainer.of(topContext);
+ Color accentColor = container.settings.accentColor;
+ Color iconColor = container.settings.textColor;
+ title: Text('Select Accent Color'),
+ body: ListView.builder(
+ itemBuilder: (context, index) {
+ trailing: accentColor == Colors.primaries[index]
+ Icons.radio_button_checked,
+ container.updateSettings(color: Colors.primaries[index]);
+ Navigator.pop(context, Colors.primaries[index]);
+ color: Colors.primaries[index],
+ margin: EdgeInsets.all(5.0),
+ itemCount: Colors.primaries.length,