initial commit
This commit is contained in:
commit
18e07dcb6d
194 changed files with 14049 additions and 0 deletions
107
lib/main.dart
Normal file
107
lib/main.dart
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
import 'package:intl/date_symbol_data_local.dart';
|
||||
import 'dart:developer';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:timetracker/screens/main_screen.dart';
|
||||
import 'package:timetracker/src/rust/api.dart';
|
||||
import 'package:timetracker/src/rust/frb_generated.dart';
|
||||
import 'package:timetracker/time_tracking_service.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
log("main: Start");
|
||||
try {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
await initializeDateFormatting('de_DE', null);
|
||||
try {
|
||||
await RustLib.init();
|
||||
} catch (e) {
|
||||
runApp(ErrorApp(error: "RustLib Init Failed: $e"));
|
||||
}
|
||||
|
||||
try {
|
||||
final dbDir = await getApplicationDocumentsDirectory();
|
||||
await Directory(dbDir.path).create(recursive: true);
|
||||
await initApp(dbDirectoryPath: dbDir.path);
|
||||
} catch (e) {
|
||||
runApp(ErrorApp(error: "Database Init Failed: $e"));
|
||||
return;
|
||||
}
|
||||
|
||||
runApp(
|
||||
ChangeNotifierProvider(
|
||||
create: (context) => TimeTrackingService(),
|
||||
child: const MyApp(),
|
||||
),
|
||||
);
|
||||
} catch (e) {
|
||||
runApp(ErrorApp(error: "Unhandled error in main: $e"));
|
||||
}
|
||||
}
|
||||
|
||||
class ErrorApp extends StatelessWidget {
|
||||
final String error;
|
||||
const ErrorApp({required this.error, Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
home: Scaffold(
|
||||
appBar: AppBar(title: const Text("Initialization Error")),
|
||||
body: Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Text("Could not initialize the application:\n\n$error"),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
const MyApp({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
title: 'Flutter Rust Time Tracker',
|
||||
theme: ThemeData(
|
||||
primarySwatch: Colors.blue,
|
||||
useMaterial3: true,
|
||||
// Optional: Theme für BottomNavigationBar anpassen
|
||||
// bottomNavigationBarTheme: const BottomNavigationBarThemeData(
|
||||
// selectedItemColor: Colors.deepPurple,
|
||||
// unselectedItemColor: Colors.grey,
|
||||
// ),
|
||||
),
|
||||
home: const InitializerWidget(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class InitializerWidget extends StatelessWidget {
|
||||
const InitializerWidget({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final initStatus = context.select(
|
||||
(TimeTrackingService s) => s.isInitialized,
|
||||
);
|
||||
final isLoading = context.select((TimeTrackingService s) => s.isLoading);
|
||||
|
||||
if (isLoading) {
|
||||
return const Scaffold(body: Center(child: CircularProgressIndicator()));
|
||||
} else if (!initStatus) {
|
||||
return const Scaffold(
|
||||
body: Center(
|
||||
child: Text("Fehler bei der Initialisierung der Datenbank."),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return const MainScreen();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue