/// 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 'utils/app_theme.dart'; import 'utils/constants.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); runApp(ReceipityApp()); } class ReceipityApp extends StatefulWidget { ReceipityApp({super.key, ProductRepository? repository}) : repository = repository ?? ProductRepository(); final ProductRepository repository; @override State createState() => _ReceipityAppState(); } class _ReceipityAppState extends State { 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), ), ); } }