【问题标题】:Long key press and swipe in ListView in FlutterFlutter 中的 ListView 中长按和滑动
【发布时间】:2019-03-27 05:05:02
【问题描述】:

我有一个正在创建ListView 的屏幕。对于 Android,我想实现“长按键”。对于 iOS,我想要“滑动手势”。

对于长按和滑动,我必须显示 3 个选项:

Delete | Delete All | More...

如何做到这一点。

【问题讨论】:

  • 我没有在我的代码中注入这个块代码,但我知道我必须使用 Dismissible 和 GestureDetector 来处理长按键和滑动。
  • 我昨天已经这样做了。

标签: dart flutter flutter-listview


【解决方案1】:

为了给你一个想法,你可以这样做。

@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(),
      );
    },
  );
}

【讨论】:

    【解决方案2】:

    将您的列表项 UI 包装在适用于 Android 的 GetureDetector 中并使用 onLongTap 回调。对于 iOS,您可以将 listitem UI 包装在 Dissmissable 小部件中。一个简单的提取应该对此有所帮助。

    将您的 UI 放在一个仅返回项目 UI 的函数中,然后根据平台使用上述内容将其外部包装。

    // 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'));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-14
      • 2021-01-26
      • 2010-12-22
      • 2014-09-22
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2022-06-11
      相关资源
      最近更新 更多