// 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 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart' show timeDilation; void main() { runApp( const PlatformViewApp() ); } class PlatformViewApp extends StatefulWidget { const PlatformViewApp({ super.key, }); @override PlatformViewAppState createState() => PlatformViewAppState(); } class PlatformViewAppState extends State<PlatformViewApp> { @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData.light(), title: 'Advanced Layout', home: const PlatformViewLayout(), ); } void toggleAnimationSpeed() { setState(() { timeDilation = (timeDilation != 1.0) ? 1.0 : 5.0; }); } } class PlatformViewLayout extends StatelessWidget { const PlatformViewLayout({ super.key }); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Platform View Scrolling Layout')), body: ListView.builder( key: const Key('platform-views-scroll'), // This key is used by the driver test. itemCount: 200, itemBuilder: (BuildContext context, int index) { return Padding( padding: const EdgeInsets.all(5.0), child: Material( elevation: (index % 5 + 1).toDouble(), color: Colors.white, child: index.isEven ? CustomPaint(painter: ExpensivePainter(), size: const Size(400, 200)) : const DummyPlatformView() ), ); }, ), ); } } class DummyPlatformView extends StatelessWidget { const DummyPlatformView({super.key}); @override Widget build(BuildContext context) { const String viewType = 'benchmarks/platform_views_layout/DummyPlatformView'; late Widget nativeView; if (Platform.isIOS) { nativeView = const UiKitView( viewType: viewType, ); } else if (Platform.isAndroid) { nativeView = const AndroidView( viewType: viewType, ); } else { assert(false, 'Invalid platform'); } return Container( color: Colors.purple, height: 200.0, child: nativeView, ); } } class ExpensivePainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { final double boxWidth = size.width / 50; final double boxHeight = size.height / 50; for (int i = 0; i < 50; i++) { for (int j = 0; j < 50; j++) { final Rect rect = Rect.fromLTWH(i * boxWidth, j * boxHeight, boxWidth, boxHeight); canvas.drawRect(rect, Paint() ..style = PaintingStyle.fill ..color = Colors.red ); } } } @override bool shouldRepaint(covariant CustomPainter oldDelegate) { return false; } }