62 lines
1.5 KiB
Dart
62 lines
1.5 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 '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<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),
|
|
),
|
|
);
|
|
}
|
|
}
|