Обработчик с параметром в Flutter
В списке у каждой строки свой обработчик,
но код не хочется копировать. В Dart
удобно передать в onPressed
замыкание: функцию без имени, которая
«запоминает» значение из окружения.
Запись () { debugPrint(name); }
создаётся заново для каждого элемента
цикла и захватывает своё name.
Так одна и та же форма кнопки или
GestureDetector
различает, какую строку нажали. Экран
пока не меняется - только вывод в консоль;
реакцию интерфейса добавим в разделе
про состояние:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: HomePage()));
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
static const cities = ['Moscow', 'Kazan', 'Sochi'];
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView(
children: [
for (final name in cities)
ListTile(
title: Text(name),
trailing: IconButton(
icon: const Icon(Icons.info_outline),
onPressed: () { // captures this name, not the last
debugPrint(name);
},
),
),
],
),
);
}
}
Выведите три ElevatedButton с
подписями 'A', 'B' и 'C'
в Column.
У каждой кнопки в onPressed -
своё замыкание, которое печатает
соответствующую букву через debugPrint.