// 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 [Scaffold.floatingActionButtonAnimator]. void main() => runApp(const ScaffoldFloatingActionButtonAnimatorApp()); class ScaffoldFloatingActionButtonAnimatorApp extends StatelessWidget { const ScaffoldFloatingActionButtonAnimatorApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( home: ScaffoldFloatingActionButtonAnimatorExample(), ); } } enum FabAnimator { defaultStyle, none } const List<(FabAnimator, String)> fabAnimatoregments = <(FabAnimator, String)>[ (FabAnimator.defaultStyle, 'Default'), (FabAnimator.none, 'None'), ]; enum FabLocation { centerFloat, endFloat, endTop } const List<(FabLocation, String)> fabLocationegments = <(FabLocation, String)>[ (FabLocation.centerFloat, 'centerFloat'), (FabLocation.endFloat, 'endFloat'), (FabLocation.endTop, 'endTop'), ]; class ScaffoldFloatingActionButtonAnimatorExample extends StatefulWidget { const ScaffoldFloatingActionButtonAnimatorExample({super.key}); @override State createState() => _ScaffoldFloatingActionButtonAnimatorExampleState(); } class _ScaffoldFloatingActionButtonAnimatorExampleState extends State { Set _selectedFabAnimator = { FabAnimator.defaultStyle, }; Set _selectedFabLocation = {FabLocation.endFloat}; FloatingActionButtonAnimator? _floatingActionButtonAnimator; FloatingActionButtonLocation? _floatingActionButtonLocation; bool _showFab = false; @override Widget build(BuildContext context) { return Scaffold( floatingActionButtonLocation: _floatingActionButtonLocation, floatingActionButtonAnimator: _floatingActionButtonAnimator, appBar: AppBar(title: const Text('FloatingActionButtonAnimator Sample')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SegmentedButton( selected: _selectedFabAnimator, onSelectionChanged: (Set styles) { setState(() { _floatingActionButtonAnimator = switch (styles.first) { FabAnimator.defaultStyle => null, FabAnimator.none => FloatingActionButtonAnimator.noAnimation, }; _selectedFabAnimator = styles; }); }, segments: fabAnimatoregments.map>(( (FabAnimator, String) fabAnimator, ) { final FabAnimator animator = fabAnimator.$1; final String label = fabAnimator.$2; return ButtonSegment( value: animator, label: Text(label), ); }).toList(), ), const SizedBox(height: 10), SegmentedButton( selected: _selectedFabLocation, onSelectionChanged: (Set styles) { setState(() { _floatingActionButtonLocation = switch (styles.first) { FabLocation.centerFloat => FloatingActionButtonLocation.centerFloat, FabLocation.endFloat => FloatingActionButtonLocation.endFloat, FabLocation.endTop => FloatingActionButtonLocation.endTop, }; _selectedFabLocation = styles; }); }, segments: fabLocationegments.map>(( (FabLocation, String) fabLocation, ) { final FabLocation location = fabLocation.$1; final String label = fabLocation.$2; return ButtonSegment( value: location, label: Text(label), ); }).toList(), ), const SizedBox(height: 10), FilledButton.icon( onPressed: () { setState(() { _showFab = !_showFab; }); }, icon: Icon(_showFab ? Icons.visibility_off : Icons.visibility), label: const Text('Toggle FAB'), ), ], ), ), floatingActionButton: !_showFab ? null : FloatingActionButton( onPressed: () {}, child: const Icon(Icons.add), ), ); } }