69 lines
1.6 KiB
Dart
69 lines
1.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:quasar_jet/models/storage_model.dart';
|
|
import 'package:quasar_jet/quick_tile_dispatcher.dart' show quickTileDispatcher;
|
|
import 'package:quasar_jet/services/vpn_service.dart';
|
|
import 'package:quasar_jet/views/main_view.dart';
|
|
import 'package:quasar_jet/theme.dart';
|
|
|
|
@pragma('vm:entry-point')
|
|
void _keepQuickTileDispatcher() {
|
|
quickTileDispatcher;
|
|
}
|
|
|
|
@pragma('vm:entry-point')
|
|
Future<void> quickTileMain() async {
|
|
await quickTileDispatcher();
|
|
}
|
|
|
|
Future<void> main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
|
|
final model = StorageModel();
|
|
await model.init();
|
|
|
|
final vpnService = VpnService();
|
|
|
|
runApp(MyApp(model: model, vpnService: vpnService));
|
|
}
|
|
|
|
// ignore: must_be_immutable
|
|
class MyApp extends StatefulWidget {
|
|
MyApp({super.key, required this.model, required this.vpnService});
|
|
|
|
StorageModel model;
|
|
VpnService vpnService;
|
|
|
|
static _MyAppState of(BuildContext context) {
|
|
return context.findAncestorStateOfType<_MyAppState>()!;
|
|
}
|
|
|
|
@override
|
|
State<MyApp> createState() => _MyAppState();
|
|
}
|
|
|
|
class _MyAppState extends State<MyApp> {
|
|
ThemeMode _themeMode = ThemeMode.system;
|
|
|
|
void changeTheme(ThemeMode mode) {
|
|
setState(() {
|
|
_themeMode = mode;
|
|
});
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
widget.vpnService.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
theme: AppTheme.light,
|
|
darkTheme: AppTheme.dark,
|
|
themeMode: _themeMode,
|
|
home: MainView(model: widget.model, vpnService: widget.vpnService),
|
|
);
|
|
}
|
|
}
|