带你读《Flutter技术入门与实战》之一:开启Flutter之旅

简介: 本书的定位适合小白程序员,入门加实战,既有基础知识,又有丰富示例,包括详细的操作步骤,实操性强。由于Flutter大量使用组件,所以对组件的讲解很详细,包括基本概念、属性及代码示例。每个组件都配有小例子,力求精简,还提供了配套网站提供完整代码,复制完整代码就可以立即看到效果。在轻松掌握基础知识的同时快速进入实战。

实战
点击查看第二章
点击查看第三章
Flutter技术入门与实战

image.png


亢少军 编著

第1章

开启Flutter之旅
Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。
在本章中,我们将介绍Flutter的一些基本概念,及开发Flutter的准备工作,包括:
□Flutter的特点与核心概念。
□开发环境搭建。
□第一个Flutter程序。

1.1 Flutter的特点与核心概念

Flutter的特点如下所示:
□跨平台:现在Flutter至少可以跨5种平台,甚至支持嵌入式开发。我们常用的有MacOS、Windows、Linux、Android、iOS,甚至可以在谷歌最新的操作系统Fuchsia上运行。到目前为止,Flutter算是支持平台最多的框架了,良好的跨平台性,直接带来的好处就是减少开发成本。
□丝滑般的体验:使用Flutter内置高大上的Material Design和Cupertino风格组件、丰富的motion API、平滑而自然的滑动效果和平台感知,为用户带来全新体验。
□响应式框架:使用Flutter的、响应式框架和一系列基础组件,可以轻松构建用户界面。使用功能强大且灵活的API(针对2D、动画、手势、效果等)能解决艰难的UI挑战。
□支持插件:通过Flutter的插件可以访问平台本地API,如相机、蓝牙、WiFi等。借助现有的Java、Swift、Objective C、C++代码实现对原生系统的调用。
□60fps超高性能:Flutter采用GPU渲染技术,所以性能极高。Flutter编写的应用是可以达到60fps(每秒传输帧数),这也就是说,它完全可以胜任游戏的制作。官方宣称用Flutter开发的应用甚至会超过原生应用的性能。
Flutter包括一个现代的响应式框架、一个2D渲染引擎、现成的组件和开发工具。这些组件可以帮助你快速地设计、构建、测试和调试应用程序。Flutter的核心概念有:组件、构建、状态、框架等,下面分别介绍。

1.1.1 一切皆为组件

组件(Widget)是Flutter应用程序用户界面的基本构建块。不仅按钮、输入框、卡片、列表这些内容可作为Widget,甚至将布局方式、动画处理都视为Widget。所以Flutter具有一致的统一对象模型:Widget。
Widget可以定义为:
□一个界面组件(如按钮或输入框)。
□一个文本样式(如字体或颜色)。
□一种布局(如填充或滚动)。
□一种动画处理(如缓动)。
□一种手势处理(GestureDetector)。
Widget具有丰富的属性及方法,属性通常用来改变组件的状态(颜色、大小等)及回调方法的处理(单击事件回调、手势事件回调等)。方法主要是提供一些组件的功能扩展。比如:TextBox是一个矩形的文本组件,其属性及方法如下:
□bottom:底部间距属性。
□direction:文本排列方向属性。
□left:左侧间距属性。
□right:右侧间距属性。
□top:上部间距属性。
□toRect:导出矩形方法。
□toString:转换成字符串方法。

1.1.2 组件嵌套

复杂的功能界面通常都是由一个一个简单功能的组件组装完成的。有的组件负责布局,有的负责定位,有的负责调整大小,有的负责渐变处理,等等。这种嵌套组合的方式带来的最大好处就是解耦。
例如,界面中添加了一个居中组件Center,居中组件里嵌套了一个容器组件Container,容器组件里嵌套了一个文本组件Text和一个装饰器BoxDecoration。代码如下所示:
return new Center(
//添加容器
child: new Container(

//添加装饰器
decoration: new BoxDecoration(
),
child: new Text(
//添加文本组件
),

),
),
大家如果是首次看到这段代码会觉得嵌套层次太多,太复杂。其实不然,随着对组件的深入了解及熟练使用,写起来还是非常得心应手的。
最基础的组件类是Widget,其他所有的组件都是继承Widget的,如图1-1所示。紧接着下面有两大类组件:有状态组件及无状态组件。有状态组件是界面会发生变化的组件,如Scrollable、Animatable等,无状态的组件即界面不发生变化的组件,如Text、AssetImage等。

