Flutter学习指南:交互、手势和动画(2),看完全都会了

这篇具有很好参考价值的文章主要介绍了Flutter学习指南:交互、手势和动画(2),看完全都会了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

);  
}
}

除了上面代码使用到的 onTap,GestureDetector 还支持许多其他事件:

  • onTapDown:按下

  • onTap:点击动作

  • onTapUp:抬起

  • onTapCancel:前面触发了 onTapDown,但并没有完成一个 onTap 动作

  • onDoubleTap:双击

  • onLongPress:长按

  • onScaleStart, onScaleUpdate, onScaleEnd:缩放

  • onVerticalDragDown, onVerticalDragStart, onVerticalDragUpdate, onVerticalDragEnd, onVerticalDragCancel, onVerticalDragUpdate:在竖直方向上移动

  • onHorizontalDragDown, onHorizontalDragStart, onHorizontalDragUpdate, onHorizontalDragEnd, onHorizontalDragCancel, onHorizontalDragUpdate:在水平方向上移动

  • onPanDown, onPanStart, onPanUpdate, onPanEnd, onPanCancel:拖曳(水平、竖直方向上移动)

如果同时设置了 onVerticalXXX 和 onHorizontalXXX,在一个手势里,只有一个会触发(如果用户首先在水平方向移动,则整个过程只触发 onHorizontalUpdate;竖直方向的类似)

这里要说明的是,onVerticalXXX/onHorizontalXXX 和 onPanXXX 不能同时设置。如果同时需要水平、竖直方向的移动,使用 onPanXXX。

如果读者希望在用户点击的时候能够有个水波纹效果,可以使用 InkWell,它的用法跟 GestureDetector 类似,只是少了拖动相关的手势(毕竟,这个水波纹效果只有在点击的时候才有意义)。

原始手势事件监听

GestureDetector 在绝大部分时候都能够满足我们的需求,如果真的满足不了,我们还可以使用最原始的 Listener 控件。

class TestWidget extends StatelessWidget {  
@override  
Widget build(BuildContext context) {    
return Listener(      
child: Text(‘text’),      
onPointerDown: (event) => print(‘onPointerDown’),      
onPointerUp: (event) => print(‘onPointerUp’),      
onPointerMove: (event) => print(‘onPointerMove’),      
onPointerCancel: (event) => print(‘onPointerCancel’),    
);  
}
}

在页面间跳转

Flutter 里所有的东西都是 widget,所以,一个页面,也是 widget。为了调整到新的页面,我们可以 push 一个 route 到 Navigator 管理的栈中。

Navigator.push(  
context,  
MaterialPageRoute(builder: (_) => SecondScreen())
);

需要返回的话,pop 掉就可以了:

Navigator.pop(context);

下面是完整的例子:

Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互

除了打开一个页面,Flutter 也支持从页面返回数据:

Navigator.pop(context, ‘message from second screen’);

由于打开页面是异步的,页面的结果通过一个 Future 来返回:

onPressed: () async {  
// Navigator.push 会返回一个 Future,如果你对这里使用的 await不太熟悉,可以参考  
// https://www.dartlang.org/guides/language/language-tour#asynchrony-support  
var msg = await Navigator.push(    
context,    
MaterialPageRoute(builder: (_) => SecondScreen())  
);  
debugPrint(‘msg = $msg’);}

我们还可以在 MaterialApp 里设置好每个 route 对应的页面,然后使用 Navigator.pushNamed(context, routeName) 来打开它们:

MaterialApp(  
// 从名字叫做 ‘/’ 的 route 开始(也就是 home)  
initialRoute: ‘/’,  
routes: {    
‘/’: (context) => HomeScreen(),    
‘/about’: (context) => AboutScreen(),  
},
);

接下来,我们通过实现一个 echo 客户端的前端页面来综合运用前面所学的知识(逻辑部分我们留到下一篇文章再补充)。

echo 客户端

消息输入页

这一节我们来实现一个用户输入的页面。UI 很简单,就是一个文本框和一个按钮。

Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互
Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互

这里的按钮本应该使用 RaisedButton 或 FlatButton。为了演示如何监听手势事件,我们这里故意自己用 Container 做了一个按钮,然后通过 InkWell 监听手势事件。InkWell 除了上面展示的几个事件外,还带有一个水波纹效果。如果不需要这个水波纹效果,读者也可以使用 GestureDetector。

消息列表页面

我们的 echo 客户端共有两个页面,一个用于展示所有的消息,另一个页面用户输入消息,后者在上一小节我们已经写好了。下面,我们来实现用于展示消息的页面。

页面间跳转

我们的页面包含一个列表和一个按钮,列表用于展示信息,按钮则用来打开上一节我们所实现的 AddMessageScreen。这里我们先添加一个按钮并实现页面间的跳转。

// 这是我们的消息展示页面class MessageListScreen extends StatelessWidget {  
@override  
Widget build(BuildContext context) {    
return Scaffold(      
appBar: AppBar(        
title: Text(‘Echo client’),      
),      
floatingActionButton: FloatingActionButton(        
onPressed: () {          
// push 一个新的 route 到 Navigator 管理的栈中,以此来打开一个页面          
Navigator.push(              
context,              
MaterialPageRoute(builder: (_) => AddMessageScreen())          
);        
},        
tooltip: ‘Add message’,        
child: Icon(Icons.add),      
)    
);  
}
}

在消息的输入页面,我们点击 Send 按钮后就返回:

onTap: () {  
debugPrint(‘send: ${editController.text}’);  
Navigator.pop(context);
}

