Doświadczam problemu z widoku listy. Chciałbym, aby moje elementy ListView zapewnić przyciski do wykonania działania na poszczególnych elementach. Ale obsługiwanie wydarzeń przechodzę do nich jest niespodziewanie i wielokrotnie nazywany. Jednak spodziewałbym się, że zostanie wywołany tylko wtedy, gdy zostanie nazwany przycisk dziecka. Co zrobiłem źle?

import 'package:flutter/material.dart';
import 'package:horaires_ratp/model/Database.dart';

class StationsList extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _StationsListState();
  }
}

class _StationsListState extends State<StationsList> {
  List<Station> _stations = List<Station>();


  _StationsListState() {
    Station().select().toList().then((value) {
      setState(() {
        _stations = value;
      });
    });
  }

  void _handleStationDelete(Station station){
    //station.delete(true);
    print("called");
    Station().select().toList().then((value) {
      setState(() {
        _stations = value;
      });
    });

  }


  @override
  Widget build(BuildContext context) {
    return Container(
        child: ListView.builder(
            itemCount: _stations.length,
            itemBuilder: (context, index) {
              return StationComponent(_stations[index], _handleStationDelete);
            }));
  }
}

class StationComponent extends StatelessWidget {
  final Station _station;
  final Function _handleDelete;

  StationComponent( this._station,  this._handleDelete);

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Card(
        child: Container(
            padding: EdgeInsets.all(16),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                Row(
                  children: <Widget>[
                    Text(_station.name, textAlign: TextAlign.left),
                    IconButton(icon: Icon(Icons.delete), onPressed: _handleDelete(_station))
                  ],
                ),
                Row(
                  children: <Widget>[Row(children: <Widget>[])],
                )
              ],
            )),
      ),
    );
  }
}
0
Ombrelin 2 styczeń 2020, 00:46

1 odpowiedź

Najlepsza odpowiedź

Pasuj takie funkcje

onPressed: onPressFunction

Jeśli potrzebuje jakiejś wartości

onPressed: () => onPressFunction(value)

i nie lubię

onPressed: onPressFunction(value)

Więc twój kod powinien być

IconButton(icon: Icon(Icons.delete), onPressed:() => _handleDelete(_station))
0
Doc 1 styczeń 2020, 22:00