| // 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 the [IconAlignment] property on various Material | |
| /// button widgets. | |
| void main() { | |
| runApp(const IconAlignmentApp()); | |
| } | |
| class IconAlignmentApp extends StatelessWidget { | |
| const IconAlignmentApp({super.key}); | |
| @override | |
| Widget build(BuildContext context) { | |
| return const MaterialApp(home: Scaffold(body: IconAlignmentExample())); | |
| } | |
| } | |
| class IconAlignmentExample extends StatefulWidget { | |
| const IconAlignmentExample({super.key}); | |
| @override | |
| State<IconAlignmentExample> createState() => _IconAlignmentExampleState(); | |
| } | |
| class _IconAlignmentExampleState extends State<IconAlignmentExample> { | |
| TextDirection _textDirection = .ltr; | |
| IconAlignment _iconAlignment = .start; | |
| @override | |
| Widget build(BuildContext context) { | |
| return SafeArea( | |
| child: Directionality( | |
| key: const Key('Directionality'), | |
| textDirection: _textDirection, | |
| child: Center( | |
| child: Column( | |
| mainAxisSize: .min, | |
| mainAxisAlignment: .center, | |
| children: <Widget>[ | |
| const Spacer(), | |
| OverflowBar( | |
| spacing: 10, | |
| overflowSpacing: 20, | |
| alignment: .center, | |
| overflowAlignment: .center, | |
| children: <Widget>[ | |
| ElevatedButton.icon( | |
| onPressed: () {}, | |
| icon: const Icon(Icons.sunny), | |
| label: const Text('ElevatedButton'), | |
| iconAlignment: _iconAlignment, | |
| ), | |
| FilledButton.icon( | |
| onPressed: () {}, | |
| icon: const Icon(Icons.beach_access), | |
| label: const Text('FilledButton'), | |
| iconAlignment: _iconAlignment, | |
| ), | |
| FilledButton.tonalIcon( | |
| onPressed: () {}, | |
| icon: const Icon(Icons.cloud), | |
| label: const Text('FilledButton Tonal'), | |
| iconAlignment: _iconAlignment, | |
| ), | |
| OutlinedButton.icon( | |
| onPressed: () {}, | |
| icon: const Icon(Icons.light), | |
| label: const Text('OutlinedButton'), | |
| iconAlignment: _iconAlignment, | |
| ), | |
| TextButton.icon( | |
| onPressed: () {}, | |
| icon: const Icon(Icons.flight_takeoff), | |
| label: const Text('TextButton'), | |
| iconAlignment: _iconAlignment, | |
| ), | |
| ], | |
| ), | |
| const Spacer(), | |
| OverflowBar( | |
| alignment: .spaceEvenly, | |
| overflowAlignment: .center, | |
| spacing: 10, | |
| overflowSpacing: 10, | |
| children: <Widget>[ | |
| Column( | |
| children: <Widget>[ | |
| const Text('Icon alignment'), | |
| const SizedBox(height: 10), | |
| SegmentedButton<IconAlignment>( | |
| onSelectionChanged: (Set<IconAlignment> value) { | |
| setState(() { | |
| _iconAlignment = value.first; | |
| }); | |
| }, | |
| selected: <IconAlignment>{_iconAlignment}, | |
| segments: IconAlignment.values.map(( | |
| IconAlignment iconAlignment, | |
| ) { | |
| return ButtonSegment<IconAlignment>( | |
| value: iconAlignment, | |
| label: Text(iconAlignment.name), | |
| ); | |
| }).toList(), | |
| ), | |
| ], | |
| ), | |
| Column( | |
| children: <Widget>[ | |
| const Text('Text direction'), | |
| const SizedBox(height: 10), | |
| SegmentedButton<TextDirection>( | |
| onSelectionChanged: (Set<TextDirection> value) { | |
| setState(() { | |
| _textDirection = value.first; | |
| }); | |
| }, | |
| selected: <TextDirection>{_textDirection}, | |
| segments: const <ButtonSegment<TextDirection>>[ | |
| ButtonSegment<TextDirection>( | |
| value: TextDirection.ltr, | |
| label: Text('LTR'), | |
| ), | |
| ButtonSegment<TextDirection>( | |
| value: TextDirection.rtl, | |
| label: Text('RTL'), | |
| ), | |
| ], | |
| ), | |
| ], | |
| ), | |
| ], | |
| ), | |
| const Spacer(), | |
| ], | |
| ), | |
| ), | |
| ), | |
| ); | |
| } | |
| } |