// 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/cupertino.dart'; /// Flutter code sample for [CupertinoSheetRoute]. void main() { runApp(const CupertinoSheetApp()); } class CupertinoSheetApp extends StatelessWidget { const CupertinoSheetApp({super.key}); @override Widget build(BuildContext context) { return const CupertinoApp( title: 'Scrollable Cupertino Sheet', home: HomePage(), ); } } class HomePage extends StatelessWidget { const HomePage({super.key}); @override Widget build(BuildContext context) { return CupertinoPageScaffold( navigationBar: const CupertinoNavigationBar( middle: Text('Scrollable Cupertino Sheet Example'), automaticBackgroundVisibility: false, ), child: Center( child: Column( mainAxisAlignment: .center, children: [ CupertinoButton.filled( onPressed: () { Navigator.of(context).push( CupertinoSheetRoute( scrollableBuilder: (BuildContext context, ScrollController controller) => _ScrollableSheetBody(scrollController: controller), ), ); }, child: const Text('Open Sheet'), ), ], ), ), ); } } class _ScrollableSheetBody extends StatelessWidget { const _ScrollableSheetBody({required this.scrollController}); final ScrollController scrollController; @override Widget build(BuildContext context) { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( backgroundColor: CupertinoColors.systemGrey3, middle: const Text('Scrollable Sheet'), automaticBackgroundVisibility: false, leading: CupertinoButton( padding: .zero, child: const Text('Close'), onPressed: () { CupertinoSheetRoute.popSheet(context); }, ), ), child: CustomScrollView( controller: scrollController, primary: false, slivers: [ SliverList( delegate: SliverChildBuilderDelegate(( BuildContext context, int index, ) { return Container( alignment: .center, height: 100, child: const Text('Scroll Me'), ); }, childCount: 20), ), ], ), ); } }