From e3df5f14aeeed2db7aa356aa87906d77c956309c Mon Sep 17 00:00:00 2001 From: atanasyordanov21 <63714308+atanasyordanov21@users.noreply.github.com> Date: Tue, 16 Apr 2024 13:05:03 +0300 Subject: [PATCH] restore main.dart in example (#23) --- example/lib/main.dart | 194 ++++++++++++------------------------------ 1 file changed, 56 insertions(+), 138 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 5078d0e5..596eed2e 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,151 +1,69 @@ import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; -import 'package:zeta_example/pages/components/accordion_example.dart'; -import 'package:zeta_example/pages/components/app_bar_example.dart'; -import 'package:zeta_example/pages/components/avatar_example.dart'; -import 'package:zeta_example/pages/components/badges_example.dart'; -import 'package:zeta_example/pages/components/banner_example.dart'; -import 'package:zeta_example/pages/components/bottom_sheet_example.dart'; -import 'package:zeta_example/pages/components/breadcrumbs_example.dart'; -import 'package:zeta_example/pages/components/button_example.dart'; -import 'package:zeta_example/pages/components/checkbox_example.dart'; -import 'package:zeta_example/pages/components/chip_example.dart'; -import 'package:zeta_example/pages/components/date_input_example.dart'; -import 'package:zeta_example/pages/components/dialog_example.dart'; -import 'package:zeta_example/pages/components/dialpad_example.dart'; -import 'package:zeta_example/pages/components/dropdown_example.dart'; -import 'package:zeta_example/pages/components/list_item_example.dart'; -import 'package:zeta_example/pages/components/navigation_bar_example.dart'; -import 'package:zeta_example/pages/components/radio_example.dart'; -import 'package:zeta_example/pages/components/stepper_example.dart'; -import 'package:zeta_example/pages/components/switch_example.dart'; -import 'package:zeta_example/pages/components/snackbar_example.dart'; -import 'package:zeta_example/pages/components/tabs_example.dart'; -import 'package:zeta_example/pages/theme/color_example.dart'; -import 'package:zeta_example/pages/components/password_input_example.dart'; -import 'package:zeta_example/pages/components/progress_example.dart'; -import 'package:zeta_example/pages/assets/icons_example.dart'; -import 'package:zeta_example/pages/theme/radius_example.dart'; -import 'package:zeta_example/pages/theme/spacing_example.dart'; -import 'package:zeta_example/pages/theme/typography_example.dart'; -import 'package:zeta_example/widgets.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:zeta_example/theme_service.dart'; import 'package:zeta_flutter/zeta_flutter.dart'; +import 'home.dart'; -class Component { - final String name; - final WidgetBuilder pageBuilder; - final List children; - Component(this.name, this.pageBuilder, [this.children = const []]); -} - -final List components = [ - Component(AccordionExample.name, (context) => const AccordionExample()), - Component(AppBarExample.name, (context) => const AppBarExample()), - Component(AvatarExample.name, (context) => const AvatarExample()), - Component(BannerExample.name, (context) => const BannerExample()), - Component(BadgesExample.name, (context) => const BadgesExample()), - Component(BottomSheetExample.name, (context) => const BottomSheetExample()), - Component(BreadCrumbsExample.name, (context) => const BreadCrumbsExample()), - Component(ButtonExample.name, (context) => const ButtonExample()), - Component(CheckBoxExample.name, (context) => const CheckBoxExample()), - Component(ChipExample.name, (context) => const ChipExample()), - Component(ListItemExample.name, (context) => const ListItemExample()), - Component(NavigationBarExample.name, (context) => const NavigationBarExample()), - Component(PasswordInputExample.name, (context) => const PasswordInputExample()), - Component(DropdownExample.name, (context) => const DropdownExample()), - Component(ProgressExample.name, (context) => const ProgressExample()), - Component(SnackBarExample.name, (context) => const SnackBarExample()), - Component(StepperExample.name, (context) => const StepperExample()), - Component(TabsExample.name, (context) => const TabsExample()), - Component(DialPadExample.name, (context) => const DialPadExample()), - Component(RadioButtonExample.name, (context) => const RadioButtonExample()), - Component(SwitchExample.name, (context) => const SwitchExample()), - Component(DateInputExample.name, (context) => const DateInputExample()), - Component(DialogExample.name, (context) => const DialogExample()), -]; - -final List theme = [ - Component(ColorExample.name, (context) => const ColorExample()), - Component(TypographyExample.name, (context) => const TypographyExample()), - Component(RadiusExample.name, (context) => const RadiusExample()), - Component(SpacingExample.name, (context) => const SpacingExample()), -]; -final List assets = [ - Component(IconsExample.name, (context) => const IconsExample()), -]; +void main() async { + WidgetsFlutterBinding.ensureInitialized(); -class Home extends StatefulWidget { - const Home({super.key}); + final preferences = await SharedPreferences.getInstance(); + final themeService = SharedPrefsThemeService(preferences); + final themePreferences = await themeService.loadTheme(); - @override - State createState() => _HomeState(); + runApp( + ZetaExample( + themeService: themeService, + initialThemeData: themePreferences.$1 ?? ZetaThemeData(), + initialThemeMode: themePreferences.$2 ?? ThemeMode.system, + initialContrast: themePreferences.$3 ?? ZetaContrast.aa, + ), + ); } -final GoRouter router = GoRouter( - routes: [ - GoRoute( - path: '/', - name: 'Home', - builder: (_, __) => const Home(), - routes: [ - ...[ - ...components, - ...assets, - ...theme, - ].map( - (e) => GoRoute( - path: e.name, - name: e.name, - builder: (_, __) => e.pageBuilder.call(_), - routes: e.children - .map((f) => GoRoute( - path: f.name, - name: f.name, - builder: (_, __) => f.pageBuilder(_), - )) - .toList(), - ), - ), - ], - ), - ], -); +class ZetaExample extends StatelessWidget { + const ZetaExample({ + super.key, + required this.themeService, + required this.initialContrast, + required this.initialThemeMode, + required this.initialThemeData, + }); + + final ZetaThemeService themeService; + final ZetaContrast initialContrast; + final ThemeMode initialThemeMode; + final ZetaThemeData initialThemeData; -class _HomeState extends State { @override Widget build(BuildContext context) { - final _components = components..sort((a, b) => a.name.compareTo(b.name)); - final _assets = assets..sort((a, b) => a.name.compareTo(b.name)); - final _theme = theme..sort((a, b) => a.name.compareTo(b.name)); - return ExampleScaffold( - name: 'Zeta', - child: SingleChildScrollView( - child: Column( - children: [ - ExpansionTile( - title: Text('Widgets'), - backgroundColor: Zeta.of(context).colors.warm.shade30, - children: _components - .map((item) => ListTile(title: Text(item.name), onTap: () => context.go('/${item.name}'))) - .toList(), - ), - ExpansionTile( - title: Text('Theme'), - backgroundColor: Zeta.of(context).colors.warm.shade30, - children: _theme - .map((item) => ListTile(title: Text(item.name), onTap: () => context.go('/${item.name}'))) - .toList(), - ), - ExpansionTile( - title: Text('Assets'), - backgroundColor: Zeta.of(context).colors.warm.shade30, - children: _assets - .map((item) => ListTile(title: Text(item.name), onTap: () => context.go('/${item.name}'))) - .toList(), - ), - ], - ), - ), + return ZetaProvider( + themeService: themeService, + initialContrast: initialContrast, + initialThemeData: initialThemeData, + initialThemeMode: initialThemeMode, + builder: (context, themeData, themeMode) { + final dark = themeData.colorsDark.toScheme(); + final light = themeData.colorsLight.toScheme(); + return MaterialApp.router( + routerConfig: router, + themeMode: themeMode, + theme: ThemeData( + useMaterial3: true, + fontFamily: themeData.fontFamily, + scaffoldBackgroundColor: light.background, + colorScheme: light, + textTheme: zetaTextTheme, + ), + darkTheme: ThemeData( + useMaterial3: true, + fontFamily: themeData.fontFamily, + scaffoldBackgroundColor: dark.background, + colorScheme: dark, + textTheme: zetaTextTheme, + ), + ); + }, ); } }