blob: 4ef8ae3df641e823fff3f93bee5b095a7b00e379 [file] [log] [blame]
// 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<ScaffoldFloatingActionButtonAnimatorExample> createState() => _ScaffoldFloatingActionButtonAnimatorExampleState();
}
class _ScaffoldFloatingActionButtonAnimatorExampleState extends State<ScaffoldFloatingActionButtonAnimatorExample> {
Set<FabAnimator> _selectedFabAnimator = <FabAnimator>{FabAnimator.defaultStyle};
Set<FabLocation> _selectedFabLocation = <FabLocation>{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: <Widget>[
SegmentedButton<FabAnimator>(
selected: _selectedFabAnimator,
onSelectionChanged: (Set<FabAnimator> styles) {
setState(() {
_floatingActionButtonAnimator = switch (styles.first) {
FabAnimator.defaultStyle => null,
FabAnimator.none => FloatingActionButtonAnimator.noAnimation,
};
_selectedFabAnimator = styles;
});
},
segments: fabAnimatoregments
.map<ButtonSegment<FabAnimator>>(((FabAnimator, String) fabAnimator) {
final FabAnimator animator = fabAnimator.$1;
final String label = fabAnimator.$2;
return ButtonSegment<FabAnimator>(value: animator, label: Text(label));
})
.toList(),
),
const SizedBox(height: 10),
SegmentedButton<FabLocation>(
selected: _selectedFabLocation,
onSelectionChanged: (Set<FabLocation> styles) {
setState(() {
_floatingActionButtonLocation = switch (styles.first) {
FabLocation.centerFloat => FloatingActionButtonLocation.centerFloat,
FabLocation.endFloat => FloatingActionButtonLocation.endFloat,
FabLocation.endTop => FloatingActionButtonLocation.endTop,
};
_selectedFabLocation = styles;
});
},
segments: fabLocationegments
.map<ButtonSegment<FabLocation>>(((FabLocation, String) fabLocation) {
final FabLocation location = fabLocation.$1;
final String label = fabLocation.$2;
return ButtonSegment<FabLocation>(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),
),
);
}
}