// 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'; void main() { runApp(const PlatformViewApp()); } class PlatformViewApp extends StatefulWidget { const PlatformViewApp({super.key}); @override PlatformViewAppState createState() => PlatformViewAppState(); } class PlatformViewAppState extends State { @override Widget build(BuildContext context) { return const MaterialApp(title: 'Advanced Layout', home: PlatformViewLayout()); } } 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 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 (var i = 0; i < 50; i++) { for (var j = 0; j < 50; j++) { final 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; } }