Длительное нажатие клавиши и проведите в 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(),
);
},
);
}