// 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:async'; import 'package:flutter/material.dart'; import 'recorder.dart'; import 'test_data.dart'; /// Creates an infinite list of Material cards and scrolls it. class BenchCardInfiniteScroll extends WidgetRecorder { BenchCardInfiniteScroll() : super(name: benchmarkName); static const String benchmarkName = 'bench_card_infinite_scroll'; @override Widget createWidget() => const MaterialApp( title: 'Infinite Card Scroll Benchmark', home: _InfiniteScrollCards(), ); } class _InfiniteScrollCards extends StatefulWidget { const _InfiniteScrollCards({Key key}) : super(key: key); @override State<_InfiniteScrollCards> createState() => _InfiniteScrollCardsState(); } class _InfiniteScrollCardsState extends State<_InfiniteScrollCards> { ScrollController scrollController; double offset; static const double distance = 1000; static const Duration stepDuration = Duration(seconds: 1); @override void initState() { super.initState(); scrollController = ScrollController(); offset = 0; // Without the timer the animation doesn't begin. Timer.run(() async { while (true) { await scrollController.animateTo( offset + distance, curve: Curves.linear, duration: stepDuration, ); offset += distance; } }); } @override Widget build(BuildContext context) { return ListView.builder( controller: scrollController, itemBuilder: (BuildContext context, int index) { return SizedBox( height: 100.0, child: Card( elevation: 16.0, child: Text( lipsum[index % lipsum.length], textAlign: TextAlign.center, ), ), ); }, ); } }