#android #flutter #dart
Вопрос:
В иерархии моего дерева приложений у меня есть виджет с отслеживанием состояния, который представляет элементы списка. Давайте назовем этот предмет класса. Этот виджет содержит изображение, некоторый текст и кнопку удаления, которая должна удалить элемент при его нажатии. Позже в коде у меня есть другой класс с отслеживанием состояния, который содержит представление списка и список элементов, на основе которого создается представление списка.
Моя проблема в том, что onPressed()
атрибут каждого элемента помещается в класс элемента, а не в верхний класс (представление списка), в котором должна выполняться операция удаления. Как я могу это исправить? Как я могу посылать сигнал всякий раз, когда кнопка нажата на родительский виджет, чтобы инициировать удаление элемента?
import 'package:flutter/material.dart';
class Item extends StatefulWidget {
const Item({ Key? key }) : super(key: key);
@override
_ItemState createState() => _ItemState();
}
class _ItemState extends State<Item> {
@override
Widget build(BuildContext context) {
return Container(
child: Row(children: [
Image(),
Text('abc'),
Text('abc'),
Text('abc'),
ElevatedButton(onPressed: ????? , child: Text('RemoveButton'))
],),
);
}
}
class ListOfItems extends StatefulWidget {
const ListOfItems({ Key? key }) : super(key: key);
@override
_ListOfItemsState createState() => _ListOfItemsState();
}
class _ListOfItemsState extends State<ListOfItems> {
List<Item> ls = [];
int numOfItems = 0;
@override
Widget build(BuildContext context) {
return ListView(children: ls,)
}
}
Комментарии:
1. Пожалуйста, выберите ответ как принятый, если он сработал для вас
2. @kzrfaisal Я еще не проверял это. Я приму это после этого. Спасибо за ответ.
Ответ №1:
Попробуй вот так
import 'package:flutter/material.dart';
class Item extends StatefulWidget {
final void Function(dynamic data) onPressedHandler;
const Item({ @required this.onPressedHandler, Key? key }) : super(key: key);
@override
_ItemState createState() => _ItemState();
}
class _ItemState extends State<Item> {
@override
Widget build(BuildContext context) {
return Container(
child: Row(children: [
Image(),
Text('abc'),
Text('abc'),
Text('abc'),
ElevatedButton(onPressed: () {
final data = 'Any additional data you want to paas';
widget.onPressedHandler(data);
} , child: Text('RemoveButton'))
],),
);
}
}
class ListOfItems extends StatefulWidget {
const ListOfItems({ Key? key }) : super(key: key);
@override
_ListOfItemsState createState() => _ListOfItemsState();
}
class _ListOfItemsState extends State<ListOfItems> {
List<Item> ls = [];
int numOfItems = 0;
onPressedHandler(data) {
}
@override
Widget build(BuildContext context) {
return ListView(children: [
Item(onPressedHandler: onPressedHandler),
],);
}
}