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

Callback от потомка к родителю в Flutter

При подъёме состояния кнопка часто живёт в отдельном виджете, а менять поле должно State родителя. Потомку передают функцию: VoidCallback, если параметров нет, или ValueChanged<T>, если нужно вернуть значение.

Внутри build потомка эту функцию вешают на onPressed. Родитель в обработчике вызывает setState и меняет своё поле. Потомок остаётся «глупым»: он не знает, что именно произойдёт после нажатия:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: HomePage())); } class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { int selected = 0; void choose(int index) { setState(() { selected = index; }); } @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [ Padding( padding: const EdgeInsets.all(16), child: Text('Selected item: $selected'), ), for (var i = 0; i < 3; i++) ChoiceRow( label: 'Option ${i + 1}', onChoose: () => choose(i), // captures this i ), ], ), ); } } class ChoiceRow extends StatelessWidget { const ChoiceRow({ super.key, required this.label, required this.onChoose, }); final String label; final VoidCallback onChoose; @override Widget build(BuildContext context) { return ListTile( title: Text(label), trailing: ElevatedButton( onPressed: onChoose, child: const Text('Choose'), ), ); } }

Сделайте StatelessWidget AddButton с VoidCallback onAdd. Родитель хранит счётчик и передаёт в onAdd функцию, которая в setState увеличивает счётчик. На экране - текст со значением и ваш AddButton.

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