// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart' show timeDilation; import 'package:flutter_localized_locales/flutter_localized_locales.dart'; import 'package:google_fonts/google_fonts.dart'; import 'constants.dart'; import 'data/gallery_options.dart'; import 'gallery_localizations.dart'; import 'layout/adaptive.dart'; import 'pages/backdrop.dart'; import 'pages/splash.dart'; import 'routes.dart'; import 'themes/gallery_theme_data.dart'; export 'package:gallery/data/demos.dart' show pumpDeferredLibraries; void main() async { GoogleFonts.config.allowRuntimeFetching = false; runApp(const GalleryApp()); } class GalleryApp extends StatelessWidget { const GalleryApp({super.key, this.initialRoute, this.isTestMode = false}); final String? initialRoute; final bool isTestMode; @override Widget build(BuildContext context) { return ModelBinding( initialModel: GalleryOptions( themeMode: ThemeMode.system, textScaleFactor: systemTextScaleFactorOption, customTextDirection: CustomTextDirection.localeBased, locale: null, timeDilation: timeDilation, platform: defaultTargetPlatform, isTestMode: isTestMode, ), child: Builder( builder: (BuildContext context) { final GalleryOptions options = GalleryOptions.of(context); return MaterialApp( restorationScopeId: 'rootGallery', title: 'Flutter Gallery', debugShowCheckedModeBanner: false, themeMode: options.themeMode, theme: GalleryThemeData.lightThemeData.copyWith(platform: options.platform), darkTheme: GalleryThemeData.darkThemeData.copyWith(platform: options.platform), localizationsDelegates: const >[ ...GalleryLocalizations.localizationsDelegates, LocaleNamesLocalizationsDelegate(), ], initialRoute: initialRoute, supportedLocales: GalleryLocalizations.supportedLocales, locale: options.locale, localeListResolutionCallback: ( List? locales, Iterable supportedLocales, ) { deviceLocale = locales?.first; return basicLocaleListResolution(locales, supportedLocales); }, onGenerateRoute: (RouteSettings settings) => RouteConfiguration.onGenerateRoute(settings), ); }, ), ); } } // ignore: unreachable_from_main class RootPage extends StatelessWidget { // ignore: unreachable_from_main const RootPage({super.key}); @override Widget build(BuildContext context) { return ApplyTextOptions( child: SplashPage(child: Backdrop(isDesktop: isDisplayDesktop(context))), ); } }