| // 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, |
| ), |
| ), |
| ], |
| ), |
| ); |
| } |
| } |