67 lines
1.6 KiB
Dart
67 lines
1.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import 'core/app_state.dart';
|
|
import 'core/app_theme.dart';
|
|
import 'features/onboarding/onboarding_pages.dart';
|
|
import 'features/shell/learning_shell.dart';
|
|
|
|
void main() {
|
|
runApp(const KouyuEnglishApp());
|
|
}
|
|
|
|
class KouyuEnglishApp extends StatefulWidget {
|
|
const KouyuEnglishApp({super.key});
|
|
|
|
@override
|
|
State<KouyuEnglishApp> createState() => _KouyuEnglishAppState();
|
|
}
|
|
|
|
class _KouyuEnglishAppState extends State<KouyuEnglishApp> {
|
|
final appState = AppState();
|
|
var onboardingStep = 0;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
appState.load();
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
appState.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
title: '开口英语',
|
|
debugShowCheckedModeBanner: false,
|
|
theme: buildAppTheme(),
|
|
home: AnimatedBuilder(
|
|
animation: appState,
|
|
builder: (context, _) {
|
|
if (!appState.isLoaded) {
|
|
return const Scaffold(
|
|
body: Center(child: CircularProgressIndicator()),
|
|
);
|
|
}
|
|
if (appState.onboardingComplete) {
|
|
return LearningShell(state: appState);
|
|
}
|
|
if (onboardingStep == 0) {
|
|
return WelcomePage(
|
|
state: appState,
|
|
onContinue: () => setState(() => onboardingStep = 1),
|
|
);
|
|
}
|
|
return PlacementPage(
|
|
state: appState,
|
|
onStart: () => appState.finishOnboarding(),
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|