- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 flutter 中创建可滑动的类似 tinder 的卡片,它可以在向左或向右滑动时调用某些功能,但在 Flutter 中这样做似乎太复杂了。现在我已经使用带有 Dismissible 的 ListView 生成器实现了该功能,它按预期工作,我可以在用户滑动时通过 API 调用更新列表,但 UI 看起来不那么吸引人,因为卡片在水平关闭时不会旋转.在发帖之前我已经阅读了很多博客文章,虽然其中一些给出了实现此目的的想法,但不可能使用这些技术在后台更新列表,例如使用堆栈创建一副纸牌,如本例所示。 https://github.com/geekruchika/FlutterCardSwipe
这是我当前与滑动相关的代码。
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'loader.dart';
import '../screens/profile_overview.dart';
import '../providers/user.dart';
class SwipeProfiles extends StatefulWidget {
final double deviceHeight;
final double deviceWidth;
SwipeProfiles(this.deviceHeight, this.deviceWidth);
@override
_SwipeProfilesState createState() => _SwipeProfilesState();
}
class _SwipeProfilesState extends State<SwipeProfiles> {
List _profiles = [];
bool _isLoading = true;
bool _gettingMoreProducts = false;
_loadMoreProfiles() async {
print('Reached end of list');
if (_gettingMoreProducts) {
print('Already getting products');
return;
}
print('Firestore function called');
_gettingMoreProducts = true;
dynamic newProfiles =
await Provider.of<User>(context, listen: false).getProfiles();
_profiles.addAll(newProfiles);
setState(() {});
print('New Products added');
_gettingMoreProducts = false;
}
@override
void initState() {
print('Getting new products from init state');
Provider.of<User>(context, listen: false).getProfiles().then((profiles) {
setState(() {
_profiles = profiles;
_isLoading = false;
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.all(10),
height: widget.deviceHeight * 0.75,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(10)),
child: _isLoading
? Loader()
: ListView.builder(
itemCount: _profiles.length,
itemBuilder: (context, index) {
if (index == _profiles.length - 1) {
_loadMoreProfiles();
}
return Dismissible(
key: UniqueKey(),
onDismissed: (direction) {
setState(() {
_profiles.removeAt(index);
});
},
background: Container(
color: Colors.red,
child: Icon(
Icons.cancel,
color: Colors.white,
size: 50,
),
),
secondaryBackground: Container(
color: Colors.green,
child: Icon(
Icons.check,
color: Colors.white,
size: 50,
),
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: ProfileOverview(_profiles[index],
widget.deviceHeight, widget.deviceWidth),
),
);
},
));
}
}
最佳答案
可以直接使用包https://pub.dev/packages/flutter_tindercard
或引用源码
在输出中,您可以看到列表长度没有改变,您可以检测到向左或向右滑动
swipeCompleteCallback:
(CardSwipeOrientation orientation, int index) {
print(orientation.toString());
if (orientation == CardSwipeOrientation.LEFT) {
print("Card is LEFT swiping");
print(welcomeImages.length);
} else if (orientation == CardSwipeOrientation.RIGHT) {
print("Card is RIGHT swiping");
print(welcomeImages.length);
}
},
工作演示
输出
I/flutter (32086): CardSwipeOrientation.LEFT
I/flutter (32086): Card is LEFT swiping
I/flutter (32086): 3
I/flutter (32086): CardSwipeOrientation.RIGHT
I/flutter (32086): Card is RIGHT swiping
I/flutter (32086): 3
完整代码
import 'package:flutter/material.dart';
import 'package:flutter_tindercard/flutter_tindercard.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: ExampleHomePage(),
);
}
}
class ExampleHomePage extends StatefulWidget {
@override
_ExampleHomePageState createState() => _ExampleHomePageState();
}
class _ExampleHomePageState extends State<ExampleHomePage>
with TickerProviderStateMixin {
List<String> welcomeImages = [
"assets/welcome0.png",
"assets/welcome1.png",
"assets/welcome2.png",
];
@override
Widget build(BuildContext context) {
CardController controller; //Use this to trigger swap.
return new Scaffold(
body: new Center(
child: Container(
height: MediaQuery.of(context).size.height * 0.6,
child: new TinderSwapCard(
orientation: AmassOrientation.BOTTOM,
totalNum: welcomeImages.length,
stackNum: 3,
swipeEdge: 4.0,
maxWidth: MediaQuery.of(context).size.width * 0.9,
maxHeight: MediaQuery.of(context).size.width * 0.9,
minWidth: MediaQuery.of(context).size.width * 0.8,
minHeight: MediaQuery.of(context).size.width * 0.8,
cardBuilder: (context, index) {
print('index ${index}');
return Card(
child: Image.asset('${welcomeImages[index]}'),
);
},
cardController: controller = CardController(),
swipeUpdateCallback: (DragUpdateDetails details, Alignment align) {
/// Get swiping card's alignment
if (align.x < 0) {
//print("Card is LEFT swiping");
} else if (align.x > 0) {
//print("Card is RIGHT swiping");
}
},
swipeCompleteCallback:
(CardSwipeOrientation orientation, int index) {
print(orientation.toString());
if (orientation == CardSwipeOrientation.LEFT) {
print("Card is LEFT swiping");
print(welcomeImages.length);
} else if (orientation == CardSwipeOrientation.RIGHT) {
print("Card is RIGHT swiping");
print(welcomeImages.length);
}
},
),
),
),
);
}
}
关于flutter - 如何在 flutter 中创建类似 Tinder 的堆叠卡片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61104843/
我有一个带有 cardview 的应用程序,就像 tinder 一样。现在我想用 AdMob 添加广告。AdMob 提供 4 种广告格式: 横幅 插页式(整页广告) 奖励(视频) 母语 我想在我的应用
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我通过“zero2launch”购买了有关如何制作 Tinder 应用程序的 udemy 教程,并按照它进行操作,效果非常好,但是,卡片上的用户是男性和女性,我想找到一种方法 - 使用分段控制 - 仅
我正在尝试制作类似 tinder 的可刷卡。我有这个图书馆 https://github.com/kikoso/Swipeable-Cards .我按照演示操作,效果很好。然而,该演示只有一个 car
我正在组装一个自动向右滑动的 python Tinder 机器人,我还希望它能够发送消息。一切正常,除了匹配时应该发送消息,但实际上却没有。我已经尝试了我能想到的所有可能的代码组合,但无济于事。我和我
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 5 年前。 Improve
我正在开发一个 iOS 应用程序(使用 Objective-C)。 我正在使用 MDCSwipeToChoose API 滑动 View (喜欢和不喜欢)。 我想在应用程序中再添加一个按钮(像 las
所以我注意到,像 Tinder 这样的应用程序可以在其他人的手机上显示用户 A 的 Instagram 连接,即使不需要其他用户实际登录 instagram。 例如:用户 A 连接 instagram
我正在寻找一种方法来实现与在 Tinder 应用程序中的选项卡之间滑动时相同的过渡效果。- 颜色过渡。- 图像过渡。 如下图所示: 如果有人已经知道如何做到这一点,我会加入。如果没有,我将在这里分享我
我有一个应用程序,我可以根据他们的位置、上次事件和许多其他过滤器搜索用户,现在已经达到了性能不够好但由于用户数量增加而必须改进的地步。但是,我不确定最好的前进方式是什么,如果有任何意见,我将不胜感激!
我正在尝试使用 this提供类似 Tinder (Swift 3) 导航栏的框架。 我的目标是以一种透明的方式使用它——也就是说——将它嵌入并在 Storyboard上拥有 3 个独立的 View C
对于 iOS 中的 Tinder 应用程序,我假设他们在 ImageView 上使用平移手势识别器。在用户开始移动的图像下方如何显示另一个图像?他们是否有另一个 ImageView ,在手势识别器完成
谁能告诉我 smack、tinder 和 whack 之间的区别是什么? Tinder 和 whack 是 smack 的瘦身版吗?这三个图书馆有不同的用途吗? 最佳答案 Smack 是一个客户端库。
我想在 flutter 中创建可滑动的类似 tinder 的卡片,它可以在向左或向右滑动时调用某些功能,但在 Flutter 中这样做似乎太复杂了。现在我已经使用带有 Dismissible 的 Li
试图测试与我的 ws 的连接,但服务器看不到任何连接。 我想我错过了什么,你能告诉我我错过了什么吗? 日志: D/Connection$connect:应该连接 D/Connection$connec
我想在 flutter 中创建可滑动的类似 tinder 的卡片,它可以在向左或向右滑动时调用某些功能,但在 Flutter 中这样做似乎太复杂了。现在我已经使用带有 Dismissible 的 Li
理论上说我们有一个名为 matches 的表(带有一些测试数据): create table matches ( user_id int, target_id int ); INSERT IN
我已经开始开发一个 Android 应用程序,我需要在其中进行基于距离的搜索。用户应该能够选择最大距离,比方说 3 公里。我已经编写了一些代码,用于获取每个用户的当前位置(纬度、经度)并将其存储在 m
我目前正在开发一款类似 Tinder 的应用程序,它可以从网络服务中检索一些数据。 我已经编写了我的函数来检索数据,这就像一个魅力,并且我还实现了卡片模型。 问题是,我不知道如何编码事实以将解码 js
所以,我有一个 ViewPager,我想实现一个简单的 Page-Indicator,就像 Tinder 处理它的图片一样: 我以为找到图书馆很容易,但我这辈子都找不到。 我不在乎条形是通过操纵点的宽
我是一名优秀的程序员,十分优秀!