Flutter: реализация «смахивания» в приложении.

Задача: реализовать удаление позиции из списка «смахиванием».

Решение: используем для этого виджет Dismissible. Обернем в него каждый пункт в ListView. Ну собственно в него можно оборачивать любой виджет.

  child: ListView.builder(
....
...
                                child:
                                Dismissible(
                                    key: UniqueKey(),
                                    direction:DismissDirection.startToEnd,
                                    onDismissed: (DismissDirection direction){
                                        TDialogs dia = TDialogs();
                                        dia.SureDialog(context, "Подтверждение", "Вы действительно удалить ТМЦ  "+globals.TMCList[index]["inv_num"]+" ?",
                                          (){
                                            setState(() {
                                                                                            globals.TMCList.removeAt(index);
                                            });
                                          },
                                          (){
                                            setState(() {});
                                          }
                                        );
                                    },
                                    child: Container(
                                        padding: EdgeInsets.symmetric(vertical: 10),
                                        color: globals.TMCList[index]["count"]==0?Colors.red:null,
                                        child: Column(
                                          children: [
                                            Text(
                                              globals.TMCList[index]["name"],
                                              textAlign: TextAlign.start,
                                            ),
                                            Align(

....

Из интересного: метод direction отвечает за то, как именно разрешено «смахивать». В примере это «от старта до конца». Т.е. слева на право. Доступные варианты:

enum DismissDirection {
  vertical,
  horizontal,
  endToStart,
  startToEnd,
  up,
  down,
  none
}