ente/lib/app/view/app.dart

124 lines
3.7 KiB
Dart
Raw Normal View History

2022-11-01 06:13:06 +00:00
// @dart=2.9
import 'dart:async';
import 'dart:io';
import 'package:adaptive_theme/adaptive_theme.dart';
import 'package:ente_auth/core/configuration.dart';
import 'package:ente_auth/core/event_bus.dart';
import 'package:ente_auth/ente_theme_data.dart';
2022-11-01 07:02:50 +00:00
import 'package:ente_auth/events/signed_in_event.dart';
import 'package:ente_auth/events/signed_out_event.dart';
2022-11-01 06:13:06 +00:00
import "package:ente_auth/l10n/l10n.dart";
2023-02-07 07:23:04 +00:00
import 'package:ente_auth/locale.dart';
2022-11-01 06:13:06 +00:00
import "package:ente_auth/onboarding/view/onboarding_page.dart";
2022-11-14 13:03:49 +00:00
import 'package:ente_auth/services/update_service.dart';
2022-11-01 06:13:06 +00:00
import 'package:ente_auth/ui/home_page.dart';
2022-11-14 13:03:49 +00:00
import 'package:ente_auth/ui/settings/app_update_dialog.dart';
2022-11-01 06:13:06 +00:00
import 'package:flutter/foundation.dart';
import "package:flutter/material.dart";
2023-02-13 07:10:33 +00:00
import 'package:flutter_localizations/flutter_localizations.dart';
2022-11-01 06:13:06 +00:00
class App extends StatefulWidget {
2023-04-07 08:59:27 +00:00
final Locale locale;
const App({Key key, this.locale = const Locale("en")}) : super(key: key);
2022-11-01 06:13:06 +00:00
@override
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
2022-11-01 07:02:50 +00:00
StreamSubscription<SignedOutEvent> _signedOutEvent;
StreamSubscription<SignedInEvent> _signedInEvent;
2022-11-01 06:13:06 +00:00
@override
void initState() {
2022-11-01 07:02:50 +00:00
_signedOutEvent = Bus.instance.on<SignedOutEvent>().listen((event) {
2022-11-01 06:13:06 +00:00
if (mounted) {
setState(() {});
}
});
2022-11-01 07:02:50 +00:00
_signedInEvent = Bus.instance.on<SignedInEvent>().listen((event) {
2022-11-01 06:13:06 +00:00
if (mounted) {
setState(() {});
}
});
2022-11-14 13:03:49 +00:00
UpdateService.instance.shouldUpdate().then((shouldUpdate) {
if (shouldUpdate) {
Future.delayed(Duration.zero, () {
showDialog(
context: context,
builder: (BuildContext context) {
return AppUpdateDialog(
UpdateService.instance.getLatestVersionInfo(),
);
},
barrierColor: Colors.black.withOpacity(0.85),
);
});
}
});
2022-11-01 06:13:06 +00:00
super.initState();
}
@override
void dispose() {
super.dispose();
2022-11-01 07:02:50 +00:00
_signedOutEvent.cancel();
_signedInEvent.cancel();
2022-11-01 06:13:06 +00:00
}
@override
Widget build(BuildContext context) {
if (Platform.isAndroid || kDebugMode) {
return AdaptiveTheme(
light: lightThemeData,
dark: darkThemeData,
initial: AdaptiveThemeMode.system,
builder: (lightTheme, dartTheme) => MaterialApp(
title: "ente",
themeMode: ThemeMode.system,
theme: lightTheme,
darkTheme: dartTheme,
debugShowCheckedModeBanner: false,
2023-04-07 08:59:27 +00:00
locale: widget.locale,
2023-02-13 07:10:33 +00:00
supportedLocales: appSupportedLocales,
2023-02-07 07:23:04 +00:00
localeListResolutionCallback: localResolutionCallBack,
2023-02-13 07:10:33 +00:00
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
2022-11-01 06:13:06 +00:00
routes: _getRoutes,
),
);
} else {
return MaterialApp(
title: "ente",
themeMode: ThemeMode.system,
theme: lightThemeData,
darkTheme: darkThemeData,
debugShowCheckedModeBanner: false,
2023-04-07 08:59:27 +00:00
locale: widget.locale,
2023-02-13 07:10:33 +00:00
supportedLocales: appSupportedLocales,
2023-02-07 07:23:04 +00:00
localeListResolutionCallback: localResolutionCallBack,
2022-11-01 06:13:06 +00:00
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
routes: _getRoutes,
);
}
}
Map<String, WidgetBuilder> get _getRoutes {
return {
"/": (context) => Configuration.instance.hasConfiguredAccount()
? const HomePage()
: const OnboardingPage(),
};
}
}