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)
This commit is contained in:
91
lib/main.dart
Normal file
91
lib/main.dart
Normal file
@@ -0,0 +1,91 @@
|
||||
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(),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user