image.png

1.1.3 构建Widget

可以重写Widget的build方法来构建一个组件,如下代码所示:
@protected Widget build(BuildContext context);
build即为创建一个Widget的意思,返回值也是一个Widget对象,不管返回的是单个组件还是返回通过嵌套的方式组合的组件,都是Widget的实例。

1.1.4 处理用户交互

如果Widget需要根据用户交互或其他因素进行更改,则该Widget是有状态的。例如,如果一个Widget的计数器在用户点击一个按钮时递增,那么该计数器的值就是该Widget的状态。当该值发生变化时,需要重新构建Widget以更新UI。
这些Widget将继承StatefulWidget(而不是State)并将它们的可变状态存储在State的子类中,如图1-2所示。

image.png


每当你改变一个State对象时(例如增加计数器),必须调用setState()来通知框架,框架会再次调用State的构建方法来更新用户界面。
有了独立的状态和Widget对象,其他Widget可以以同样的方式处理无状态和有状态的Widget,而不必担心丢失状态。父Widget可以自由地创造子Widget的新实例且不会失去子Widget的状态,而不是通过持有子Widget来维持其状态。框架在适当的时候完成查找和重用现有状态对象的所有工作。

1.1.5 什么是状态

Flutter中的状态和React中的状态概念一致。React 的核心思想是组件化的思想,应用由组件搭建而成,而组件中最重要的概念是State(状态),State是一个组件的UI数据模型,是组件渲染时的数据依据。Flutter程序的运行可以认为是一个巨大的状态机,用户的操作、请求API和系统事件的触发都是推动状态机运行的触发点,触发点通过调用setState方法推动状态机进行响应。状态的生命周期如图1-3所示。

image.png

1.1.6 分层的框架

Flutter框架是一个分层的结构,每一层都建立在前一层之上。图1-4显示了Flutter框架,上层比下层的使用频率更高。
提示 有关构成Flutter分层框架的完整库,请参阅官方的API文档,地址为:https://docs.flutter.io/

分层设计的目标是帮助开发者用更少的代码做更多的事情。例如,Material层通常组合来自Widget层的基本Widget, 而Widget层通过较低级对象渲染层来构建。
分层结构为构建应用程序提供了许多选项。选择一种自定义的方法来释放框架的全部表现力,或者使用构件层中的构建块,或混合搭配。可以使用Flutter提供的所有现成的Widget,也可以使用Flutter团队用于构建框架的相同工具和技术创建定制的Widget。也就是说,你可以从高层次、统一的Widget概念中获得开发效率优势,也可以深入到下层施展才能。

image.png

1.2 开发环境搭建

开发环境搭建还是非常烦琐的,任何一个步骤失败都会导致最终环境搭建不能完成。Flutter支持三种环境:Windows、MacOS和Linux。这里我们主要讲解Windows及MacOS的环境搭建。

1.2.1 Windows环境搭建

1.使用镜像
首先解决网络问题。环境搭建过程中需要下载很多资源文件,当某个资源更新不到时,就可能会报各种错误。在国内访问Flutter有时可能会受到限制,Flutter官方为中国开发者搭建了临时镜像,大家可以将如下环境变量加入到用户环境变量中:
image.png

2.安装Git
Flutter依赖的命令行工具为Git for Windows(Git命令行工具)。Windows版本的下载地址为:https://git-scm.com/download/win
3.下载安装Flutter SDK
去Flutter官网下载其最新可用的安装包。

image.png

将安装包zip解压到你想安装Flutter SDK的路径(如:D:Flutter)。在Flutter安装目录的Flutter文件下找到flutter_console.bat,双击运行并启动Flutter命令行,接下来,你就可以在Flutter命令行运行flutter命令了。
注意 不要将Flutter安装到需要一些高权限的路径如C:Program Files。

4.添加环境变量
不管使用什么工具,如果想在系统的任意地方能够运行这个工具的命令,则需要添加工具的路径到系统path里去。这里路径指向到Flutter文件的bin路径,如图1-5所示。同时,检查是否有名为“PUB_HOSTED_URL”和“FLUTTER_STORAGE_BASE_URL”的条目,如果没有,也需要添加它们。重启Windows才能使更改生效。

image.png

5.运行flutter命令安装各种依赖
使用Windows命令窗口运行以下命令,查看是否需要安装任何依赖项来完成安装:
flutter doctor
该命令检查你的环境并在终端窗口中显示报告。Dart SDK已经捆绑在Flutter里了,没有必要单独安装Dart。 仔细检查命令行输出以获取可能需要安装的其他软件或进一步需要执行的任务。如下代码粗体显示,Android SDK缺少命令行工具,需要下载并且提供了下载地址,通常这种情况只需要把网络连好,VPN开好,然后重新运行flutter doctor命令即可。

image.png

6.编辑器设置
如果使用flutter命令行工具,可以使用任何编辑器来开发Flutter应用程序。输入flutter help在提示符下查看可用的工具。但是笔者建议最好安装一款功能强大的IDE来进行开发,毕竟开发调试运行打包的效率会更高。由于Windows环境只能开发Flutter的Android应用,所以接下来我们会重点介绍Android Studio这款IDE。
(1)安装Android Studio
要为Android开发Flutter应用,你可以使用Mac或Windows操作系统。Flutter需要安装和配置Android Studio,步骤如下:
1)下载并安装Android Studio:https://developer.android.com/studio/index.html
2)启动Android Studio,然后执行“Android Studio安装向导”。这将安装最新的Android SDK、Android SDK平台工具和Android SDK构建工具,这是Flutter为Android开发时所必需的。
(2)设置你的Android设备
要准备在Android设备上运行并测试你的Flutter应用,需要安装Android 4.1(API level 16)或更高版本的Android设备。步骤如下:
1)在你的设备上启用“开发人员选项”和“USB调试”,这些选项通常在设备的“设置”界面里。
2)使用USB线将手机与计算机连接。如果你的设备出现提示,请授权计算机访问你的设备。
3)在终端中,运行flutter devices命令以验证Flutter识别出你连接的Android设备。
4)用flutter run启动你的应用程序。
提示: 默认情况下,Flutter使用的Android SDK版本是基于你的adb工具版本。 如果你想让Flutter使用不同版本的Android SDK,则必须将该ANDROID_HOME环境变量设置为SDK安装目录。

(3)设置Android模拟器
要准备在Android模拟器上运行并测试Flutter应用,请按照以下步骤操作:
1)启动Android Studio→Tools→Android→AVD Manager?并选择?Create Virtual Device,打开虚拟设备面板,如图1-6所示。

image.png

2)选择一个设备并点击Next,如图1-7所示。

image.png

3)选择一个镜像点击download即可,然后点击Next,如图1-8所示。

image.png

4)验证配置信息,填写虚拟设备名称, 选择Hardware - GLES 2.0以启用硬件加速,点击Finish,如图1-9所示。

image.png

5)在工具栏选择刚刚添加的模拟器,如图1-10所示。


image.png

6)也可以在命令行窗口运行flutter run?启动模拟器。当能正常显示模拟器时(如图1-11所示),则表示模拟器安装正常。

image.png

提示:建议选择当前主流手机型号作为模拟器,开启硬件加速,使用x86或x86_64image。
详细文档请参考:https://developer.android.com/studio/run/emulator-acceleration.html

(4)安装Flutter和Dart插件
IDE需要安装两个插件:
□Flutter插件:支持Flutter开发工作流 (运行、调试、热重载等)。
□Dart插件:提供代码分析 (输入代码时进行验证、代码补全等)。
打开Android Studio的系统设置面板,找到Plugins分别搜索Flutter和Dart,点击安装即可,如图1-12所示。

image.png

1.2.2 MacOS环境搭建

首先解决网络问题,参见上节“Windows 环境搭建”。
1.命令行工具
Flutter依赖的命令行工具有bash、mkdir、rm、git、curl、unzip、which。
2.下载安装Flutter SDK
请按以下步骤进行下载安装Flutter SDK:
步骤1:去Flutter官网下载其最新可用的安装包。
注意: Flutter的渠道版本会不停变动,请以Flutter官网为准。另外,在中国大陆地区,要想获取安装包列表或下载安装包有可能发生困难,读者也可以去Flutter GitHub项目下去下载安装Release包。
Flutter官网下载地址:https://flutter.io/docs/development/tools/sdk/archive#macos
Flutter GitHub下载地址:https://github.com/flutter/flutter/releases

步骤2:解压安装包到你想安装的目录,如:
cd /Users/ksj/Desktop/flutter/
unzip /Users/ksj/Desktop/flutter/v0.11.9.zip.zip
步骤3:添加Flutter相关工具到path中:
export PATH=pwd/flutter/bin:$PATH
3.运行Flutter命令安装各种依赖
运行以下命令查看是否需要安装其他依赖项:
flutter doctor
该命令检查你的环境并在终端窗口中显示报告。Dart SDK已经捆绑在Flutter里了,没有必要单独安装Dart。 仔细检查命令行输出以获取可能需要安装的其他软件或进一步需要执行的任务(以粗体显示)。如下代码中粗体提示表示,Android SDK缺少命令行工具,需要下载并且提供了下载地址,通常这种情况只需要把网络连好,VPN开好,然后重新运行flutter doctor命令。

image.png

注意:一旦你安装了任何缺失的依赖,需再次运行flutter doctor命令来验证你是否已经正确地设置了,同时需要检查移动设备是否连接正常。

4.添加环境变量
使用vim命令打开~/.bash_profile文件,添加如下内容:

image.png

注意:请将PATH=/Users/ksj/Desktop/flutter/flutter/bin更改为你的路径即可。

完整的环境变量设置如图1-13所示。
设置好环境变量以后,请务必运行?source $HOME/.bash_profile?刷新当前终端窗口,以使刚刚配置的内容生效。

image.png


5.编辑器设置
如果使用?Flutter?命令行工具,可以使用任何编辑器来开发Flutter应用程序。输入flutter help在提示符下查看可用的工具。但是笔者建议最好安装一款功能强大的IDE来进行开发,毕竟开发调试运行打包的效率会更高。由于MacOS环境既能开发Android应用也能开发iOS应用,Android设置请参考1.2.1节“Windows环境搭建”中的“安装Android Studio”,接下来我们会介绍Xcode使用方法。
(1)安装 Xcode
安装最新Xcode。通过链接下载: https://developer.apple.com/xcode/,或通过苹果应用商店下载: https://itunes.apple.com/us/app/xcode/id497799835
(2)设置iOS模拟器
要准备在iOS模拟器上运行并测试你的Flutter应用。要打开一个模拟器,在MacOS的终端输入以下命令:
open -a Simulator
可以找到并打开默认模拟器。如果想切换模拟器,可以打开Hardware下在Device菜单选择某一个模拟器,如图1-14所示。
打开后的模拟器如图1-15所示。
接下来,在终端运行?flutter run命令或者打开Xcode,如图1-16所示选择好模拟器。点击运行按钮即可启动你的应用。
(3)安装到iOS设备
要在苹果真机上测试Flutter应用,需要一个苹果开发者账户,并且还需要在Xcode中进行设置。

image.png

image.png

image.png

1)安装Homebrew?工具,Homebrew是一款MacOS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。下载地址为:https://brew.sh
2)打开终端并运行一些命令,安装用于将Flutter应用安装到iOS设备的工具,命令如下所示:
brew update
brew install --HEAD libimobiledevice
brew install ideviceinstaller ios-deploy cocoapods
pod setup
提示:如果这些命令中有任何一个失败并出现错误,请运行brew doctor并按照说明解决问题。

接下来需要Xcode签名。Xcode签名设置有以下几个步骤:
步骤1:在你Flutter项目目录中通过双击ios/Runner.xcworkspace打开默认的Xcode工程。
步骤2:在Xcode中,选择导航面板左侧中的Runner项目。
步骤3:在Runner target设置页面中,确保在General→Signing→Team(常规→签名→ 团队)下选择了你的开发团队,如图1-17所示。当你选择一个团队时,Xcode会创建并下载开发证书,为你的设备注册你的账户,并创建和下载配置文件。

image.png

步骤4:要开始你的第一个iOS开发项目,可能需要使用你的Apple ID登录Xcode。任何Apple ID都支持开发和测试。需要注册Apple开发者计划才能将你的应用分发到App Store。请查看https://developer.apple.com/support/compare-memberships/这篇文章。登录界面如图1-18所示。

image.png

步骤5:当你第一次添加真机设备进行iOS开发时,需要同时信任你的Mac和该设备上的开发证书。点击Trust即可,如图1-19所示。

image.png

步骤6:如果Xcode中的自动签名失败,请查看项目的Bundle Identifier值是否唯一。这个ID即为应用的唯一ID,建议使用域名反过来写,如图1-20所示。

image.png

步骤7:使用flutter run命令运行应用程序。

1.3 第一个Flutter程序

万事开头难,我们用Hello World来看一个最简单的Flutter工程,具体步骤如下。
步骤1:新建一个Flutter工程,选择Flutter Application,如图1-21所示。


image.png

步骤2:点击Next按钮,打开应用配置界面,其中在Project name中填写helloworld, Flutter SDK path使用默认值,IDE会根据SDK安装路径自动填写,Project location填写为工程放置的目录,在Description中填写项目描述,任意字符即可,如图1-22所示。

image.png

步骤3:点击Next按钮,打开包设置界面,在Company domain中填写域名,注意域名要反过来写,这样可以保证全球唯一,Platform channel language下面的两个选项不需要勾选,如图1-23所示。

image.png

步骤4:点击Finish按钮开始创建第一个工程,等待几分钟,会创建如图1-24所示工程。

image.png

步骤5:工程建好后,可以先运行一下看看根据官方创建的示例运行的效果,点击Open iOS Simulator 打开iOS模拟器, 具体操作如图1-25所示。

image.png

步骤6:等待几秒钟后会打开模拟器,如图1-26所示。

image.png


步骤7:点击debug(调试)按钮,启动官方示例程序,点击+号按钮,可以自动加1,此示例是一个基于Material Design风格的应用程序,如图1-27所示。

image.png

步骤8:接下来我们打开工程目录下的main.dart文件,清空main.dart代码,如图1-28箭头所指。

image.png

步骤9:把Hello World代码粘贴至main.dart文件里,完整代码如下所示:
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {

return MaterialApp(
  title: 'Welcome to Flutter',
  home: Scaffold(
    appBar: AppBar(
      title: Text('Welcome to Flutter'),
    ),
    body: Center(
      child: Text('Hello World'),
    ),
  ),
);

}
}
步骤10:重新运行此程序,标题栏显示Welcome to Flutter,页面中间显示Hello World。这样,第一个Flutter程序就运行出来啦,如图1-29所示。

image.png

相关文章
|
2月前
|
Dart Android开发
鸿蒙Flutter实战:05-使用第三方插件
在鸿蒙Flutter开发中,使用原生功能需借助插件。可自编原生ArkTS代码或采用第三方插件。自编代码通过PlatformView或MethodChannel实现;第三方插件需确保适配鸿蒙,否则须配置替代插件或自行开发。
80 1
鸿蒙Flutter实战:05-使用第三方插件
|
2月前
|
Java 开发工具
鸿蒙Flutter实战:02-Windows环境搭建踩坑指南
本指南介绍如何搭建鸿蒙Flutter开发环境,包括下载Flutter SDK、配置环境变量(如FLUTTER_STORAGE_BASE_URL、PUB_HOSTED_URL、DEVECO_SDK_HOME等)和检查工具版本。还提到避免项目路径过深、与SDK同盘存放等注意事项,以及解决VsCode无法识别设备的方法。
56 0
|
1月前
|
存储 调度 数据安全/隐私保护
鸿蒙Flutter实战:13-鸿蒙应用打包上架流程
鸿蒙应用打包上架流程包括创建应用、打包签名和上传应用。首先,在AppGallery Connect中创建项目、APP ID和元服务。接着,使用Deveco进行手动签名,生成.p12和.csr文件,并在AppGallery Connect中上传CSR文件获取证书。最后,配置签名并打包生成.app文件,上传至应用市场。常见问题包括检查签名配置文件是否正确。参考资料:[应用/服务签名](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-signing-V5)。
58 3
鸿蒙Flutter实战:13-鸿蒙应用打包上架流程
|
1月前
|
开发工具 芯片 开发者
鸿蒙Flutter实战:12-使用模拟器开发调试
本文介绍了如何在 M 系列芯片的 Mac 电脑上使用模拟器进行鸿蒙 Flutter 开发和调试。主要内容包括:创建 Flutter 项目、签名、创建模拟器、运行 Flutter 项目以及常见问题的解决方法。适用于希望在鸿蒙系统上开发 Flutter 应用的开发者。
46 2
鸿蒙Flutter实战:12-使用模拟器开发调试
|
1月前
|
IDE 开发工具
鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
本文介绍了如何使用 Flutter SDK 3.22.0 搭建鸿蒙开发环境。首先安装 Flutter SDK 3.22.0,并通过 FVM 管理多个版本。接着配置项目,使用 `fvm use custom_3.22.0` 设置自定义 SDK 版本。添加鸿蒙平台支持并进行项目签名,最后通过 `fvm flutter run` 运行项目。详细步骤包括安装、项目配置、签名和运行,确保开发环境顺利搭建。
92 7
鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
|
1月前
|
UED
<大厂实战经验> Flutter&鸿蒙next 中使用 initState 和 mounted 处理异步请求的详细解析
在 Flutter 开发中,处理异步请求是常见需求。本文详细介绍了如何在 `initState` 中触发异步请求,并使用 `mounted` 属性确保在适当时机更新 UI。通过示例代码,展示了如何安全地进行异步操作和处理异常,避免在组件卸载后更新 UI 的问题。希望本文能帮助你更好地理解和应用 Flutter 中的异步处理。
66 3
|
1月前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
109 1
|
2月前
|
开发者
鸿蒙Flutter实战:07-混合开发
鸿蒙Flutter混合开发支持两种模式:1) 基于har包,便于主项目开发者无需关心Flutter细节,但不支持热重载;2) 基于源码依赖,利于代码维护与热重载,需配置Flutter环境。项目结构包括AppScope、flutter_module等目录,适用于不同开发需求。
97 3
|
2月前
|
Web App开发 JavaScript 前端开发
鸿蒙Flutter实战:04-如何使用DevTools调试Webview
本文介绍如何在鸿蒙 Flutter 开发中调试 Webview,包括配置允许调试、找到 devtools 端口、开启端口转发、在 Chrome 中调试 Webview等。
36 0
鸿蒙Flutter实战:04-如何使用DevTools调试Webview
|
2月前
|
开发工具 Android开发 git
鸿蒙Flutter实战:01-搭建开发环境
本文介绍了如何搭建鸿蒙 Flutter 开发环境,包括安装 DevEco Studio 等工具,并详细说明了 Mac 和 Windows 系统下的环境变量配置。此外,还介绍了如何使用 FVM 管理多个 Flutter 版本,并提供了一些常见问题的解决方案和交流群信息。
116 0
鸿蒙Flutter实战:01-搭建开发环境