对于滚动的视图,我们经常需要监听它的一些滚动事件,在监听到的时候去做对应的一些事情。
成都创新互联公司专注于罗山企业网站建设,响应式网站开发,商城建设。罗山网站建设公司,为罗山等地区提供建站服务。全流程定制网站建设,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
比如视图滚动到底部时,我们可能希望做上拉加载更多;
比如滚动到一定位置时显示一个回到顶部的按钮,点击回到顶部的按钮,回到顶部;
比如监听滚动什么时候开始,什么时候结束;
在Flutter中监听滚动相关的内容由两部分组成:ScrollController和ScrollNotification。
ScrollController
在Flutter中,Widget并不是最终渲染到屏幕上的元素(真正渲染的是RenderObject),因此通常这种监听事件以及相关的信息并不能直接从Widget中获取,而是必须通过对应的Widget的Controller来实现。
ListView、GridView的组件控制器是ScrollController,我们可以通过它来获取视图的滚动信息,并且可以调用里面的方法来更新视图的滚动位置。
另外,通常情况下,我们会根据滚动的位置来改变一些Widget的状态信息,所以ScrollController通常会和StatefulWidget一起来使用,并且会在其中控制它的初始化、监听、销毁等事件。
我们来做一个案例,当滚动到1000位置的时候,显示一个回到顶部的按钮:
jumpTo(double offset)、animateTo(double offset,...):这两个方法用于跳转到指定的位置,它们不同之处在于,后者在跳转时会执行一个动画,而前者不会。
ScrollController间接继承自Listenable,我们可以根据ScrollController来监听滚动事件。
不久前,谷歌正式推出 Jetpack Compose 1.0 版本。近日,JetBrains 在此基础上发布了 Compose Multiplatform Alpha 版本,旨在将 Compose 扩展到桌面和 Web 端。
Compose Multiplatform 由 Compose for Desktop 和 Compose for Web 组成,通过 Kotlin Multiplatform 支持许多不同的平台。其中,Compose Desktop 采用 Google 的 Skia 图形库,来实现在 Windows、macOS 和 Linux 上的 UI 绘制,借此在所有支持的操作系统中提供统一的体验,类似于 Flutter 的做法。
根据 Kotlin 团队的说法,相比起 Electron 框架,Compose Multiplatform 在内存消耗、安装大小和 UI 渲染性能等方面将有更明显的优势。随着 Alpha 版本的发布,Compose Multiplatform 还收获了新的 Android Studio 插件,包括对在 IDE 中显示组件预览的支持以及许多附加功能。
我们希望通过本文帮助大家进一步了解 Compose 的跨平台能力,以及 JetBrains 将 Compose 从 Android 扩展到这些其他平台背后的主要驱动力是什么。
基于 Jetpack Compose 1.0
由谷歌打造的 Jetpack Compose 是一款用于在 Android 应用程序之内构建用户界面的官方框架,上周刚刚发布 1.0 版本。与此同时,Android Studio 代号“极狐”的首个稳定版 2020.3.1 也正式亮相。
尽管才刚迎来 1.0,但谷歌表示“目前 Play Store 中已经有超过 2000 款应用程序在使用 Compose——更重要的是,就连 Play Store 这款应用本身也在使用 Compose。”谷歌方面还表示,“我们一直在与一些顶级应用的开发人员进行合作,他们的反馈和支持帮助我们使 1.0 版本更加强大。”
Jetpack Compose for Android 迎来 1.0 版本
Compose 基于 Kotlin 开发,而 Kotlin 与 Android Studio(即官方指定的 Android IDE)均来自开发工具厂商 JetBrains。虽然 Jetpack Compose 专为 Android 打造(与谷歌的 Flutter 框架不同), 但 JetBrains 公司坚信 Compose 完全能够获得跨平台能力 。
Compose for Desktop: 这只是开始
Compose Multiplatform 可以说是该框架面向 MacOS、Linux、Windows 以及 Web 开设的一个端口,目前刚刚发布 1.0 Alpha 版本。虽然尚处于早期开发阶段,但 JetBrains 表示,其已经“为开发人员带来能够基本安全使用的稳定 API”。
TheRegister 就此事询问了 JetBrains 公司 Compose 项目负责人 Nikolay Igotti,希望了解为什么该公司在拥有了已经广泛应用于 IntelliJ IDEA IDE 及多种丰富变体的桌面应用程序跨平台 Java 框架之外,还要费力开发 Compose for Desktop。Igotti 的回答是,“旧有 Java 框架基本上就是修改版的 Swing。Swing 属于默认 JDK UI 框架,Swing 和 AWT(Abstract Windows Toolkit,抽象窗口工具包)。Compose 则完全是另一码事,当然我们也在设计中考虑到了互操作性需求……Swing 这套框架太陈旧了,最早出现在上世纪九十年代末。多年来人们对于 UI 的设计思路已经天翻地覆,Swing 显然满足不了要求了。”
JetBrains IDE 中的 Compose for Desktop 项目
Compose 与 Swing 有一个比较大的共同点:与其他使用本机控件的跨平台框架,比如例如 Java 的 SWT(Standard Widget Toolkit)以及微软的 Xamarin 有所不同,它们选择自主绘制控件。Compose 使用的 Skia 开源图形库,也在谷歌 Chrome、Flutter 及其他众多框架当中得到广泛应用。那这是否意味着 Compose 应用程序将没有自己的原生外观?对此,Igotti 的回应是,“这取决于开发人员的选择,取决于他们如何为应用程序设置主题。在这方面,Compose 的情况与 Flutter 等其他框架没什么区别。”
那 Compose for Desktop 应用程序是否依赖于 JVM(Java Virtual Machine)运行?Igotti 表示,“我们也知道,JVM 应用程序的发布情况可能比较棘手。因此我们提供自己的 Gradle 插件,其使用 jpackage 与 Jlink 以 JVM 应用程序为基础制作原生应用程序。Mac 的.dmg、Windows 的 MSI、Linux 的 deb 包等均可实现,大家用不着担心 JVM。”
也就是说,开发成果将会是一款被精心包裹起来的 JVM 应用程序。JetBrains 还有一款用于解决这个问题的 Kotlin/Native 编译器,“预计将在未来发布,或者专门用于桌面开发。”
对应用程序的另一种思考方式
那 Web 应用程序方面呢?Igotti 回应称,“我们使用 Kotlin/JS 编译器。”Compose 的 Web 版本不如桌面版先进,说明文档中也警告称“API 尚未最终确定,预计会发生重大变化。”此外,虽然 Web 版本确实使用 Compose 模型,但 API 却完全不同,而且会使用 HTML 与 CSS。所以,Web 版与 Compose for Desktop 之间能够共享的代码应该比较少。
据 Igotti 介绍,“Compose 代表着一种不同的应用程序思考方式。状态即 UI 的真实来源,而 UI 本身是无状态的,其表达永远由状态计算得出。在这方面,Compose for Web 采用一组相同的原语,完全相同的状态管理思路。但是对于具体的小部件集合与排列方式,Web 版与桌面版之间确实无法互通。”
说到这里,为什么要把 Compose for Android 扩展到多种其他平台之上?“Compose 的目标受众主要分为三类。首先是使用 Kotlin 与 Compose 的 Android 开发人员,他们希望把自己的开发成果交付至其他平台;其二是纯 Kotlin 开发人员,他们希望以‘一次编写、随处运行’的方式开发新的应用程序;第三则是那些不太熟悉 Kotlin 或者 Compose,但又希望开发出精美 UI 的用户,我们希望能为他们提供实现目标的工具。”
Igotti 并没有给出具体的发布日期,但表示自己希望 Beta 版能在今年秋天发布,“我们也希望能在今年之内推出 1.0 版本。”项目本身是完全开源的,“二十一世纪了,框架在大多数人们心目中就不应该收费。我们只是想开发一款长期缺失的软件”,补足 JetBrains 当前商业模式中的工具链。
那么,JetBrains 会在自己的其他工具中使用 Compose 吗?事实上,他们的 JetBrains Toolbox(用于管理已安装的 IDE)已经在使用 Compose,但 Igotti 表示短时间内 Compose 还无法取代 IntelliJ IDEA 等现有框架。“编辑器是其中最复杂也最重要的组件,经历了 20 年的发展演进,我们几乎不可能在中途进行重写了。无论是 JetBrains 还是我个人,都不打算强迫每个人都转而使用 Compose。我们的目标是为原有框架选项满足不了的用户提供新的解决方案。”
写在最后
那么,为什么除了 Flutter 之外,我们还需要另一个跨平台框架?虽然谷歌的 Flutter 最开始主要面向移动设备,但现在也开始向桌面及 iOS 进军,甚至比 Compose 还抢先了一步。不过,根据 StackOverflow 的最新调查, Flutter 使用的语言为 Dart;尽管 Dart 语言的人气正在增长(正是受到 Flutter 的推动),但仍然无法与 Kotlin 相提并论。
Compose 代表着一种独特的 UI 构建方法,也许最期待 Compose 跨平台功能的受众,正是那些曾在 Android 上使用过它、又特别喜欢这种 UI 构建体验的开发者。
想要进一步了解 Compose,国内 Android 开发者可访问以下链接查看中文手册:
延伸阅读:
常用词组
1. 激昂 jī’áng
[roused;aroused;excited and indignant] 振奋激励,激励;奋发昂扬
激昂大义。——明· 张溥《五人墓碑记》
言辞激昂
2. 激变 jībiàn
(1) [provoke a rebellion]∶由于激怒而激起哗变
激变军队
(2) [cataclysm]∶急剧的变化
慎防激变
3. 激辩 jībiàn
[rant] 激烈的辩论
他们之间发生了一场激辩
4. 激潮 jīcháo
[tide rip] 由反向的两股潮流而形成的激流现象
5. 激磁 jīcí
(1) [excite] 电流通过线圈,激发而产生磁场
激磁线圈
(2) 也叫“励磁”
6. 激刺 jīcì
[excite;provoke;spur;stimulate;irritate;upset whet] 即“刺激”指色彩对人感官的刺激
兼用激刺。——蔡元培《蔡孑民先生言行录·图画》
7. 激荡 jīdàng
[surge;dash;rage;swash] 受到冲击而动荡
一股强烈的柔情激荡着他全身
8. 激动 jīdòng
(1) [agitate;stir;excite;move]∶由于受到刺激而感情冲动
使他的心绪激动
(2) [surge]∶激荡
9. 激发 jīfā
(1) [arouse;stimulate;evoke;promote;rouce]∶激动奋发
刚肠激发。——唐· 李朝威《柳毅传》
词极激发。——清· 梁启超《谭嗣同传》
激发群众的积极性
(2) [excite]∶将原子核、原子、分子、电子或其他粒子提高到一个更高的能级(如通过加热、照射或轰击)
激发态
(3) [affected]∶矫揉造作
激发之行
10. 激奋 jīfèn
[be roused to action;be stirred into activity] 振奋、激动
群情激奋
11. 激愤 jīfèn
[flutter;wrathful;indignant] 激动愤怒
他的议论引起了一片激愤
12. 激光 jīguāng
[laser] 利用某些物质原子中的粒子受激发而发出的光,其相位、方向、频率完全相同,颜色很纯,能量高度集中
13. 激化 jīhuà
(1) [intensify;sharpen;be greatly deepened]∶变得尖锐或激烈
三个部门之间的竞争逐步激化
(2) [flare-up]∶加剧
劳资争议的激化
14. 激活 jīhuó
[activate] 刺激有机体内某种物质,使其活跃地发挥作用
某些植物成分能激活细胞免疫反应
15. 激将 jījiàng
[peptelk;to goad sb. into action] 用反话去激人,促使人决心去做
请将不如激将
16. 激进 jījìn
[radical] 急于变革和进取
激进观点
17. 激进派 jījìnpài
[fire-eater] (如在政治问题上)表现咄咄逼人的党派观念很强的人;激进的党员
每一个政党里面都有稳健派和极端派…温和派和激进派
18. 激剧 jījù
[intense] 激烈;迅速而剧烈
看样子他是在激剧地进行思想斗争
19. 激浪 jīlàng
[turbulent waves] 汹涌澎湃的波浪
乌江激浪滔天
20. 激励 jīlì
(1) [urge;enconrage;impel]∶激发勉励,使振作
老校长激励新校长不要紧张
(2) [actuate;excitation]∶传递动力使其作功或活动
此脉冲就会激励安装在车库中的设备,使门自动地启开
21. 激烈 jīliè
(1) [intense]
(2) 剧烈
激烈争辩
(3) 声音高亢激昂;激越
激烈的演说
22. 激流 jīliú
[rapid] 流速很快的水流
一处浅激流
23. 激恼 jīnǎo
[nettle] 刺激某人使恼怒
我是用这话来激恼你的
24. 激怒 jīnù
[irritate;enrage;exasperate;incense;infuriate;offend;provoke;excite anger in] 受刺激而发怒
以激怒其众。——《史记·陈涉世家》
被这孩子的无礼所激怒
25. 激起 jīqǐ
[provocate;arouse evoke;incite;instigate;stimulate;spur] 刺激,激发
激起我们关于自己困境的进一步想法
26. 激切 jīqiè
(1) [impassioned;outspoken;vehement]∶激烈直率
词极激切。——清· 梁启超《谭嗣同传》
言多激切
(2) [encourage]∶激励
27. 激情 jīqíng
[passion;enthusiasm;fervour] 激动的感情
28. 激赏 jīshǎng
[highly appreciate;greatly admire;highly appreciate] 非常赞赏
激赏不已
29. 激使 jīshǐ
[challenge] 使受刺激或激将而做某事
激使对手摆出证据来
30. 激素 jīsù
[hormone] 一种内分泌物质,由血液分布到全身,对机体的代谢、生长、发育和繁殖等起调节作用
31. 激醒 jīxǐng
[stimulate] 用兴奋药剂去使清醒或激动
咖啡里的咖啡因可激醒病人
32. 激扬 jīyáng
(1) [drain away the mud and bring in fresh water;cast out the wicked and cherish the virtuous;drive out evil and usher in good;eliminate vice and exalt virtue]∶激浊扬清
指点江山,激扬文字,粪土当年万户侯
(2) [excited and indignant;be roused to action;encourage;impel;urge]∶激奋昂扬
激扬的欢呼声
(3) [urge]∶使激奋昂扬
激扬士气
33. 激涌 jīyǒng
[fiercely roll] 大水猛烈地翻滚
怒涛激涌
34. 激越 jīyuè
[intense; vehement] 情绪强烈、激昂;声音高亢清越
感情激越
35. 激增 jīzēng
[steep rise;soar;shoot up] 数量急速增长
产量激增
36. 激战 jīzhàn
[pitched battle;fierce battle;stiff fighting] 很激烈的战斗
激战持续到天明时
37. 激子 jīzǐ
[exciton] 由于吸收光子在固体中产生的可移动的束缚的电子-空(穴)子对
ScrollView 是一个带有滚动的视图组件。
ScrollView 由三部分组成:
ScrollView 有以下常用属性:
注:ScrollView 是一个抽象类,通常使用 CustomScrollView。
SliverAppBar 可以实现背景,标题,顶部导航栏联动,渐隐渐出动画。
Web前端技术主要包括HTML5、CSS3、Less、Sass、响应式布局、移动端开发、以及Ps设计等,更高级的前端开发人员还需要掌握JavaScript 语言、Mysql、Mongodb数据库开发、vue.js、webpack、elementui等前端框架技术。蜗牛学院这里也给大家整理了一份web前端学习路线,希望对想要学习web前端的小白有所帮助。
第一阶段:专业核心基础
阶段目标:
1. 熟练掌握HTML5、CSS3、Less、Sass、响应书布局、移动端开发。
2. 熟练运用HTML+CSS特性完成页面布局。
4. 熟练应用CSS3技术,动画、弹性盒模型设计。
5. 熟练完成移动端页面的设计。
6. 熟练运用所学知识仿制任意Web网站。
7. 能综合运用所学知识完成网页设计实战。
知识点:
1、Web前端开发环境,HTML常用标签,表单元素,Table布局,CSS样式表,DIV+CSS布局。熟练运用HTML和CSS样式属性完成页面的布局和美化,能够仿制任意网站的前端页面实现。
2、CSS3选择器、伪类、过渡、变换、动画、字体图标、弹性盒模型、响应式布局、移动端。熟练运用CSS3来开发网页、熟练开发移动端,整理网页开发技巧。
3、预编译css技术:less、sass基础知识、以及插件的运用、BootStrap源码分析。能够熟练使用 less、sass完成项目开发,深入了解BootStrap。
4、使用HTML、CSS、LESS、SASS等技术完成网页项目实战。通过项目掌握第一阶段html、css的内容、完成PC端页面设计和移动端页面设计。
第二阶段:Web后台技术
阶段目标:
1. 了解JavaScript的发展历史、掌握Node环境搭建及npm使用。
2. 熟练掌握JavaScript的基本数据类型和变量的概念。
3. 熟练掌握JavaScript中的运算符使用。
4. 深入理解分之结构语句和循环语句。
5. 熟练使用数组来完成各种练习。
6.熟悉es6的语法、熟练掌握JavaScript面向对象编程。
7.DOM和BOM实战练习和H5新特性和协议的学习。
知识点:
1、软件开发流程、算法、变量、数据类型、分之语句、循环语句、数组和函数。熟练运用JavaScript的知识完成各种练习。
2、JavaScript面向对象基础、异常处理机制、常见对象api,js的兼容性、ES6新特性。熟练掌握JavaScript面向对象的开发以及掌握es6中的重要内容。
3、BOM操作和DOM操作。熟练使用BOM的各种对象、熟练操作DOM的对象。
4、h5相关api、canvas、ajax、数据模拟、touch事件、mockjs。熟练使用所学知识来完成网站项目开发。
第三阶段:数据库和框架实战
阶段目标:
1. 综合运用Web前端技术进行页面布局与美化。
2. 综合运用Web前端开发框架进行Web系统开发。
3. 熟练掌握Mysql、Mongodb数据库的发开。
4. 熟练掌握vue.js、webpack、elementui等前端框技术。
5. 熟练运用Node.js开发后台应用程序。
6. 对Restful,Ajax,JSON,开发过程有深入的理解,掌握git的基本技能。
知识点:
1、数据库知识,范式,MySQL配置,命令,建库建表,数据的增删改查,mongodb数据库。深入理解数据库管理系统通用知识及MySQL数据库的使用与管理,为Node.js后台开发打下坚实基础。
2、模块系统,函数,路由,全局对象,文件系统,请求处理,Web模块,Express框架,MySQL数据库处理,RestfulAPI,文件上传等。熟练运用Node.js运行环境和后台开发框架完成Web系统的后台开发。
3、vue的组件、生命周期、路由、组件、前端工程化、webpack、elementui框架。Vue.js框架的基本使用有清晰的理解,能够运用Vue.js完成基础前端开发、熟练运用Vue.js框架的高级功能完成Web前端开发和组件开发,对MVVM模式有深刻理解。
4、需求分析,数据库设计,后台开发,使用vue、node完成pc和移动端整站开发。于Node.js+Vue.js+Webpack+Mysql+Mongodb+Git,实现整站项目完整功能并上线发布。
第四阶段:移动端和微信实战
阶段目标:
1.熟练掌握React.js框架,熟练使用React.js完成开发。
2.掌握移动端开发原理,理解原生开发和混合开发。
3.熟练使用react-native和Flutter框架完成移动端开发。
4.掌握微信小程序以及了解支付宝小程序的开发。
5.完成大型电商项目开发。
知识点:
1、React面向组件编程、表单数据、组件通信、监听、声明周期、路由、Redux基本概念。练使用react完成项目开发、掌握Redux中的异步解决方案Saga。
2、react-native、开发工具、视图与渲染、api操作、Flutter环境搭建、路由、ListView组件、网络请求、打包。练掌握react-native和Flutter框架,并分别使用react-native和Flutter分别能开发移动端项目。
3、微信小程序基本介绍、开发工具、视图与渲染、api操作、支付宝小程序的入门和api学习。掌握微信小程序开发了解支付宝小程序。
4、大型购物网站实战,整个项目前后端分离开发;整个项目分为四部分:PC端网页、移动端APP、小程序、后台管理。团队协作开发,使用git进行版本控制。目期间可以扩展Three.js 、TypeScript。