You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
4.1 KiB
116 lines
4.1 KiB
import 'package:flutter/material.dart'; |
|
import 'package:intl/date_symbol_data_local.dart'; |
|
import 'package:intl/intl_standalone.dart'; |
|
import 'package:logic_circuits_simulator/pages/design_component.dart'; |
|
import 'package:logic_circuits_simulator/pages/edit_component.dart'; |
|
import 'package:logic_circuits_simulator/pages/project.dart'; |
|
import 'package:logic_circuits_simulator/pages/projects.dart'; |
|
import 'package:logic_circuits_simulator/pages/settings.dart'; |
|
import 'package:logic_circuits_simulator/pages_arguments/design_component.dart'; |
|
import 'package:logic_circuits_simulator/pages_arguments/edit_component.dart'; |
|
import 'package:logic_circuits_simulator/state/component.dart'; |
|
import 'package:logic_circuits_simulator/state/project.dart'; |
|
import 'package:logic_circuits_simulator/state/projects.dart'; |
|
import 'package:provider/provider.dart'; |
|
|
|
Future<void> main() async { |
|
runApp(const MyApp()); |
|
} |
|
|
|
class MyApp extends StatelessWidget { |
|
const MyApp({Key? key}) : super(key: key); |
|
@override |
|
Widget build(BuildContext context) { |
|
return FutureBuilder( |
|
future: findSystemLocale().then((_) => initializeDateFormatting()).then((_) => true), |
|
builder: (context, snapshot) { |
|
if (!snapshot.hasData) { |
|
// Wait until locale is detected |
|
return Container(); |
|
} |
|
return MultiProvider( |
|
providers: [ |
|
ChangeNotifierProvider(create: (_) => ProjectsState()), |
|
ChangeNotifierProvider(create: (_) => ProjectState()), |
|
ChangeNotifierProvider(create: (_) => ComponentState()), |
|
], |
|
child: MaterialApp( |
|
title: 'Logic Circuits Simulator', |
|
theme: ThemeData( |
|
useMaterial3: true, |
|
primarySwatch: Colors.orange, |
|
), |
|
darkTheme: ThemeData( |
|
useMaterial3: true, |
|
primarySwatch: Colors.orange, |
|
brightness: Brightness.dark, |
|
), |
|
routes: { |
|
ProjectsPage.routeName:(context) { |
|
return const ProjectsPage(); |
|
}, |
|
MainPage.routeName:(context) { |
|
return const MainPage(); |
|
}, |
|
SettingsPage.routeName:(context) => const SettingsPage(), |
|
ProjectPage.routeName: (context) { |
|
return const ProjectPage(); |
|
}, |
|
EditComponentPage.routeName: (context) { |
|
final args = ModalRoute.of(context)!.settings.arguments as EditComponentPageArguments; |
|
return EditComponentPage.fromArguments(args); |
|
}, |
|
DesignComponentPage.routeName: (context) { |
|
final args = ModalRoute.of(context)!.settings.arguments as DesignComponentPageArguments; |
|
return DesignComponentPage.fromArguments(args); |
|
}, |
|
}, |
|
initialRoute: MainPage.routeName, |
|
), |
|
); |
|
} |
|
); |
|
} |
|
} |
|
|
|
class MainPage extends StatelessWidget { |
|
const MainPage({Key? key}) : super(key: key); |
|
|
|
static const routeName = '/'; |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Scaffold( |
|
body: Center( |
|
child: Column( |
|
mainAxisSize: MainAxisSize.min, |
|
children: [ |
|
Text( |
|
'Logic Circuits Simulator', |
|
style: Theme.of(context).textTheme.headline3, |
|
textAlign: TextAlign.center, |
|
), |
|
Column( |
|
children: [ |
|
ElevatedButton.icon( |
|
onPressed: () { |
|
Navigator.of(context).pushNamed(ProjectsPage.routeName); |
|
}, |
|
icon: const Icon(Icons.book), |
|
label: const Text('Projects'), |
|
), |
|
ElevatedButton.icon( |
|
onPressed: () { |
|
Navigator.of(context).pushNamed(SettingsPage.routeName); |
|
}, |
|
icon: const Icon(Icons.settings), |
|
label: const Text('Settings'), |
|
), |
|
].map((e) => Padding(padding: const EdgeInsets.all(8), child: e,)).toList(growable: false), |
|
) |
|
], |
|
), |
|
), |
|
); |
|
} |
|
} |