用Flutter实现一个左右滑动选择喜欢/不喜欢的效果

28 min read

要实现一个左右滑动选择喜欢/不喜欢的效果,可以使用Flutter的GestureDetector组件来监听手势操作,然后根据手势的方向来改变显示的内容。

首先,创建一个StatefulWidget,其中包含一个GestureDetector作为主要的手势监听器,并在其中定义两个Text组件,用来显示"喜欢"和"不喜欢":

import 'package:flutter/material.dart';

class LikeDislikeSelector extends StatefulWidget {
  @override
  _LikeDislikeSelectorState createState() => _LikeDislikeSelectorState();
}

class _LikeDislikeSelectorState extends State<LikeDislikeSelector> {
  String selection = "Swipe left or right";

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onHorizontalDragEnd: (DragEndDetails details) {
        if (details.primaryVelocity.compareTo(0) == -1) {
          setState(() {
            selection = "Dislike";
          });
        } else if (details.primaryVelocity.compareTo(0) == 1) {
          setState(() {
            selection = "Like";
          });
        }
      },
      child: Center(
        child: Text(
          selection,
          style: TextStyle(fontSize: 24),
        ),
      ),
    );
  }
}

在上述代码中,我们通过判断手势的水平速度是否为负来确定用户是左滑(不喜欢)还是右滑(喜欢),然后根据结果分别改变显示的内容,并通过调用setState()方法来更新界面。

接下来,在主页面中使用LikeDislikeSelector组件:

import 'package:flutter/material.dart';

import 'like_dislike_selector.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(
        title: Text("Swipe to like/dislike"),
      ),
      body: Center(
        child: LikeDislikeSelector(),
      ),
    ),
  ));
}

为了使界面更加直观,你还可以自定义GestureDetector的效果,例如添加滑动动画、背景颜色变化等。这里只是一个基本示例,你可以根据需求进行更多的自定义和优化。