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

Боковое меню Drawer в Flutter

Боковое меню выезжает слева и не занимает место постоянно. Его задают в Scaffold(drawer: ...) виджетом Drawer. Открыть можно иконкой «гамбургер» в AppBar - Flutter добавит её сам, если drawer не пустой.

Вверху часто ставят DrawerHeader с названием приложения. Пункты - это ListTile с onTap. Если нужен другой экран, его открывают с контекста Scaffold. После выбора раздела шторку закрывают: Navigator.pop(context) убирает overlay меню, основной экран остаётся на месте:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: MenuPage())); } class MenuPage extends StatefulWidget { const MenuPage({super.key}); @override State<MenuPage> createState() => _MenuPageState(); } class _MenuPageState extends State<MenuPage> { String section = 'Home'; void pick(String name) { setState(() { section = name; }); Navigator.pop(context); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Menu')), drawer: Drawer( child: ListView( padding: EdgeInsets.zero, children: [ const DrawerHeader( decoration: BoxDecoration(color: Colors.teal), child: Align( alignment: Alignment.bottomLeft, child: Text( 'My app', style: TextStyle(color: Colors.white, fontSize: 24), ), ), ), ListTile( leading: const Icon(Icons.home), title: const Text('Home'), onTap: () => pick('Home'), ), ListTile( leading: const Icon(Icons.settings), title: const Text('Settings'), onTap: () => pick('Settings'), ), ], ), ), body: Center(child: Text('Section: $section')), ); } }

Добавьте пункт «About» с иконкой Icons.info. По нажатию меняйте текст в body на 'Version 1.0' и закрывайте Drawer.

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