first commit
This commit is contained in:
104
lib/main.dart
Normal file
104
lib/main.dart
Normal file
@@ -0,0 +1,104 @@
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:flutter_web_plugins/url_strategy.dart';
|
||||
|
||||
import 'auth/custom_auth/auth_util.dart';
|
||||
import 'auth/custom_auth/custom_auth_user_provider.dart';
|
||||
|
||||
import 'flutterlib/flutter_theme.dart';
|
||||
import 'flutterlib/flutter_util.dart';
|
||||
import 'flutterlib/internationalization.dart';
|
||||
import 'flutterlib/nav/nav.dart';
|
||||
import 'index.dart';
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
usePathUrlStrategy();
|
||||
|
||||
await FlutterTheme.initialize();
|
||||
await authManager.initialize();
|
||||
await FFLocalizations.initialize();
|
||||
|
||||
final appState = FFAppState(); // Initialize FFAppState
|
||||
await appState.initializePersistedState();
|
||||
|
||||
runApp(ChangeNotifierProvider(
|
||||
create: (context) => appState,
|
||||
child: MyApp(),
|
||||
));
|
||||
}
|
||||
|
||||
class MyApp extends StatefulWidget {
|
||||
// This widget is the root of your application.
|
||||
@override
|
||||
State<MyApp> createState() => _MyAppState();
|
||||
|
||||
static _MyAppState of(BuildContext context) =>
|
||||
context.findAncestorStateOfType<_MyAppState>()!;
|
||||
}
|
||||
|
||||
class _MyAppState extends State<MyApp> {
|
||||
Locale? _locale = FFLocalizations.getStoredLocale();
|
||||
ThemeMode _themeMode = FlutterTheme.themeMode;
|
||||
|
||||
late Stream<NumstationAuthUser> userStream;
|
||||
|
||||
late AppStateNotifier _appStateNotifier;
|
||||
late GoRouter _router;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
_appStateNotifier = AppStateNotifier.instance;
|
||||
_router = createRouter(_appStateNotifier);
|
||||
userStream = numstationAuthUserStream()
|
||||
..listen((user) => _appStateNotifier.update(user));
|
||||
|
||||
Future.delayed(
|
||||
Duration(milliseconds: 1000),
|
||||
() => _appStateNotifier.stopShowingSplashImage(),
|
||||
);
|
||||
}
|
||||
|
||||
void setLocale(String language) {
|
||||
setState(() => _locale = createLocale(language));
|
||||
FFLocalizations.storeLocale(language);
|
||||
}
|
||||
|
||||
void setThemeMode(ThemeMode mode) => setState(() {
|
||||
_themeMode = mode;
|
||||
FlutterTheme.saveThemeMode(mode);
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp.router(
|
||||
title: 'Numstation',
|
||||
localizationsDelegates: [
|
||||
FFLocalizationsDelegate(),
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
],
|
||||
locale: _locale,
|
||||
supportedLocales: const [
|
||||
Locale('en'),
|
||||
Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant'),
|
||||
],
|
||||
theme: ThemeData(
|
||||
brightness: Brightness.light,
|
||||
scrollbarTheme: ScrollbarThemeData(),
|
||||
),
|
||||
darkTheme: ThemeData(
|
||||
brightness: Brightness.dark,
|
||||
scrollbarTheme: ScrollbarThemeData(),
|
||||
),
|
||||
themeMode: _themeMode,
|
||||
routerConfig: _router,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user