rwadurian/frontend/mobile-app/lib/bootstrap.dart

51 lines
1.4 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'core/storage/local_storage.dart';
import 'core/di/injection_container.dart';
import 'core/utils/logger.dart';
Future<void> bootstrap(FutureOr<Widget> Function() builder) async {
// Ensure Flutter bindings are initialized
WidgetsFlutterBinding.ensureInitialized();
// Set preferred orientations
await SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
// Set system UI overlay style
SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.dark,
systemNavigationBarColor: Colors.white,
systemNavigationBarIconBrightness: Brightness.dark,
),
);
// Initialize Hive
await Hive.initFlutter();
// Initialize LocalStorage
final localStorage = await LocalStorage.init();
// Create provider container with initialized dependencies
final container = createProviderContainer(localStorage);
// Run app with error handling
FlutterError.onError = (details) {
AppLogger.e('Flutter Error', details.exception, details.stack);
};
runApp(
UncontrolledProviderScope(
container: container,
child: await builder(),
),
);
}