// 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. // Flutter code sample for [CustomScrollView]. import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); static const String _title = 'Flutter Code Sample'; @override Widget build(BuildContext context) { return const MaterialApp( title: _title, home: MyStatefulWidget(), ); } } class MyStatefulWidget extends StatefulWidget { const MyStatefulWidget({super.key}); @override State<MyStatefulWidget> createState() => _MyStatefulWidgetState(); } class _MyStatefulWidgetState extends State<MyStatefulWidget> { List<int> top = <int>[]; List<int> bottom = <int>[0]; @override Widget build(BuildContext context) { const Key centerKey = ValueKey<String>('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: <Widget>[ 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, ), ), ], ), ); } }