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

Результат с экрана через pop в Flutter

Иногда после второго экрана нужно не только вернуться назад, но и передать выбор: имя, число, флаг. Второй экран вызывает Navigator.pop(context, value) - значение попадает в результат маршрута.

На первом экране Navigator.push ожидают через await. Тип результата задают у MaterialPageRoute, например MaterialPageRoute<String>. Если пользователь ушёл стрелкой без выбора, результат будет null:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: PickColorPage())); } class PickColorPage extends StatefulWidget { const PickColorPage({super.key}); @override State<PickColorPage> createState() => _PickColorPageState(); } class _PickColorPageState extends State<PickColorPage> { String? chosen; Future<void> openPicker() async { final result = await Navigator.push<String>( context, MaterialPageRoute<String>( builder: (context) => const ColorPickerScreen(), ), ); if (!mounted) return; // skip setState if unmounted setState(() { chosen = result; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Color')), body: Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ Text(chosen ?? 'No color selected'), const SizedBox(height: 16), ElevatedButton( onPressed: openPicker, child: const Text('Choose'), ), ], ), ), ); } } class ColorPickerScreen extends StatelessWidget { const ColorPickerScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Palette')), body: Center( child: ElevatedButton( onPressed: () { Navigator.pop(context, 'Teal'); }, child: const Text('Teal'), ), ), ); } }

Сделайте экран выбора города с тремя TextButton. По нажатию возвращайте название города строкой. На главном показывайте 'City: ...' или подсказку, если выбора не было.

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