Как вызвать индекс списка за пределами строителя во флаттере? - PullRequest
0 голосов
/ 02 апреля 2020

Я назначаю значок с .removeAt за пределами listview.builder, я думаю, что проблема заключается в вызове индекса, как я могу вызвать индекс вне построителя listview? пожалуйста, помогите, вот пример моего кода:

    newList(){
    return new ListView.builder(
              physics: ClampingScrollPhysics(),
              shrinkWrap: true,
              scrollDirection: Axis.horizontal,
              itemCount: newRoutineList.length,
              itemBuilder: (context, index) {
                return newRoutineList[index];
              });
  }

enter image description here

и вот функция вне listview.builder, где я создаю Icon для .removeAt

new Container(
                              width: 70,
                              alignment: Alignment(0.5, 1),
                              child: IconButton(
                                icon: Icon(Icons.clear),
                                color: Colors.redAccent,
                                onPressed: () {
                                  newRoutineList.removeAt(index);
                                },
                              ),
                            )

enter image description here

1 Ответ

0 голосов
/ 02 апреля 2020

Вы можете сделать это. Если также можно использовать карту вместо списка

List newRoutineList = new List();
@override
void initState() {
 super.initState();
 newRoutineList.add("A");
 newRoutineList.add("B");
 newRoutineList.add("C");
 newRoutineList.add("D");
 newRoutineList.add("E");
}

Widget newList() {
 return new ListView.builder(
    physics: ClampingScrollPhysics(),
    shrinkWrap: true,
    scrollDirection: Axis.horizontal,
    itemCount: newRoutineList.length,
    itemBuilder: (context, index) {
      return Container(
        width: 70,
        alignment: Alignment(0.5, 1),
        child: IconButton(
          icon: Icon(Icons.clear),
          color: Colors.redAccent,
          onPressed: () {
            setState(() {
              newRoutineList.removeAt(index);
            });
          },
        ),
      );
    });
}

@override
Widget build(BuildContext context) {
  return Scaffold(
      appBar: AppBar(
        title: Text("Test"),
      ),
      body: newList());
}
...