|
1 | 1 | import 'package:flutter/material.dart';
|
2 |
| -import 'package:shared_preferences/shared_preferences.dart'; |
3 |
| -import 'package:zeta_example/theme_service.dart'; |
| 2 | +import 'package:go_router/go_router.dart'; |
| 3 | +import 'package:zeta_example/pages/components/accordion_example.dart'; |
| 4 | +import 'package:zeta_example/pages/components/app_bar_example.dart'; |
| 5 | +import 'package:zeta_example/pages/components/avatar_example.dart'; |
| 6 | +import 'package:zeta_example/pages/components/badges_example.dart'; |
| 7 | +import 'package:zeta_example/pages/components/banner_example.dart'; |
| 8 | +import 'package:zeta_example/pages/components/bottom_sheet_example.dart'; |
| 9 | +import 'package:zeta_example/pages/components/breadcrumbs_example.dart'; |
| 10 | +import 'package:zeta_example/pages/components/button_example.dart'; |
| 11 | +import 'package:zeta_example/pages/components/checkbox_example.dart'; |
| 12 | +import 'package:zeta_example/pages/components/chip_example.dart'; |
| 13 | +import 'package:zeta_example/pages/components/date_input_example.dart'; |
| 14 | +import 'package:zeta_example/pages/components/dialog_example.dart'; |
| 15 | +import 'package:zeta_example/pages/components/dialpad_example.dart'; |
| 16 | +import 'package:zeta_example/pages/components/dropdown_example.dart'; |
| 17 | +import 'package:zeta_example/pages/components/list_item_example.dart'; |
| 18 | +import 'package:zeta_example/pages/components/navigation_bar_example.dart'; |
| 19 | +import 'package:zeta_example/pages/components/radio_example.dart'; |
| 20 | +import 'package:zeta_example/pages/components/stepper_example.dart'; |
| 21 | +import 'package:zeta_example/pages/components/switch_example.dart'; |
| 22 | +import 'package:zeta_example/pages/components/snackbar_example.dart'; |
| 23 | +import 'package:zeta_example/pages/components/tabs_example.dart'; |
| 24 | +import 'package:zeta_example/pages/theme/color_example.dart'; |
| 25 | +import 'package:zeta_example/pages/components/password_input_example.dart'; |
| 26 | +import 'package:zeta_example/pages/components/progress_example.dart'; |
| 27 | +import 'package:zeta_example/pages/assets/icons_example.dart'; |
| 28 | +import 'package:zeta_example/pages/theme/radius_example.dart'; |
| 29 | +import 'package:zeta_example/pages/theme/spacing_example.dart'; |
| 30 | +import 'package:zeta_example/pages/theme/typography_example.dart'; |
| 31 | +import 'package:zeta_example/widgets.dart'; |
4 | 32 | import 'package:zeta_flutter/zeta_flutter.dart';
|
5 |
| -import 'home.dart'; |
6 | 33 |
|
7 |
| -void main() async { |
8 |
| - WidgetsFlutterBinding.ensureInitialized(); |
| 34 | +class Component { |
| 35 | + final String name; |
| 36 | + final WidgetBuilder pageBuilder; |
| 37 | + final List<Component> children; |
| 38 | + Component(this.name, this.pageBuilder, [this.children = const []]); |
| 39 | +} |
9 | 40 |
|
10 |
| - final preferences = await SharedPreferences.getInstance(); |
11 |
| - final themeService = SharedPrefsThemeService(preferences); |
12 |
| - final themePreferences = await themeService.loadTheme(); |
| 41 | +final List<Component> components = [ |
| 42 | + Component(AccordionExample.name, (context) => const AccordionExample()), |
| 43 | + Component(AppBarExample.name, (context) => const AppBarExample()), |
| 44 | + Component(AvatarExample.name, (context) => const AvatarExample()), |
| 45 | + Component(BannerExample.name, (context) => const BannerExample()), |
| 46 | + Component(BadgesExample.name, (context) => const BadgesExample()), |
| 47 | + Component(BottomSheetExample.name, (context) => const BottomSheetExample()), |
| 48 | + Component(BreadCrumbsExample.name, (context) => const BreadCrumbsExample()), |
| 49 | + Component(ButtonExample.name, (context) => const ButtonExample()), |
| 50 | + Component(CheckBoxExample.name, (context) => const CheckBoxExample()), |
| 51 | + Component(ChipExample.name, (context) => const ChipExample()), |
| 52 | + Component(ListItemExample.name, (context) => const ListItemExample()), |
| 53 | + Component(NavigationBarExample.name, (context) => const NavigationBarExample()), |
| 54 | + Component(PasswordInputExample.name, (context) => const PasswordInputExample()), |
| 55 | + Component(DropdownExample.name, (context) => const DropdownExample()), |
| 56 | + Component(ProgressExample.name, (context) => const ProgressExample()), |
| 57 | + Component(SnackBarExample.name, (context) => const SnackBarExample()), |
| 58 | + Component(StepperExample.name, (context) => const StepperExample()), |
| 59 | + Component(TabsExample.name, (context) => const TabsExample()), |
| 60 | + Component(DialPadExample.name, (context) => const DialPadExample()), |
| 61 | + Component(RadioButtonExample.name, (context) => const RadioButtonExample()), |
| 62 | + Component(SwitchExample.name, (context) => const SwitchExample()), |
| 63 | + Component(DateInputExample.name, (context) => const DateInputExample()), |
| 64 | + Component(DialogExample.name, (context) => const DialogExample()), |
| 65 | +]; |
13 | 66 |
|
14 |
| - runApp( |
15 |
| - ZetaExample( |
16 |
| - themeService: themeService, |
17 |
| - initialThemeData: themePreferences.$1 ?? ZetaThemeData(), |
18 |
| - initialThemeMode: themePreferences.$2 ?? ThemeMode.system, |
19 |
| - initialContrast: themePreferences.$3 ?? ZetaContrast.aa, |
20 |
| - ), |
21 |
| - ); |
22 |
| -} |
| 67 | +final List<Component> theme = [ |
| 68 | + Component(ColorExample.name, (context) => const ColorExample()), |
| 69 | + Component(TypographyExample.name, (context) => const TypographyExample()), |
| 70 | + Component(RadiusExample.name, (context) => const RadiusExample()), |
| 71 | + Component(SpacingExample.name, (context) => const SpacingExample()), |
| 72 | +]; |
| 73 | +final List<Component> assets = [ |
| 74 | + Component(IconsExample.name, (context) => const IconsExample()), |
| 75 | +]; |
23 | 76 |
|
24 |
| -class ZetaExample extends StatelessWidget { |
25 |
| - const ZetaExample({ |
26 |
| - super.key, |
27 |
| - required this.themeService, |
28 |
| - required this.initialContrast, |
29 |
| - required this.initialThemeMode, |
30 |
| - required this.initialThemeData, |
31 |
| - }); |
| 77 | +class Home extends StatefulWidget { |
| 78 | + const Home({super.key}); |
| 79 | + |
| 80 | + @override |
| 81 | + State<Home> createState() => _HomeState(); |
| 82 | +} |
32 | 83 |
|
33 |
| - final ZetaThemeService themeService; |
34 |
| - final ZetaContrast initialContrast; |
35 |
| - final ThemeMode initialThemeMode; |
36 |
| - final ZetaThemeData initialThemeData; |
| 84 | +final GoRouter router = GoRouter( |
| 85 | + routes: [ |
| 86 | + GoRoute( |
| 87 | + path: '/', |
| 88 | + name: 'Home', |
| 89 | + builder: (_, __) => const Home(), |
| 90 | + routes: [ |
| 91 | + ...[ |
| 92 | + ...components, |
| 93 | + ...assets, |
| 94 | + ...theme, |
| 95 | + ].map( |
| 96 | + (e) => GoRoute( |
| 97 | + path: e.name, |
| 98 | + name: e.name, |
| 99 | + builder: (_, __) => e.pageBuilder.call(_), |
| 100 | + routes: e.children |
| 101 | + .map((f) => GoRoute( |
| 102 | + path: f.name, |
| 103 | + name: f.name, |
| 104 | + builder: (_, __) => f.pageBuilder(_), |
| 105 | + )) |
| 106 | + .toList(), |
| 107 | + ), |
| 108 | + ), |
| 109 | + ], |
| 110 | + ), |
| 111 | + ], |
| 112 | +); |
37 | 113 |
|
| 114 | +class _HomeState extends State<Home> { |
38 | 115 | @override
|
39 | 116 | Widget build(BuildContext context) {
|
40 |
| - return ZetaProvider( |
41 |
| - themeService: themeService, |
42 |
| - initialContrast: initialContrast, |
43 |
| - initialThemeData: initialThemeData, |
44 |
| - initialThemeMode: initialThemeMode, |
45 |
| - builder: (context, themeData, themeMode) { |
46 |
| - final dark = themeData.colorsDark.toScheme(); |
47 |
| - final light = themeData.colorsLight.toScheme(); |
48 |
| - return MaterialApp.router( |
49 |
| - routerConfig: router, |
50 |
| - themeMode: themeMode, |
51 |
| - theme: ThemeData( |
52 |
| - useMaterial3: true, |
53 |
| - fontFamily: themeData.fontFamily, |
54 |
| - scaffoldBackgroundColor: light.background, |
55 |
| - colorScheme: light, |
56 |
| - textTheme: zetaTextTheme, |
57 |
| - ), |
58 |
| - darkTheme: ThemeData( |
59 |
| - useMaterial3: true, |
60 |
| - fontFamily: themeData.fontFamily, |
61 |
| - scaffoldBackgroundColor: dark.background, |
62 |
| - colorScheme: dark, |
63 |
| - textTheme: zetaTextTheme, |
64 |
| - ), |
65 |
| - ); |
66 |
| - }, |
| 117 | + final _components = components..sort((a, b) => a.name.compareTo(b.name)); |
| 118 | + final _assets = assets..sort((a, b) => a.name.compareTo(b.name)); |
| 119 | + final _theme = theme..sort((a, b) => a.name.compareTo(b.name)); |
| 120 | + return ExampleScaffold( |
| 121 | + name: 'Zeta', |
| 122 | + child: SingleChildScrollView( |
| 123 | + child: Column( |
| 124 | + children: [ |
| 125 | + ExpansionTile( |
| 126 | + title: Text('Widgets'), |
| 127 | + backgroundColor: Zeta.of(context).colors.warm.shade30, |
| 128 | + children: _components |
| 129 | + .map((item) => ListTile(title: Text(item.name), onTap: () => context.go('/${item.name}'))) |
| 130 | + .toList(), |
| 131 | + ), |
| 132 | + ExpansionTile( |
| 133 | + title: Text('Theme'), |
| 134 | + backgroundColor: Zeta.of(context).colors.warm.shade30, |
| 135 | + children: _theme |
| 136 | + .map((item) => ListTile(title: Text(item.name), onTap: () => context.go('/${item.name}'))) |
| 137 | + .toList(), |
| 138 | + ), |
| 139 | + ExpansionTile( |
| 140 | + title: Text('Assets'), |
| 141 | + backgroundColor: Zeta.of(context).colors.warm.shade30, |
| 142 | + children: _assets |
| 143 | + .map((item) => ListTile(title: Text(item.name), onTap: () => context.go('/${item.name}'))) |
| 144 | + .toList(), |
| 145 | + ), |
| 146 | + ], |
| 147 | + ), |
| 148 | + ), |
67 | 149 | );
|
68 | 150 | }
|
69 | 151 | }
|
0 commit comments