blob: 611720492c40f1783fadb958c4c9a0d3ff1e0b3d [file]
// 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 [NavigationRail].
void main() => runApp(const NavigationRailExampleApp());
class NavigationRailExampleApp extends StatelessWidget {
const NavigationRailExampleApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(home: NavRailExample());
}
}
class NavRailExample extends StatefulWidget {
const NavRailExample({super.key});
@override
State<NavRailExample> createState() => _NavRailExampleState();
}
class _NavRailExampleState extends State<NavRailExample> {
int _selectedIndex = 0;
NavigationRailLabelType labelType = .all;
bool showLeading = false;
bool showTrailing = false;
double groupAlignment = -1.0;
MainAxisAlignment? alignment;
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Row(
children: <Widget>[
NavigationRail(
selectedIndex: _selectedIndex,
groupAlignment: groupAlignment,
mainAxisAlignment: alignment,
onDestinationSelected: (int index) {
setState(() {
_selectedIndex = index;
});
},
labelType: labelType,
leading: showLeading
? FloatingActionButton(
elevation: 0,
onPressed: () {
// Add your onPressed code here!
},
child: const Icon(Icons.add),
)
: null,
trailing: showTrailing
? IconButton(
onPressed: () {
// Add your onPressed code here!
},
icon: const Icon(Icons.more_horiz_rounded),
)
: null,
destinations: const <NavigationRailDestination>[
NavigationRailDestination(
icon: Icon(Icons.favorite_border),
selectedIcon: Icon(Icons.favorite),
label: Text('First'),
),
NavigationRailDestination(
icon: Badge(child: Icon(Icons.bookmark_border)),
selectedIcon: Badge(child: Icon(Icons.book)),
label: Text('Second'),
),
NavigationRailDestination(
icon: Badge(label: Text('4'), child: Icon(Icons.star_border)),
selectedIcon: Badge(
label: Text('4'),
child: Icon(Icons.star),
),
label: Text('Third'),
),
],
),
const VerticalDivider(thickness: 1, width: 1),
// This is the main content.
Expanded(
child: Column(
mainAxisAlignment: .center,
children: <Widget>[
Text('selectedIndex: $_selectedIndex'),
const SizedBox(height: 20),
Text('Label type: ${labelType.name}'),
const SizedBox(height: 10),
SegmentedButton<NavigationRailLabelType>(
segments: const <ButtonSegment<NavigationRailLabelType>>[
ButtonSegment<NavigationRailLabelType>(
value: NavigationRailLabelType.none,
label: Text('None'),
),
ButtonSegment<NavigationRailLabelType>(
value: NavigationRailLabelType.selected,
label: Text('Selected'),
),
ButtonSegment<NavigationRailLabelType>(
value: NavigationRailLabelType.all,
label: Text('All'),
),
],
selected: <NavigationRailLabelType>{labelType},
onSelectionChanged:
(Set<NavigationRailLabelType> newSelection) {
setState(() {
labelType = newSelection.first;
});
},
),
const SizedBox(height: 20),
Text('Group alignment: $groupAlignment'),
const SizedBox(height: 10),
SegmentedButton<double>(
segments: const <ButtonSegment<double>>[
ButtonSegment<double>(value: -1.0, label: Text('Top')),
ButtonSegment<double>(value: 0.0, label: Text('Center')),
ButtonSegment<double>(value: 1.0, label: Text('Bottom')),
],
selected: <double>{groupAlignment},
onSelectionChanged: (Set<double> newSelection) {
setState(() {
groupAlignment = newSelection.first;
});
},
),
const SizedBox(height: 20),
const Text('Main Axis Alignment:'),
const SizedBox(height: 10),
SegmentedButton<MainAxisAlignment?>(
segments: const <ButtonSegment<MainAxisAlignment?>>[
ButtonSegment<MainAxisAlignment?>(
value: null,
label: Text('Default'),
),
ButtonSegment<MainAxisAlignment?>(
value: MainAxisAlignment.start,
label: Text('Start'),
),
ButtonSegment<MainAxisAlignment?>(
value: MainAxisAlignment.end,
label: Text('End'),
),
ButtonSegment<MainAxisAlignment?>(
value: MainAxisAlignment.center,
label: Text('Center'),
),
ButtonSegment<MainAxisAlignment?>(
value: MainAxisAlignment.spaceEvenly,
label: Text('Space Evenly'),
),
ButtonSegment<MainAxisAlignment?>(
value: MainAxisAlignment.spaceBetween,
label: Text('Space Between'),
),
ButtonSegment<MainAxisAlignment?>(
value: MainAxisAlignment.spaceAround,
label: Text('Space Around'),
),
],
selected: <MainAxisAlignment?>{alignment},
onSelectionChanged: (Set<MainAxisAlignment?> newSelection) {
setState(() {
alignment = newSelection.first;
});
},
),
const SizedBox(height: 20),
SwitchListTile(
title: Text(showLeading ? 'Hide Leading' : 'Show Leading'),
value: showLeading,
onChanged: (bool value) {
setState(() {
showLeading = value;
});
},
),
SwitchListTile(
title: Text(
showTrailing ? 'Hide Trailing' : 'Show Trailing',
),
value: showTrailing,
onChanged: (bool value) {
setState(() {
showTrailing = value;
});
},
),
],
),
),
],
),
),
);
}
}