Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
462 of 1024 menu
◀ ▶

Виджет NavigationDrawer

Виджет NavigationDrawer показывает пункты NavigationDrawerDestination в destinations. Выбранный индекс - selectedIndex, переключение - onDestinationSelected. Ставят в Row рядом с основным контентом или в drawer.

Синтаксис

NavigationDrawer( selectedIndex: 0, onDestinationSelected: (int index) {}, destinations: [ NavigationDrawerDestination( icon: Icon(Icons.home), label: Text('abcde'), ), ], )

Параметры

Параметр Описание
destinations Список пунктов навигации.
selectedIndex Активный пункт.
onDestinationSelected Новый индекс после выбора.

Пример

Давайте разделим экран drawer и body:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: NavDrawerDemo())); } class NavDrawerDemo extends StatefulWidget { const NavDrawerDemo({super.key}); @override State<NavDrawerDemo> createState() => _NavDrawerDemoState(); } class _NavDrawerDemoState extends State<NavDrawerDemo> { int idx = 0; @override Widget build(BuildContext context) { return Scaffold( body: Row( children: [ NavigationDrawer( selectedIndex: idx, onDestinationSelected: (i) => setState(() => idx = i), destinations: [ NavigationDrawerDestination( icon: Icon(Icons.home), label: Text('abcde'), ), NavigationDrawerDestination( icon: Icon(Icons.settings), label: Text('12345'), ), ], ), Expanded(child: Center(child: Text(idx == 0 ? 'abcde' : '12345'))), ], ), ); } }

Слева панель, справа текст меняется при выборе пункта.

Пример

Давайте отметим второй пункт:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: NavigationDrawer( selectedIndex: 1, onDestinationSelected: (i) {}, destinations: [ NavigationDrawerDestination(icon: Icon(Icons.mail), label: Text('abcde')), NavigationDrawerDestination(icon: Icon(Icons.star), label: Text('12345')), ], ), ), ), ); }

Подсвечен пункт со звездой.

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить