大众彩票注册

  • <tr id='TIo14D'><strong id='TIo14D'></strong><small id='TIo14D'></small><button id='TIo14D'></button><li id='TIo14D'><noscript id='TIo14D'><big id='TIo14D'></big><dt id='TIo14D'></dt></noscript></li></tr><ol id='TIo14D'><option id='TIo14D'><table id='TIo14D'><blockquote id='TIo14D'><tbody id='TIo14D'></tbody></blockquote></table></option></ol><u id='TIo14D'></u><kbd id='TIo14D'><kbd id='TIo14D'></kbd></kbd>

    <code id='TIo14D'><strong id='TIo14D'></strong></code>

    <fieldset id='TIo14D'></fieldset>
          <span id='TIo14D'></span>

              <ins id='TIo14D'></ins>
              <acronym id='TIo14D'><em id='TIo14D'></em><td id='TIo14D'><div id='TIo14D'></div></td></acronym><address id='TIo14D'><big id='TIo14D'><big id='TIo14D'></big><legend id='TIo14D'></legend></big></address>

              <i id='TIo14D'><div id='TIo14D'><ins id='TIo14D'></ins></div></i>
              <i id='TIo14D'></i>
            1. <dl id='TIo14D'></dl>
              1. <blockquote id='TIo14D'><q id='TIo14D'><noscript id='TIo14D'></noscript><dt id='TIo14D'></dt></q></blockquote><noframes id='TIo14D'><i id='TIo14D'></i>
                首页 APP开发 正文

                安卓app开发教程flutter(安卓app开发教程pd)

                APP开发 1522
                本篇文章给大家谈谈安卓app开发教程flutter,以及安卓app开发教程pd对应的@ 知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目︻录一览: 1、Flutter(六)Android与Flutter混合开发(Hybird)

                本篇文章给大家谈谈安卓app开发教程flutter,以及安卓app开发教程pd对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

                本文目录一览:

                Flutter(六)Android与Flutter混合开发(Hybird)

                如果我们目前的项目是Android的,但是『接下来我们希望部分页面可以使用Flutter进行开发,甚至我们希望在Native页◎面中嵌入FlutterUI组件,那么我们该如何实现呢?

                假设你现在Android项目的目录的结构是这样的

                这时候如果你想创建一个Flutter模块,使得Android模块和Flutter模块之间可以进行交互,我●们可以通过Android Studio新建一个Flutter Module,具体过程是:File — New — New Module ,之后选择Flutter Module,指定Project Location的路径为

                也就是说,最终你的项目结构会是这样的

                接下来在Android Module的 build.gradle 文件中添加flutter依赖

                先创建一︾个Flutter页面

                这里比较重要的是 window.defaultRouteName 这个字段,这个▓字段可以接收从Native传递过来的参数 (下文我们会介绍原生传递参@数的方法),也就是说通过这个字段我们就可以进行Flutter页面的路由的分发

                我们可以直接在Android的 MainActivity 中启动一个 FlutterActivity ,这里的 initialRoute 方ξ法中传递的参数就对应Flutter层的 window.defaultRouteName

                注意:需要在 AndroidManifest.xml 注册 FlutterActivity

                自己创建一个 FlutterAppActivity 继承自 FlutterActivity

                在 MainActivity 中启动 FlutterAppActivity (另外别忘了△在 AndroidManifest.xml 中注册 FlutterAppActivity )

                两种启动方式的∮区别

                如果单纯只是想打开一个Flutter页面,两种方式实际上々基本没有太大区别,第一种方式也许还会更简单一点。但是,在Flutter开发中,我们往往还需要开发一些Native插件供Flutter调用,如果使用复写 FlutterActivity 的方式更有利于我们在 FlutterActivity 中注册我♀们的Native插件,所以实际开发中一般推荐使用第二种方式

                扩展思考

                initialRoute 从名称上看▂起来是Flutter提供给我们进行Native与Flutter交互的路由跳ξ 转的,但是实际上他就是一个字符串,我们不仅仅可以传递一个↑路由名称,有时候我们也可∮以通过这个参数传递一串JSON数据,然后在Flutter端进行解析,这样我们就可♀以通过这个参数做更多的事情

                activity_main.xml

                FrameLayout 用于承载Flutter组件

                MainActivity.java

                使用 FragmentManager 将 FlutterFragment 添加到 FrameLayout 容器中

                运行结果

                上半部分是原生的TextView,下半部分是Flutter的Text组件

                本节主要介绍了Native和Flutter之间的页面跳转,以及同一个页面中Native与Flutter组件的组合。接下来会◥介绍如何编写Android插件与Flutter进行数据交互

                Flutter入门这一篇效率文章就够了

                本文面向 Flutter 初学者,旨在用易懂的方式带大家入门。除了 Flutter 代码,还会介绍到语法、原理、特性等基础知识。相信本文↘能帮助你学习和理解 Flutter。

                我们先看一下目前的一些跨平台方案,从前端渲染的角度来分类的话◥,大致可以分为以下几种方案ぷ。

                WebView 渲染

                这种方案就很好理解,现在很多▓项目都会嵌入 H5 的页面。就是用 JavaScript 等前端技术进行开发,在╳客户端上用 WebView 来进行渲染。微信小程序目前使用的就是这种方案。

                它的优点很明显,使用成熟的前端技术进行开发,学习成本低,开发效率高,并且支持动态发布代码》。

                但缺点也很明显,在性能体验上』,和原生还是存在较大差距的。

                原生控件№渲染

                既然 WebView 的性能不够好,于是就有了使用原生控件进行渲染的方案。这种方案,同样也是使用 JavaScript 开发,区别是它最终是调用原生控件进行渲染的。这种方案的代表是 Facebook 的 React Native。

                由于使用原生控件进行渲←染,性能体验也会更接近原生。但也只是@ 更接近,和原生还是有差距的,因为它需↓要频繁的进行 JavaScript 和原生之间的通信,这个通信效率是∏比较低的。

                另外,由于需要适配各个平台的控件,那就有可能出现,系统控件更新了,而框架本身还没有更新,由此产生了一些问题。换句话说,这种方案是受到原生控件限制的。

                绘图引擎渲染

                接下来就是╱主角了。

                在前端,如果完全不使用原生控件,我们可以▽通过系统的绘图 API 绘制出一个用户界面。从这个』角度出发,可以在各个平台使用一个统一接口的绘图引擎来进行界面绘制,这个引擎最终调用的是系统的 API 绘制的。这样的话,它的性能可以做到接近原生,并且又不受原生♂控件的限制,在不同平台上能够做到 UI 统一。

                Flutter 就是这︻样的一个开发框架。

                一个跨ζ 平台⌒  UI 解决方案

                Flutter 是由 Google 开发的,一个跨平台 UI 解决方案。换句话说,它原则上只管 UI 的问题,如果涉及到★平台本身的一些功能,比如调用蓝牙、摄像头,一般还是需要原生代码去操作。但现在也会有一些第三方库帮我们解决这些问题。

                绘图引擎 Skia

                Flutter 使用 Skia 作为它的绘图引擎。Skia 已经被 Google 收购,目前很多 Google 旗下的产品都是用 Skia 绘制的,包括 Android。

                Android 内置了 Skia,但 iOS 没有,所以在打 iOS 安装包的时候,会把 Skia 一起』打进去。这就导致了,用同一份 Flutter 代码ξ打包之后△,iOS 的包要比 Android 的包大一些。

                开发语言 Dart

                Flutter 使用的开发语∮言,叫 Dart。Dart 也是 Google 自家的,它是一门面向对象的语言,从它身上会看到一些其他开发语言的影子。学习起来难度不大的。

                前面讲跨平台方案的时候,可以发现别的方案基本都是用 JavaScript 作为开发语言的,但为什么 Flutter 不用?就因为 Dart 是谷歌自家的♂吗?这个问题先留▂着,我们后面会提到。

                这里部分就简≡单点带过了,具体的搭建流程可以在官网查看:

                主要的搭建步骤如ζ 下:

                下载 Flutter SDK

                官网下载地址:

                由于在国内访问可能受限,官方为中国开发者搭建了镜像:

                更新环境变量

                解压后,将 flutter\bin 的全路径添加到环境变量 PATH 中。

                安装开发工具

                理论上,任何文本编辑器都可以用来∏开发 Flutter 应用,但推荐的开发工具是 Android Studio、IntelliJ 以及 VS Code。因为在这些开发工Ψ具上,可以安装々官方的 Flutter 和 Dart 插件,得到更好的开发体验。文章里◥使用 Android Studio 来演示。

                如果你打算开发 iOS 应用,则还需要安装 Xcode。

                安装插件

                在开发工具的插件设置中,安装上面说到的 Flutter 和 Dart 插件。Flutter 插件用㊣ 于支持 Flutter 的运行、调试、热重载等功能,而 Dart 插件则◥提供了代码的输入校验、代码补全等功能。

                万物始于 Hello World,我们▂先来创建一个显示 Hello World 的 Flutter 项目。

                在 Android Studio 的欢迎页面选择 Start a new Flutter project ,或者通过菜▓单栏的 File New New Flutter Project ,创建一个新的 Flutter 项目。

                创建好的项目里面包含了 android 和 ios 两个文件夹,它们是标准的 Android 和 iOS 项目。我们的 Flutter 代码,存放在 lib 文件夹里。项目创建好后,会默认带一个计数器的示例,我们不管它,把 main.dart 的代码╲改成 Hello World:

                启动一个模拟器,或者◥连上真机,点击 Run 运行一下,就能看这样一个界面了:

                具体∩代码先混个眼熟就好,具体的后面会再讲到。

                在写 Flutter 之前,还要先跟大家简单介绍一下 Dart 的语法。如果你有 Java 或 JavaScript 的开发经验,以及面向对象的编程思想,学起〓来是很快的。

                我们可以在 test 文←件夹下新建一个 dart 文件,用来写测试代码。

                指定类型

                var

                但和 JavaScript 不同的是,以下代码@ 在 JavaScript 是不会报错的,但在 Dart 里会报错:

                Object

                如果非要上面这样写,那也可以。把 var 换成 Object 就不报◆错了:

                和 Java 类似,Object 是所有对象的根基类。但是这样的话,如果想打印一下 num 的字符串长度,是会报错的:

                因为 length 是属于 String 的,但系统只知道 num 是卐一个对象,并不知道它是一个 String。

                dynamic

                如果还是非要这╲样写,那也可以。Dart 有一个特有的关键字 dynamic,把 Object 改成 dynamic 就不▅报错了:

                我们运行一下这个文件,可以在控制台看到正确打印出了字符串长度。

                函数

                dynamic

                在 Dart 里,函数也是可以不写返回类型的,不写的话会被当做 dynamic 来处理。这样的话,函数的类型就是 return 的类型,如果没有 return 则是 void 类型。比如可以这◇样:

                运行之后是能正确打印出∞字符串长度的。

                用于传参

                Dart 里的函数也◢是一个对象,所以可以把函数作为参数来传递,比如:

                可选参数

                在 Dart 的函数︻传参里,有一个叫可选参数的概念,我们以文字控件 Text 为例,在源码里可以看到 Text 的构造函数是这样的:

                首先,在参数里有一个 data,它是要显示的文字内容,是一个必填项。而 data 后面的一堆参数,是∮用一个大括号括起来的,这些参数就叫做可选参数,意思是这些』参数可传可不传。

                假如我们要显ξ示一个比较长的文字,又想限制它最多显示两行,就可√以这样来创建一个 Text:

                可选参数,在 Flutter 里面用的非常多。

                异步

                Future

                在 Dart 里使用 Future 来处理异步任务,比如我们现在延时一秒打印 666,代码如下:

                Future 的语法和 Promise 非常像。任务执行成功会调用 then,执行失Ψ 败会调用 catchError,而无论成功还是失败,都会调用 whenComplete。

                async/await

                如♂果你不喜欢上面那种写法,或者是想把异步转成同步,就可以用 async 和 await 这两个关键字来转换▃。

                我们把上面的代码转换一下,写一个 getString 方法,返回的类型是 Future,它会延时返回一个字符串。在 main 函数后面加上 async 关键字,在 getString() 前面加上 await,代码如下:

                运行之后可以看到,能正常延时一秒后,把字符串打印出来。这里 getString() 返回的类型是 Future,而 await getString() 则是返回了延时之后返回的字符串。await 要在 async 的函数里面才▲能使用。

                async 和 await 其实是一个语法糖,它最终也是转换成『 Future 调用链的形式执行的。

                接下来回々到 Flutter,Flutter 里最重要的一个概念是 Widget(下面翻译作控件)。

                在原生开发里面,我们可能会在界面上区分,这是一个 View,这是一个 Layout,这是一个 View Controller。但在 Flutter 里面,它们全都属于一个统一的模∞型 Widget。可以说,在 Flutter 界面里,所有东西都是 Widget。

                以前学面向对象的时候,我们都听过↘一句话,叫万物皆对象。我ㄨ这里套用一下,在 Flutter 里, 万物皆控件 。

                具体有哪些控件,我做了一下简单的分类。

                根控件

                所有的控件都属于 StatefulWidget 或 StatelessWidget 。它们的区别是,StatefulWidget 拥有状态 State ,而 StatelessWidget 没有。

                StatefulWidget

                当一个控件是可变的时候,就要使用 StatefulWidget 来构建。StatefulWidget 本身不可变,但它持有的状态 State 是可变的。

                StatelessWidget

                当一个控▓件状态是固定不可变的时候,就可以使用 StatelessWidget。前面我「们写的 Hello World 就是使用 StatelessWidget。

                容器控件

                容器类控件一般是将某些属性或配置,作用在◥它的子控件上,比如控件所在的宽高、背景、位置等。

                常用的容器控件有 Container、Center、Padding 等。

                布局控件

                布局控件可以类比作原生开发中的 Layout,通常它会拥有一个 children 的属性,用于接收一个控件数组,对这些控件进行○特定的排版。

                常用的布局控件有 Row、Column、Stack、Flex 等。

                基础控件

                基础控件就是常用的文字、按钮、图片等控件。

                常用的基础控件有↘ Text、TextField、Button、Image 等。

                功能控件

                在 Flutter 里还有一类控件,它们不影响 UI 布局,但带有一些特定的功能,比如页面跳转、事件监听、定义主题等。我们把这一类控件称作功能控件。

                常用的功能控件●有 Navigator、NotificationListener、Theme 等。

                开始写 Flutter 代码了。还记不记得,在 Flutter 项目创建〓之后,是自带一个计数器 demo 的,现在我们用自己的代码实现一遍。代码修改成如下:

                运行之后,就可以看到这样的界面了:

                按钮每点击一次∩,数字就会加一。下面我们来分析一下这段代码,看下里面用到的一些 Widget。

                StatefulWidget

                由于页面中的数字是跟随状态变化的,所以该页面改用 StatefulWidget。StatefulWidget 并不会直接返回一个 Widget,而是返回状∞态 State,在 State 里再返回 Widget。

                Scaffold

                Scaffold 是一个标准的 Material Design 页面,它包含了标题栏、浮动按钮、侧滑菜单、底部导航栏等配置。我们这里用到了标题栏 appBar、页面内容 body、浮动按钮 floatingActionButton。

                AppBar

                AppBar 就是标题栏,通过查看控件的构造方法,我们可以知道它可配置的属性。

                AppBar 的可选参数除了标题 title,还可以配置标题前的内容 leading,右侧的操☆作按钮 anctions,控件垂直高度 elevation 等。我们↑只传了 title,其他属性都用默认值。

                Center

                Center 是一个容器类控件,它的作用就是让它的子控件居中显示。

                FloatingActionButton

                熟悉安卓开发的应ζ该对这个控件比较熟悉,它就是页面右下角一个特定样式的 Button,参数里面的 onPressed 是一个必填项,要传一个点击之后的回调函数。

                根据这个ω例子,下面给大家介绍一下 Flutter 两个比较重要的特性。

                点击 Button 之后,我们把 num 变量加一,并使用 setState 通知状※态发生了改变,Flutter 会根据新的状态更新 UI。如果有♂接触过小程序开发,setState 就和小程序的 setData 类似。

                在 Flutter 里面我们不需要用 set 方法来更新 UI,可变控件是和状态绑定的,这就是 Flutter 的响应式 UI 编程。

                在 Android Q 和 iOS 13 里都加入了暗黑模式,我们也换一个暗黑主题来玩一下。MaterialApp 里有一个 theme 的属性,我们↘把它配置一下:

                这次改完之后不点 Run 了,我们点一下闪电图∏标 Flutter Hot Reload ,就能看到界面发生了变化:

                这就是 Flutter 的 热重载 ,在修改完代码之后,通过热∏重载就能马上在设备上看到修改结果,可以很大程度上增加开发效率。

                下面』再给大家介绍几个 Flutter 里的常见操作。

                在 Flutter 里,使用 Navigator 来管理页面跳转,比如要跳转到一个 NewPage 可以这样写:

                进栈使用 push,出栈则是 pop。

                使用 MaterialPageRoute 会模拟出 Android 上页→面跳转的过场效果。

                我们来看看怎么显示一张本地图片。

                先在根目录新建一个存放图Ψ 片的文件夹,比如叫 images,把图片 picture.png 放进去。

                找到根目录下的 pubspec.yaml 文件,这个便是 Flutter 依赖配置文↙件,我们需要在这里配置一下刚才的图片:

                这样,我们就能使用 Image 控件把这张图片显示出来了:

                和 node 的 npm 以及 Android 的 jcenter 类似,Flutter 也拥有一个公共仓库 pub.dev。pub.dev 是 Google 官方的 Dart 仓库,在上面可以找到我们需要的包和插件。

                Flutter 本身没有 Toast,我们来接入一个。在 pub.dev 上搜索后,我决定使用 fluttertoast:

                按照说明,在 pubspec.yaml 文件里的 dependencies 下配置:

                点一下 Android Studio 右上角的 Packages get 同步之后就可以使用了:

                我们上面∑使用的都是 Material Design 的控件,它】们都是在 flutter/material.dart 包里面的。如果要使用 iOS 风格的控♂件,则要用到 flutter/cupertino.dart 包:

                iOS 风格的控件,基本都以 Cupertino 开头。我们把计时器页面「里的控件替换一下:

                效果如下:

                代码的部分就到这里了,接下来跟大家聊一下编译方式,编程语言的编译方式有两种。

                关于它们孰优孰劣,就要看从哪个角度去对比了。JIT 的话,它的一大特点就是支持动态发布代码,也就是支〓持热更新。但要是从性能的角度考虑,AOT 会更好,因为在运行的时㊣ 候不用再进行编译的操作的,运行的效率会更高一些。

                回到我们一开始的时候留下的问题,为什么别的跨平台方案都是用 JavaScript,而 Flutter 要用 Dart 来开发。JavaScript 的编译方式是 JIT 的,它不支持 AOT。而 Dart 同时支持 JIT 和 AOT。

                Flutter 在开发阶段使用 JIT,让我们用上了热重载,增加了开发效率。在ζ 打包时改用 AOT,保证了正式版应用的性能。

                最后讲一下大家比较关心█的一个东西,Flutter 是否支持热更新?前面说到 Dart 支持 JIT,所以从技术层【面它是支持的。但是目前是不支持的,在官╲方的计划文档中,可以看到:

                至于原因,官方在这里进行了说明。总的来说,是由于政策的限制,以及出于对性能和安全性的考虑,暂时不支持了。

                到这就结束啦。由于想把 Flutter 基础在一□篇内讲完,没有涉及太多细节,如果要写 Flutter 代码还需要深入学习。但相信理解之后再学,会∞轻松很多。

                求flutter的教学视频!!!!

                Flutter教程全套 (全网独家)百度网盘免费资源在线学习 ?

                链接:

                提取码: m9z8 ?

                Flutter教程全套 (全网独家)

                第一套:Flutter 携程17章全-整理好

                第五套:Flutter高仿谷歌翻译项目课程

                第四套:两小时掌握Flutter移动App开发视频

                第三套:flutter入门到精通全套

                第七套:Flutter小实战20个

                第六套:仿直聘boss的flutter完整教程

                第九套:Flutter跨平台开▓发

                第二套:flutter移动电商实战-技术胖

                第八套:Flutter基础教程(基础不好的优☉先看)

                24Flutter的打包.mp4

                23静态资源和项目图片的处理.mp4

                22页面跳转并返回数据_.mp4

                21导航的参数传递和接受-2_.mp4

                20导航的参数传递和接受-1.mp4

                Flutter开发之Android物理按键返回

                在flutter开发过程中,发现Android手机在App首页点击物理返回按钮时,App会退出并且再次点开App时会重新启动◣,这代表了上次的退出直接杀死了App,和我们平常的退到手机桌面不同,所以开发了一个单独插件来处理这种情况。

                使用步※骤如下:

                1、pubspec.yaml文件中引入依赖

                2、引用插件

                3、使用插件来退出App到桌面,并且保持App后台运行

                可根据实际情况在_onWillPop方法中处理相关逻辑,比如连续两次点击物理ぷ返回按钮才退出到桌面等。

                安卓app开发教程flutter的介绍就№聊到这里吧,感谢你花时间阅读本站内容,更多关于安卓app开发教程pd、安卓app开发教程flutter的信息别忘▓了在本站进行查找喔。

                扫码二维码