Длительное нажатие клавиши и проведите в ListView в Flutter

У меня есть экран, где я создаю ListView, Для Android я хочу реализовать "длинное нажатие клавиши". Для iOS я хочу "жест смахивания".

Для длительного нажатия и нажатия клавиш я должен показать 3 варианта:

Delete | Delete All | More...

Как это сделать.

2 ответа

Решение

Оберните свой список элементов в GetureDetector для Android и используйте обратный вызов onLongTap. Для iOS вы можете поместить свой список элементов в виджет Dissmissable. Простое извлечение должно помочь с этим.

Включите ваш пользовательский интерфейс в функцию, которая возвращает только ваш пользовательский интерфейс для элемента, а затем оберните его вышеупомянутым в зависимости от платформы.

// import platform helpers
import 'package:flutter/foundation.dart' show defaultTargetPlatform;
import 'package:flutter/foundation.dart' show TargetPlatform;


// determine your platform
 final isIOS = defaultTargetPlatform == TargetPlatform.iOS;


// return your appropriate wrapper
isIOS 
? Dismissible(
  child: _getListItemUi(),
) 
: GestureDetector(
  onLongPress: () {
  },
  child: _getListItemUi()
);

Widget _getListItemUi() {
  return Container(child: Text('List Item UI'));
}

Чтобы дать вам представление, вы можете сделать это.

@override
Widget build(BuildContext context) {
  bool isIos = Theme.of(context).platform == TargetPlatform.iOS;
  return ListView.builder(
    itemBuilder: (context, index) {
      if (isIos) {
        return Dismissible(
          key: Key("unique_key"),
          child: YourOwnWidget(),
          onDismissed: (direction) {
            // your item is swiped, perform operation here
          },
        );
      }
      return GestureDetector(
        onLongPress: () {
          // you can show an AlertDialog here with 3 options you need
        },
        child: YourOwnWidget(),
      );
    },
  );
}
Другие вопросы по тегам