Files
2026-08-30 12:24:29 +02:00

64 lines
1.6 KiB
Dart

/// Application entry point: capture a receipt, review line items, save products.
library;
import 'package:flutter/material.dart';
import 'home_shell.dart';
import 'services/app_settings.dart';
import 'services/product_repository.dart';
import 'services/receipt_parser.dart';
import 'utils/app_theme.dart';
import 'utils/constants.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await ReceiptParser.loadConfig();
runApp(ReceipityApp());
}
class ReceipityApp extends StatefulWidget {
ReceipityApp({super.key, ProductRepository? repository})
: repository = repository ?? ProductRepository();
final ProductRepository repository;
@override
State<ReceipityApp> createState() => _ReceipityAppState();
}
class _ReceipityAppState extends State<ReceipityApp> {
late final AppSettings _settings;
@override
void initState() {
super.initState();
_settings = AppSettings(widget.repository);
_settings.addListener(_onSettings);
_settings.load();
}
@override
void dispose() {
_settings.removeListener(_onSettings);
_settings.dispose();
super.dispose();
}
void _onSettings() => setState(() {});
@override
Widget build(BuildContext context) {
return SettingsScope(
settings: _settings,
child: MaterialApp(
title: kAppName,
debugShowCheckedModeBanner: false,
theme: AppTheme.light(),
darkTheme: AppTheme.dark(),
themeMode: _settings.darkMode ? ThemeMode.dark : ThemeMode.light,
home: HomeShell(repository: widget.repository),
),
);
}
}