74 lines
2.6 KiB
Dart
74 lines
2.6 KiB
Dart
// Author: fruit.com.cn
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'core/config/locale_controller.dart';
|
|
import 'core/data/repositories/catalog_repository.dart';
|
|
import 'core/data/repositories/engagement_repository.dart';
|
|
import 'core/data/services/catalog_controller.dart';
|
|
import 'core/data/services/engagement_controller.dart';
|
|
import 'core/data/services/playback_session.dart';
|
|
import 'core/data/services/video_player_port.dart';
|
|
import 'l10n/app_localizations.dart';
|
|
import 'pages/home/home_view.dart';
|
|
|
|
class LumaDramaApp extends StatelessWidget {
|
|
const LumaDramaApp({super.key, this.playerFactory = VideoPlayerPort.new});
|
|
|
|
final PlayerFactory playerFactory;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MultiProvider(
|
|
providers: [
|
|
Provider(create: (_) => PlaybackCoordinator()),
|
|
Provider<PlayerFactory>(create: (_) => playerFactory),
|
|
ChangeNotifierProvider(
|
|
create: (_) => CatalogController(DemoCatalogRepository())..load(),
|
|
),
|
|
ChangeNotifierProvider(create: (_) => LocaleController()..load()),
|
|
ChangeNotifierProvider(
|
|
create: (_) =>
|
|
EngagementController(SharedPreferencesEngagementRepository())
|
|
..load(),
|
|
),
|
|
],
|
|
child: Consumer<LocaleController>(
|
|
builder: (context, locale, _) => MaterialApp(
|
|
onGenerateTitle: (context) => AppLocalizations.of(context)!.appName,
|
|
locale: locale.locale,
|
|
supportedLocales: AppLocalizations.supportedLocales,
|
|
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
|
localeResolutionCallback: (deviceLocale, supported) {
|
|
final resolved = locale.locale ?? deviceLocale;
|
|
if (resolved == null) return supported.first;
|
|
for (final item in supported) {
|
|
if (item.languageCode == resolved.languageCode) return item;
|
|
}
|
|
return supported.first;
|
|
},
|
|
debugShowCheckedModeBanner: false,
|
|
themeMode: ThemeMode.system,
|
|
theme: ThemeData(
|
|
useMaterial3: true,
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: const Color(0xFF6D4AFF),
|
|
),
|
|
scaffoldBackgroundColor: const Color(0xFFF8F7FC),
|
|
),
|
|
darkTheme: ThemeData(
|
|
useMaterial3: true,
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: const Color(0xFF9B86FF),
|
|
brightness: Brightness.dark,
|
|
),
|
|
scaffoldBackgroundColor: const Color(0xFF101019),
|
|
),
|
|
home: const HomePage(),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|