138 lines
4.2 KiB
Dart
Raw Normal View History

2021-06-19 23:41:19 +08:00
import 'package:app_flowy/startup/startup.dart';
import 'package:app_flowy/user/application/user_settings_service.dart';
2022-01-28 18:34:21 +08:00
import 'package:app_flowy/workspace/application/appearance.dart';
2022-10-22 21:57:44 +08:00
import 'package:appflowy_editor/appflowy_editor.dart' hide Log;
2021-12-07 22:58:50 +05:30
import 'package:easy_localization/easy_localization.dart';
2021-07-13 08:47:26 +08:00
import 'package:flowy_infra/theme.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
2022-10-22 21:57:44 +08:00
import 'package:flowy_sdk/log.dart';
2021-06-19 23:41:19 +08:00
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:window_size/window_size.dart';
import 'package:bloc/bloc.dart';
2021-06-19 23:41:19 +08:00
2022-02-20 16:10:50 +08:00
class InitAppWidgetTask extends LaunchTask {
2021-06-19 23:41:19 +08:00
@override
LaunchTaskType get type => LaunchTaskType.appLauncher;
@override
2022-01-28 18:34:21 +08:00
Future<void> initialize(LaunchContext context) async {
2021-09-12 22:19:59 +08:00
final widget = context.getIt<EntryPoint>().create();
final setting = await SettingsFFIService().getAppearanceSetting();
2022-10-25 17:30:57 +08:00
final appearanceSetting = AppearanceSetting(setting);
2022-01-28 18:34:21 +08:00
final app = ApplicationWidget(
2022-10-25 17:30:57 +08:00
appearanceSetting: appearanceSetting,
2022-08-31 09:19:31 +08:00
child: widget,
2022-01-28 18:34:21 +08:00
);
Bloc.observer = ApplicationBlocObserver();
runApp(
EasyLocalization(
supportedLocales: const [
// In alphabetical order
Locale('ca', 'ES'),
Locale('de', 'DE'),
Locale('en'),
Locale('es', 'VE'),
Locale('fr', 'FR'),
Locale('fr', 'CA'),
Locale('hu', 'HU'),
Locale('id', 'ID'),
Locale('it', 'IT'),
Locale('ja', 'JP'),
Locale('ko', 'KR'),
Locale('pl', 'PL'),
Locale('pt', 'BR'),
Locale('ru', 'RU'),
Locale('sv'),
Locale('tr', 'TR'),
Locale('zh', 'CN'),
],
path: 'assets/translations',
fallbackLocale: const Locale('en'),
useFallbackTranslations: true,
saveLocale: false,
child: app,
),
2021-12-07 22:58:50 +05:30
);
2021-07-12 23:27:58 +08:00
return Future(() => {});
2021-06-19 23:41:19 +08:00
}
}
class ApplicationWidget extends StatelessWidget {
2021-06-19 23:41:19 +08:00
final Widget child;
2022-10-25 17:30:57 +08:00
final AppearanceSetting appearanceSetting;
2022-01-28 18:34:21 +08:00
const ApplicationWidget({
2021-06-19 23:41:19 +08:00
Key? key,
required this.child,
2022-10-25 17:30:57 +08:00
required this.appearanceSetting,
2021-06-19 23:41:19 +08:00
}) : super(key: key);
@override
2022-06-01 15:22:18 +08:00
Widget build(BuildContext context) {
return ChangeNotifierProvider.value(
2022-10-25 17:30:57 +08:00
value: appearanceSetting,
2022-06-01 15:22:18 +08:00
builder: (context, _) {
const ratio = 1.73;
const minWidth = 600.0;
setWindowMinSize(const Size(minWidth, minWidth / ratio));
2022-10-25 17:30:57 +08:00
appearanceSetting.readLocaleWhenAppLaunch(context);
AppTheme theme = context.select<AppearanceSetting, AppTheme>(
2022-06-01 15:22:18 +08:00
(value) => value.theme,
);
Locale locale = context.select<AppearanceSetting, Locale>(
2022-06-01 15:22:18 +08:00
(value) => value.locale,
);
2021-06-19 23:41:19 +08:00
2022-06-01 15:22:18 +08:00
return MultiProvider(
providers: [
Provider.value(value: theme),
Provider.value(value: locale),
],
builder: (context, _) {
return MaterialApp(
builder: overlayManagerBuilder(),
debugShowCheckedModeBanner: false,
theme: theme.themeData,
2022-10-22 21:57:44 +08:00
localizationsDelegates: context.localizationDelegates +
[AppFlowyEditorLocalizations.delegate],
2022-06-01 15:22:18 +08:00
supportedLocales: context.supportedLocales,
locale: locale,
navigatorKey: AppGlobals.rootNavKey,
home: child,
);
},
);
},
);
}
2021-06-19 23:41:19 +08:00
}
class AppGlobals {
static GlobalKey<NavigatorState> rootNavKey = GlobalKey();
static NavigatorState get nav => rootNavKey.currentState!;
}
class ApplicationBlocObserver extends BlocObserver {
@override
// ignore: unnecessary_overrides
void onTransition(Bloc bloc, Transition transition) {
// Log.debug("[current]: ${transition.currentState} \n\n[next]: ${transition.nextState}");
2022-04-14 21:16:29 +08:00
// Log.debug("${transition.nextState}");
super.onTransition(bloc, transition);
}
@override
void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
Log.debug(error);
super.onError(bloc, error, stackTrace);
}
2021-11-04 13:22:35 +08:00
2022-04-14 21:16:29 +08:00
// @override
// void onEvent(Bloc bloc, Object? event) {
// Log.debug("$event");
// super.onEvent(bloc, event);
// }
}