Marco
cb18e1d1f0
1. Show PerDate widgets inside of an PageView 2. Introduce GoRouter so we can intercept back button taps with BackButtonListener 3. Implement rudimentary navigation 4. Fix bug that still showed a spinner event when the barcode was not found.
104 lines
3.0 KiB
Dart
104 lines
3.0 KiB
Dart
import 'package:calorimeter/perdate/perdate_pageview.dart';
|
|
import 'package:calorimeter/storage/storage.dart';
|
|
import 'package:calorimeter/utils/settings_bloc.dart';
|
|
import 'package:calorimeter/utils/theme_bloc.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
|
|
void main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
|
|
var storage = await FoodStorage.create();
|
|
await storage.buildFoodLookupDatabase();
|
|
var kcalLimit = await storage.readLimit();
|
|
var brightness = await storage.readBrightness();
|
|
|
|
runApp(
|
|
MainApp(
|
|
storage: storage,
|
|
kcalLimit: kcalLimit,
|
|
brightness: brightness,
|
|
),
|
|
);
|
|
}
|
|
|
|
class MainApp extends StatelessWidget {
|
|
final FoodStorage storage;
|
|
final double kcalLimit;
|
|
final String brightness;
|
|
|
|
const MainApp(
|
|
{required this.storage,
|
|
required this.kcalLimit,
|
|
required this.brightness,
|
|
super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return SafeArea(
|
|
child: MultiBlocProvider(
|
|
providers: [
|
|
BlocProvider(
|
|
create: (context) => SettingsDataBloc(
|
|
SettingsState(kcalLimit: kcalLimit),
|
|
storage: storage),
|
|
),
|
|
BlocProvider(
|
|
create: (context) => ThemeDataBloc(
|
|
ThemeState(brightness: brightness),
|
|
storage: storage),
|
|
),
|
|
],
|
|
child: BlocBuilder<ThemeDataBloc, ThemeState>(
|
|
builder: (context, state) {
|
|
var newBrightness = Brightness.light;
|
|
if (state.brightness == 'dark') {
|
|
newBrightness = Brightness.dark;
|
|
}
|
|
|
|
return MaterialApp.router(
|
|
routerConfig: GoRouter(
|
|
routes: [
|
|
GoRoute(
|
|
path: '/',
|
|
builder: (context, state) {
|
|
return PerDatePageview(
|
|
initalDate: DateTime.now().copyWith(
|
|
hour: 0,
|
|
minute: 0,
|
|
second: 0,
|
|
millisecond: 0,
|
|
microsecond: 0,
|
|
),
|
|
);
|
|
},
|
|
),
|
|
],
|
|
),
|
|
localizationsDelegates: const [
|
|
GlobalMaterialLocalizations.delegate,
|
|
GlobalWidgetsLocalizations.delegate,
|
|
GlobalCupertinoLocalizations.delegate,
|
|
],
|
|
supportedLocales: const [
|
|
Locale('de'),
|
|
],
|
|
theme: ThemeData(
|
|
dividerTheme: const DividerThemeData(space: 2),
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: Colors.lightBlue,
|
|
brightness: newBrightness,
|
|
),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|