首次远程推送
This commit is contained in:
@@ -7,10 +7,12 @@ import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import '../core/ambience.dart';
|
||||
import '../data/app_preferences_store.dart';
|
||||
import '../data/focus_seed_store.dart';
|
||||
import '../features/onboarding/welcome_screen.dart';
|
||||
import '../features/shell/focus_seed_home.dart';
|
||||
import '../l10n/generated/app_localizations.dart';
|
||||
import '../models/appearance_preference.dart';
|
||||
import '../models/language_preference.dart';
|
||||
import '../widgets/loading_view.dart';
|
||||
import 'app_theme.dart';
|
||||
|
||||
@visibleForTesting
|
||||
@@ -19,10 +21,16 @@ Locale focusSeedDefaultLocale({bool isRelease = kReleaseMode}) {
|
||||
}
|
||||
|
||||
class FocusSeedApp extends StatefulWidget {
|
||||
const FocusSeedApp({this.locale, this.focusSeedStore, super.key});
|
||||
const FocusSeedApp({
|
||||
this.locale,
|
||||
this.focusSeedStore,
|
||||
this.showWelcomeOnFirstRun = true,
|
||||
super.key,
|
||||
});
|
||||
|
||||
final Locale? locale;
|
||||
final FocusSeedStore? focusSeedStore;
|
||||
final bool showWelcomeOnFirstRun;
|
||||
|
||||
@override
|
||||
State<FocusSeedApp> createState() => _FocusSeedAppState();
|
||||
@@ -33,6 +41,10 @@ class _FocusSeedAppState extends State<FocusSeedApp>
|
||||
final _preferencesStore = AppPreferencesStore();
|
||||
AppearancePreference _appearance = AppearancePreference.system;
|
||||
LanguagePreference _language = LanguagePreference.defaultLocale;
|
||||
bool _onboardingComplete = true;
|
||||
bool _landingSetupComplete = true;
|
||||
bool _showLandingSetup = false;
|
||||
bool _preferencesLoaded = false;
|
||||
DayPhase _dayPhase = dayPhaseFor(DateTime.now());
|
||||
Timer? _phaseTimer;
|
||||
|
||||
@@ -52,14 +64,25 @@ class _FocusSeedAppState extends State<FocusSeedApp>
|
||||
}
|
||||
|
||||
Future<void> _loadPreferences() async {
|
||||
final appearance = await _preferencesStore.loadAppearance();
|
||||
final language = await _preferencesStore.loadLanguage();
|
||||
final (appearance, language, firstRunProgress) =
|
||||
await (
|
||||
_preferencesStore.loadAppearance(),
|
||||
_preferencesStore.loadLanguage(),
|
||||
_preferencesStore.loadFirstRunProgress(),
|
||||
).wait;
|
||||
if (!mounted) {
|
||||
return;
|
||||
}
|
||||
setState(() {
|
||||
_appearance = appearance;
|
||||
_language = language;
|
||||
_onboardingComplete = firstRunProgress.onboardingComplete;
|
||||
_landingSetupComplete = firstRunProgress.landingSetupComplete;
|
||||
_showLandingSetup =
|
||||
widget.showWelcomeOnFirstRun &&
|
||||
firstRunProgress.onboardingComplete &&
|
||||
!firstRunProgress.landingSetupComplete;
|
||||
_preferencesLoaded = true;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -98,6 +121,22 @@ class _FocusSeedAppState extends State<FocusSeedApp>
|
||||
return widget.locale ?? _language.locale ?? focusSeedDefaultLocale();
|
||||
}
|
||||
|
||||
Future<void> _completeOnboarding() async {
|
||||
setState(() {
|
||||
_onboardingComplete = true;
|
||||
_showLandingSetup = true;
|
||||
});
|
||||
await _preferencesStore.saveOnboardingComplete();
|
||||
}
|
||||
|
||||
Future<void> _completeLandingSetup() async {
|
||||
setState(() {
|
||||
_landingSetupComplete = true;
|
||||
_showLandingSetup = false;
|
||||
});
|
||||
await _preferencesStore.saveLandingSetupComplete();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
@@ -115,14 +154,28 @@ class _FocusSeedAppState extends State<FocusSeedApp>
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
],
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
home: FocusSeedHome(
|
||||
focusSeedStore: widget.focusSeedStore,
|
||||
appearance: _appearance,
|
||||
onAppearanceChanged: _setAppearance,
|
||||
language: _language,
|
||||
showLanguageTools: !kReleaseMode && widget.locale == null,
|
||||
onLanguageChanged: _setLanguage,
|
||||
),
|
||||
home:
|
||||
!_preferencesLoaded
|
||||
? const Scaffold(body: SafeArea(child: LoadingView()))
|
||||
: widget.showWelcomeOnFirstRun && !_onboardingComplete
|
||||
? WelcomeScreen(
|
||||
onStart: _completeOnboarding,
|
||||
onSkip: _completeOnboarding,
|
||||
)
|
||||
: FocusSeedHome(
|
||||
focusSeedStore: widget.focusSeedStore,
|
||||
appearance: _appearance,
|
||||
onAppearanceChanged: _setAppearance,
|
||||
language: _language,
|
||||
showLanguageTools: !kReleaseMode && widget.locale == null,
|
||||
onLanguageChanged: _setLanguage,
|
||||
showLandingSetupInitially:
|
||||
widget.showWelcomeOnFirstRun &&
|
||||
(!_landingSetupComplete || _showLandingSetup),
|
||||
onLandingSetupComplete: () {
|
||||
unawaited(_completeLandingSetup());
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user