| // Copyright 2015 The Chromium 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 'dart:async'; |
| |
| import 'package:flutter/foundation.dart' show defaultTargetPlatform; |
| import 'package:flutter/material.dart'; |
| import 'package:flutter/scheduler.dart' show timeDilation; |
| |
| import 'home.dart'; |
| import 'item.dart'; |
| import 'updates.dart'; |
| |
| final Map<String, WidgetBuilder> _kRoutes = new Map<String, WidgetBuilder>.fromIterable( |
| // For a different example of how to set up an application routing table, |
| // consider the Stocks example: |
| // https://github.com/flutter/flutter/blob/master/examples/stocks/lib/main.dart |
| kAllGalleryItems, |
| key: (GalleryItem item) => item.routeName, |
| value: (GalleryItem item) => item.buildRoute, |
| ); |
| |
| final ThemeData _kGalleryLightTheme = new ThemeData( |
| brightness: Brightness.light, |
| primarySwatch: Colors.blue, |
| ); |
| |
| final ThemeData _kGalleryDarkTheme = new ThemeData( |
| brightness: Brightness.dark, |
| primarySwatch: Colors.blue, |
| ); |
| |
| class GalleryApp extends StatefulWidget { |
| const GalleryApp({ |
| this.updateUrlFetcher, |
| this.enablePerformanceOverlay: true, |
| this.checkerboardRasterCacheImages: true, |
| this.checkerboardOffscreenLayers: true, |
| this.onSendFeedback, |
| Key key} |
| ) : super(key: key); |
| |
| final UpdateUrlFetcher updateUrlFetcher; |
| |
| final bool enablePerformanceOverlay; |
| |
| final bool checkerboardRasterCacheImages; |
| |
| final bool checkerboardOffscreenLayers; |
| |
| final VoidCallback onSendFeedback; |
| |
| @override |
| GalleryAppState createState() => new GalleryAppState(); |
| } |
| |
| class GalleryAppState extends State<GalleryApp> { |
| bool _useLightTheme = true; |
| bool _showPerformanceOverlay = false; |
| bool _checkerboardRasterCacheImages = false; |
| bool _checkerboardOffscreenLayers = false; |
| double _timeDilation = 1.0; |
| TargetPlatform _platform; |
| |
| Timer _timeDilationTimer; |
| |
| @override |
| void initState() { |
| _timeDilation = timeDilation; |
| super.initState(); |
| } |
| |
| @override |
| void dispose() { |
| _timeDilationTimer?.cancel(); |
| _timeDilationTimer = null; |
| super.dispose(); |
| } |
| |
| @override |
| Widget build(BuildContext context) { |
| Widget home = new GalleryHome( |
| useLightTheme: _useLightTheme, |
| onThemeChanged: (bool value) { |
| setState(() { |
| _useLightTheme = value; |
| }); |
| }, |
| showPerformanceOverlay: _showPerformanceOverlay, |
| onShowPerformanceOverlayChanged: widget.enablePerformanceOverlay ? (bool value) { |
| setState(() { |
| _showPerformanceOverlay = value; |
| }); |
| } : null, |
| checkerboardRasterCacheImages: _checkerboardRasterCacheImages, |
| onCheckerboardRasterCacheImagesChanged: widget.checkerboardRasterCacheImages ? (bool value) { |
| setState(() { |
| _checkerboardRasterCacheImages = value; |
| }); |
| } : null, |
| checkerboardOffscreenLayers: _checkerboardOffscreenLayers, |
| onCheckerboardOffscreenLayersChanged: widget.checkerboardOffscreenLayers ? (bool value) { |
| setState(() { |
| _checkerboardOffscreenLayers = value; |
| }); |
| } : null, |
| onPlatformChanged: (TargetPlatform value) { |
| setState(() { |
| _platform = value == defaultTargetPlatform ? null : value; |
| }); |
| }, |
| timeDilation: _timeDilation, |
| onTimeDilationChanged: (double value) { |
| setState(() { |
| _timeDilationTimer?.cancel(); |
| _timeDilationTimer = null; |
| _timeDilation = value; |
| if (_timeDilation > 1.0) { |
| // We delay the time dilation change long enough that the user can see |
| // that the checkbox in the drawer has started reacting, then we slam |
| // on the brakes so that they see that the time is in fact now dilated. |
| _timeDilationTimer = new Timer(const Duration(milliseconds: 150), () { |
| timeDilation = _timeDilation; |
| }); |
| } else { |
| timeDilation = _timeDilation; |
| } |
| }); |
| }, |
| onSendFeedback: widget.onSendFeedback, |
| ); |
| |
| if (widget.updateUrlFetcher != null) { |
| home = new Updater( |
| updateUrlFetcher: widget.updateUrlFetcher, |
| child: home, |
| ); |
| } |
| |
| return new MaterialApp( |
| title: 'Flutter Gallery', |
| color: Colors.grey, |
| theme: (_useLightTheme ? _kGalleryLightTheme : _kGalleryDarkTheme).copyWith(platform: _platform ?? defaultTargetPlatform), |
| showPerformanceOverlay: _showPerformanceOverlay, |
| checkerboardRasterCacheImages: _checkerboardRasterCacheImages, |
| checkerboardOffscreenLayers: _checkerboardOffscreenLayers, |
| routes: _kRoutes, |
| home: home, |
| ); |
| } |
| } |