最后,我们加入一些骨架代码,实现一个完整的应用:

void main() {  
runApp(MyApp());
}

class MyApp extends StatelessWidget {

@override  
Widget build(BuildContext context) {    
return MaterialApp(      
title: ‘Flutter UX demo’,      
home: MessageListScreen(),    
);  
}
}

但是,上面代码所提供的功能还不够,我们需要从 AddMessageScreen 中返回一个消息。

首先我们对数据建模:

class Message {  
final String msg;  
final int timestamp;

Message(this.msg, this.timestamp);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互
Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互
Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互
Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

Android学习PDF+架构视频+面试文档+源码笔记领取

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互

【算法合集】

Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互

【延伸Android必备知识点】

Flutter学习指南:交互、手势和动画(2),看完全都会了,程序员,flutter,交互

【Android部分高级架构视频学习资源】

id核心高级技术PDF文档,BAT大厂面试真题解析】**

[外链图片转存中…(img-gKQlUBKO-1711395179706)]

【算法合集】

[外链图片转存中…(img-bwYSwGIp-1711395179707)]

【延伸Android必备知识点】

[外链图片转存中…(img-7i3vtKyH-1711395179707)]

【Android部分高级架构视频学习资源】

Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!文章来源地址https://www.toymoban.com/news/detail-847823.html

到了这里,关于Flutter学习指南:交互、手势和动画(2),看完全都会了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Maven进阶学习指南

    当我们在开发项目时,有时需要用到外部依赖组件,例如当我们需要Json序列化的时候需要用到FastJson组件,我们可以通过下载对应jar包加载到项目中。但当一个大的项目同时需要依赖各种各样的外部服务,就存在着配置繁琐、依赖冲突等问题,因此可以通过maven来完成对应的

    2024年02月11日
    浏览(29)
  • 现代C++学习指南-类型系统

    在前一篇,我们提供了一个方向性的指南,但是学什么,怎么学却没有详细展开。本篇将在前文的基础上,着重介绍下怎样学习C++的类型系统。 在进入类型系统之前,我们应该先达成一项共识——尽可能使用C++的现代语法。众所周知,出于兼容性的考虑,C++中很多语法都是合

    2024年02月08日
    浏览(31)
  • 实战应用Android进阶学习指南

    作者:禅与计算机程序设计艺术 在软件开发的历史上,从最初的手工编码到后来的脚本编程、GUI编程、打包工具、编译器等各种工具的出现,使得程序员可以将复杂的代码转换成可执行的程序,实现了快速开发、迭代更新、快速部署等效率上的优势。随着互联网的普及、手机

    2024年02月08日
    浏览(41)
  • 现代C++学习指南-具体类

    类作为C++中重要的概念之一,有着众多的特性,也是最迷人的部分! 类是一个加工厂,开发者使用C++提供的各种材料组装这个工厂,使得它可以生产出符合自己要求的数据,通过对工厂的改造,可以精细控制对象从出生到死亡的各种行为,真正达到我的代码我做主的境界。

    2024年02月09日
    浏览(24)
  • 现代C++学习指南-标准库

    在[上一章](https://www.yuque.com/docs/share/adb5b1e4-f3c6-46fd-ba4b-4dabce9b4f2a?# 《现代C++学习指南-类型系统》)我们探讨了C++的类型系统,并提出了从低到高,又从高到低的学习思路,本文就是一篇从高到低的学习指南,希望能提供一种新的视角。 编程语言一般分为两个部分,一部分是语

    2024年02月09日
    浏览(23)
  • 现代C++学习指南-方向篇

    C++是一门有着四十年历史的语言,先后经历过四次版本大升级(诞生、98、11、17(20),14算小升级)。每次升级都是很多问题和解决方案的取舍。了解这些历史,能更好地帮助我们理清语言的发展脉络。所以接下来我将借它的发展历程,谈一谈我对它的理解,最后给出我认为

    2024年02月08日
    浏览(24)
  • 【ARM学习】Cortex- A系列程序员学习指南

    ARM处理器无处不在。 移动电话、个人计算机、电视或汽车。在大约30亿元的微处理器总出货量中,x86架构占据一个非常小的位置(但仍然非常有利可图的)。 ARM处理器不是一个单一的处理器,而是 一个拥有相同指令集和程序员模型的同一处理器家族 ,并有 一定程度的向后兼

    2024年02月01日
    浏览(31)
  • MySQL基础学习内容指南

    MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),对于数据库初学者来说,掌握MySQL的基础知识是非常重要的。本文将为您介绍MySQL基础学习的核心内容,帮助您快速入门并提升数据库操作能力。 一、MySQL概述 在开始深入学习MySQL之前,我们首先需要了解MySQL的基本概

    2024年04月12日
    浏览(26)
  • 深度学习调参指南

    1. 选择合适的模型架构 模型的结构(层数和宽度),参数配置,尽量用已经有效的模型 2. 选择优化器 针对具体的问题,从选择常用的优化器开始,进行比较 3. 选择BatchSize 1). Batch Size决定训练速度,但是不影响验证集性能 2). 通常选择最大可支持的Bacth Size 3). 增加Batch Size减少训

    2024年02月15日
    浏览(33)
  • 全面学习SpringCloud框架指南

    要深入学习Spring Cloud框架,你需要系统地掌握其核心组件和概念,并了解如何在实际项目中应用这些知识。以下是一些关键的学习点和相应的学习内容: 一共分为10个模块包括:   理解微服务架构的概念和优势。 学习单体架构向微服务架构演进的过程。 掌握微服务架构的特

    2024年04月16日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包