Files
habo/lib/main.dart
dazhuang aa69f2a91e feat: initial commit - Habo habit tracking app
- Complete MVP with Repository Pattern, SQLite storage
- Provider + ChangeNotifier state management
- Navigation 2.0 with deep link support
- Habit CRUD with twoDayRule, notifications, categories
- Backup/Restore via JSON
- Statistics with streak tracking
- Material You theme support
- Biometric lock support
- Desktop widget support
- 27 languages i18n structure
- Comprehensive test suite (87/89 passing)
2026-04-13 15:02:30 +00:00

92 lines
3.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:habo/constants.dart';
import 'package:habo/generated/l10n.dart';
import 'package:habo/habits/habits_manager.dart';
import 'package:habo/model/habo_model.dart';
import 'package:habo/navigation/app_router.dart';
import 'package:habo/navigation/app_state_manager.dart';
import 'package:habo/navigation/route_information_parser.dart';
import 'package:habo/services/service_locator.dart';
import 'package:habo/settings/settings_manager.dart';
import 'package:habo/themes.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Initialize settings
final settingsManager = SettingsManager();
await settingsManager.loadData();
// Initialize database
final haboModel = HaboModel();
await haboModel.initDatabase();
// Initialize service locator
final scaffoldKey = GlobalKey<ScaffoldMessengerState>();
ServiceLocator.instance.initialize(scaffoldKey, haboModel, settingsManager);
// Initialize habits manager
final habitsManager = HabitsManager(
habitRepository: ServiceLocator.instance.repositoryFactory.habitRepository,
eventRepository: ServiceLocator.instance.repositoryFactory.eventRepository,
categoryRepository: ServiceLocator.instance.repositoryFactory.categoryRepository,
backupService: ServiceLocator.instance.backupService,
notificationService: ServiceLocator.instance.notificationService,
uiFeedbackService: ServiceLocator.instance.uiFeedbackService,
);
await habitsManager.loadHabits();
// Initialize notification service
await ServiceLocator.instance.notificationService.init();
// Create app state manager and router
final appStateManager = AppStateManager();
final appRouter = AppRouter(appStateManager);
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider.value(value: settingsManager),
ChangeNotifierProvider.value(value: habitsManager),
ChangeNotifierProvider.value(value: appStateManager),
],
child: HaboApp(
appRouter: appRouter,
settingsManager: settingsManager,
scaffoldKey: scaffoldKey,
),
),
);
}
class HaboApp extends StatelessWidget {
final AppRouter appRouter;
final SettingsManager settingsManager;
final GlobalKey<ScaffoldMessengerState> scaffoldKey;
const HaboApp({
super.key,
required this.appRouter,
required this.settingsManager,
required this.scaffoldKey,
});
@override
Widget build(BuildContext context) {
return MaterialApp.router(
title: 'Habo',
scaffoldMessengerKey: scaffoldKey,
debugShowCheckedModeBanner: false,
theme: HaboTheme.lightTheme(),
darkTheme: HaboTheme.darkTheme(),
themeMode: ThemeMode.system,
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
routerDelegate: appRouter,
routeInformationParser: HaboRouteInformationParser(),
);
}
}