| // 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 [SliverAppBar]. |
| |
| void main() { |
| runApp(const StretchableSliverAppBar()); |
| } |
| |
| class StretchableSliverAppBar extends StatefulWidget { |
| const StretchableSliverAppBar({super.key}); |
| |
| @override |
| State<StretchableSliverAppBar> createState() => |
| _StretchableSliverAppBarState(); |
| } |
| |
| class _StretchableSliverAppBarState extends State<StretchableSliverAppBar> { |
| bool _stretch = true; |
| @override |
| Widget build(BuildContext context) { |
| return MaterialApp( |
| home: Scaffold( |
| body: CustomScrollView( |
| physics: const BouncingScrollPhysics(), |
| slivers: <Widget>[ |
| SliverAppBar( |
| stretch: _stretch, |
| onStretchTrigger: () async { |
| // Triggers when stretching |
| }, |
| // [stretchTriggerOffset] describes the amount of overscroll that must occur |
| // to trigger [onStretchTrigger] |
| // |
| // Setting [stretchTriggerOffset] to a value of 300.0 will trigger |
| // [onStretchTrigger] when the user has overscrolled by 300.0 pixels. |
| stretchTriggerOffset: 300.0, |
| expandedHeight: 200.0, |
| flexibleSpace: const FlexibleSpaceBar( |
| title: Text('SliverAppBar'), |
| background: FlutterLogo(), |
| ), |
| ), |
| SliverList( |
| delegate: SliverChildBuilderDelegate( |
| (BuildContext context, int index) { |
| return Container( |
| color: index.isOdd ? Colors.white : Colors.black12, |
| height: 100.0, |
| child: Center( |
| child: Text('$index', textScaler: const TextScaler.linear(5.0)), |
| ), |
| ); |
| }, |
| childCount: 20, |
| ), |
| ), |
| ], |
| ), |
| bottomNavigationBar: BottomAppBar( |
| child: Padding( |
| padding: const EdgeInsets.all(8), |
| child: OverflowBar( |
| overflowAlignment: OverflowBarAlignment.center, |
| alignment: MainAxisAlignment.center, |
| children: <Widget>[ |
| Row( |
| mainAxisSize: MainAxisSize.min, |
| children: <Widget>[ |
| const Text('stretch'), |
| Switch( |
| onChanged: (bool val) { |
| setState(() { |
| _stretch = val; |
| }); |
| }, |
| value: _stretch, |
| ), |
| ], |
| ), |
| ], |
| ), |
| ), |
| ), |
| )); |
| } |
| } |