first commit

This commit is contained in:
benjibennn
2023-12-27 16:10:09 +08:00
commit 4f35362cf9
370 changed files with 108340 additions and 0 deletions

104
lib/main.dart Normal file
View 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,
);
}
}