// 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/material.dart'; import 'common.dart'; import 'src/animated_placeholder.dart'; import 'src/backdrop_filter.dart'; import 'src/color_filter_and_fade.dart'; import 'src/cubic_bezier.dart'; import 'src/cull_opacity.dart'; import 'src/filtered_child_animation.dart'; import 'src/heavy_grid_view.dart'; import 'src/large_image_changer.dart'; import 'src/large_images.dart'; import 'src/multi_widget_construction.dart'; import 'src/picture_cache.dart'; import 'src/post_backdrop_filter.dart'; import 'src/simple_animation.dart'; import 'src/simple_scroll.dart'; import 'src/text.dart'; const String kMacrobenchmarks = 'Macrobenchmarks'; void main() => runApp(const MacrobenchmarksApp()); class MacrobenchmarksApp extends StatelessWidget { const MacrobenchmarksApp({this.initialRoute = '/'}); @override Widget build(BuildContext context) { return MaterialApp( title: kMacrobenchmarks, initialRoute: initialRoute, routes: <String, WidgetBuilder>{ '/': (BuildContext context) => HomePage(), kCullOpacityRouteName: (BuildContext context) => CullOpacityPage(), kCubicBezierRouteName: (BuildContext context) => CubicBezierPage(), kBackdropFilterRouteName: (BuildContext context) => BackdropFilterPage(), kPostBackdropFilterRouteName: (BuildContext context) => PostBackdropFilterPage(), kSimpleAnimationRouteName: (BuildContext context) => SimpleAnimationPage(), kPictureCacheRouteName: (BuildContext context) => PictureCachePage(), kLargeImageChangerRouteName: (BuildContext context) => LargeImageChangerPage(), kLargeImagesRouteName: (BuildContext context) => LargeImagesPage(), kTextRouteName: (BuildContext context) => TextPage(), kAnimatedPlaceholderRouteName: (BuildContext context) => AnimatedPlaceholderPage(), kColorFilterAndFadeRouteName: (BuildContext context) => ColorFilterAndFadePage(), kFadingChildAnimationRouteName: (BuildContext context) => const FilteredChildAnimationPage(FilterType.opacity), kImageFilteredTransformAnimationRouteName: (BuildContext context) => const FilteredChildAnimationPage(FilterType.rotateFilter), kMultiWidgetConstructionRouteName: (BuildContext context) => const MultiWidgetConstructTable(10, 20), kHeavyGridViewRouteName: (BuildContext context) => HeavyGridViewPage(), kSimpleScrollRouteName: (BuildContext context) => SimpleScroll(), }, ); } final String initialRoute; } class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text(kMacrobenchmarks)), body: ListView( key: const Key(kScrollableName), children: <Widget>[ ElevatedButton( key: const Key(kCullOpacityRouteName), child: const Text('Cull opacity'), onPressed: () { Navigator.pushNamed(context, kCullOpacityRouteName); }, ), ElevatedButton( key: const Key(kCubicBezierRouteName), child: const Text('Cubic Bezier'), onPressed: () { Navigator.pushNamed(context, kCubicBezierRouteName); }, ), ElevatedButton( key: const Key(kBackdropFilterRouteName), child: const Text('Backdrop Filter'), onPressed: () { Navigator.pushNamed(context, kBackdropFilterRouteName); }, ), ElevatedButton( key: const Key(kPostBackdropFilterRouteName), child: const Text('Post Backdrop Filter'), onPressed: () { Navigator.pushNamed(context, kPostBackdropFilterRouteName); }, ), ElevatedButton( key: const Key(kSimpleAnimationRouteName), child: const Text('Simple Animation'), onPressed: () { Navigator.pushNamed(context, kSimpleAnimationRouteName); }, ), ElevatedButton( key: const Key(kPictureCacheRouteName), child: const Text('Picture Cache'), onPressed: () { Navigator.pushNamed(context, kPictureCacheRouteName); }, ), ElevatedButton( key: const Key(kLargeImagesRouteName), child: const Text('Large Images'), onPressed: () { Navigator.pushNamed(context, kLargeImagesRouteName); }, ), ElevatedButton( key: const Key(kTextRouteName), child: const Text('Text'), onPressed: () { Navigator.pushNamed(context, kTextRouteName); }, ), ElevatedButton( key: const Key(kAnimatedPlaceholderRouteName), child: const Text('Animated Placeholder'), onPressed: () { Navigator.pushNamed(context, kAnimatedPlaceholderRouteName); }, ), ElevatedButton( key: const Key(kColorFilterAndFadeRouteName), child: const Text('Color Filter and Fade'), onPressed: () { Navigator.pushNamed(context, kColorFilterAndFadeRouteName); }, ), ElevatedButton( key: const Key(kFadingChildAnimationRouteName), child: const Text('Fading Child Animation'), onPressed: () { Navigator.pushNamed(context, kFadingChildAnimationRouteName); }, ), ElevatedButton( key: const Key(kImageFilteredTransformAnimationRouteName), child: const Text('ImageFiltered Transform Animation'), onPressed: () { Navigator.pushNamed(context, kImageFilteredTransformAnimationRouteName); }, ), ElevatedButton( key: const Key(kMultiWidgetConstructionRouteName), child: const Text('Widget Construction and Destruction'), onPressed: () { Navigator.pushNamed(context, kMultiWidgetConstructionRouteName); }, ), ElevatedButton( key: const Key(kHeavyGridViewRouteName), child: const Text('Heavy Grid View'), onPressed: () { Navigator.pushNamed(context, kHeavyGridViewRouteName); }, ), ElevatedButton( key: const Key(kLargeImageChangerRouteName), child: const Text('Large Image Changer'), onPressed: () { Navigator.pushNamed(context, kLargeImageChangerRouteName); }, ), ], ), ); } }