// 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'; /// Flutter code sample for [CustomScrollView]. void main() => runApp(const CustomScrollViewExampleApp()); class CustomScrollViewExampleApp extends StatelessWidget { const CustomScrollViewExampleApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( home: CustomScrollViewExample(), ); } } class CustomScrollViewExample extends StatefulWidget { const CustomScrollViewExample({super.key}); @override State createState() => _CustomScrollViewExampleState(); } class _CustomScrollViewExampleState extends State { List top = []; List bottom = [0]; @override Widget build(BuildContext context) { const Key centerKey = ValueKey('bottom-sliver-list'); return Scaffold( appBar: AppBar( title: const Text('Press on the plus to add items above and below'), leading: IconButton( icon: const Icon(Icons.add), onPressed: () { setState(() { top.add(-top.length - 1); bottom.add(bottom.length); }); }, ), ), body: CustomScrollView( center: centerKey, slivers: [ SliverList( delegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return Container( alignment: Alignment.center, color: Colors.blue[200 + top[index] % 4 * 100], height: 100 + top[index] % 4 * 20.0, child: Text('Item: ${top[index]}'), ); }, childCount: top.length, ), ), SliverList( key: centerKey, delegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return Container( alignment: Alignment.center, color: Colors.blue[200 + bottom[index] % 4 * 100], height: 100 + bottom[index] % 4 * 20.0, child: Text('Item: ${bottom[index]}'), ); }, childCount: bottom.length, ), ), ], ), ); } }