## 1.3 第一个Flutter程序
万事开头难,我们用Hello World来看一个最简单的Flutter工程,具体步骤如下。
步骤1:新建一个Flutter工程,选择Flutter Application,如图1-21所示。
![](https://box.kancloud.cn/b9fdc2647ed2073728d3b1d0b559485b_1038x872.jpeg)
图1-21 新建工程
步骤2:点击Next按钮,打开应用配置界面,其中在Project name中填写helloworld,Flutter SDK path使用默认值,IDE会根据SDK安装路径自动填写,Project location填写为工程放置的目录,在Description中填写项目描述,任意字符即可,如图1-22所示。
![](https://box.kancloud.cn/d2208cfd86e59766fe5ea42bf430af29_1038x872.jpeg)
图1-22 配置Flutter工程
步骤3:点击Next按钮,打开包设置界面,在Company domain中填写域名,注意域名要反过来写,这样可以保证全球唯一,Platform channel language下面的两个选项不需要勾选,如图1-23所示。
![](https://box.kancloud.cn/c8fb4ab8ec9ec83600011a8b757c676a_643x543.jpeg)
图1-23 设置包名界面
步骤4:点击Finish按钮开始创建第一个工程,等待几分钟,会创建如图1-24所示工程。
![](https://box.kancloud.cn/f1431382a916343fd8e8420e8b5985bb_1038x633.jpeg)
图1-24 示例工程主界面
步骤5:工程建好后,可以先运行一下看看根据官方创建的示例运行的效果,点击Open iOS Simulator打开iOS模拟器,具体操作如图1-25所示。
![](https://box.kancloud.cn/1d5562d751c9ea63707a73bdf35401c4_1038x666.jpeg)
图1-25 打开模拟器菜单示意图
步骤6:等待几秒钟后会打开模拟器,如图1-26所示。
![](https://box.kancloud.cn/79ca1a74f83c786b1f83c92d37609f99_1038x1066.jpeg)
图1-26 模拟器启动完成图
步骤7:点击debug(调试)按钮,启动官方示例程序,点击+号按钮,可以自动加1,此示例是一个基于Material Design风格的应用程序,如图1-27所示。
![](https://box.kancloud.cn/7a2c22f5723cb7a6a08000e8ee281427_628x1234.jpeg)
图1-27 官方示例运行效果图
步骤8:接下来我们打开工程目录下的main.dart文件,清空main.dart代码,如图1-28箭头所指。
![](https://box.kancloud.cn/cb9475539dc89b0eff2c200025e3606f_1038x599.jpeg)
图1-28 打开main.dart文件
步骤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所示。
![](https://box.kancloud.cn/bff2acfc2873ad54f8bb97e8aae58ea2_628x1234.jpeg)
图1-29 Hello World运行效果图
- 前言
- 第1章 开启Flutter之旅
- 1.1 Flutter的特点与核心概念
- 1.1.1 一切皆为组件
- 1.1.2 组件嵌套
- 1.1.3 构建Widget
- 1.1.4 处理用户交互
- 1.1.5 什么是状态
- 1.1.6 分层的框架
- 1.2 开发环境搭建
- 1.2.1 Windows环境搭建
- 1.2.2 MacOS环境搭建
- 1.3 第一个Flutter程序
- 第2章 Flutter基础知识
- 2.1 入口程序
- 2.2 Material Design设计风格
- 2.3 Flutter主题
- 2.3.1 创建应用主题
- 2.3.2 局部主题
- 2.3.3 使用主题
- 2.4 无状态组件和有状态组件
- 2.5 使用包资源
- 2.6 Http请求
- 第3章 Dart语言简述
- 3.1 Dart重要概念与常用开发库
- 3.2 变量与基本数据类型
- 3.3 函数
- 3.4 运算符
- 3.5 流程控制语句
- 3.6 异常处理
- 3.7 面向对象
- 3.7.1 实例化成员变量
- 3.7.2 构造函数
- 3.7.3 读取和写入对象
- 3.7.4 重载操作
- 3.7.5 继承类
- 3.7.6 抽象类
- 3.7.7 枚举类型
- 3.7.8 Mixins
- 3.8 泛型
- 3.9 库的使用
- 3.10 异步支持
- 3.11 元数据
- 3.12 注释
- 第4章 常用组件
- 4.1 容器组件
- 4.2 图片组件
- 4.3 文本组件
- 4.4 图标及按钮组件
- 4.4.1 图标组件
- 4.4.2 图标按钮组件
- 4.4.3 凸起按钮组件
- 4.5 列表组件
- 4.5.1 基础列表组件
- 4.5.2 水平列表组件
- 4.5.3 长列表组件
- 4.5.4 网格列表组件
- 4.6 表单组件
- 第5章 Material Design风格组件
- 5.1 App结构和导航组件
- 5.1.1 MaterialApp(应用组件)
- 5.1.2 Scaffold(脚手架组件)
- 5.1.3 AppBar(应用按钮组件)
- 5.1.4 BottomNavigationBar(底部导航条组件)
- 5.1.5 TabBar(水平选项卡及视图组件)
- 5.1.6 Drawer(抽屉组件)
- 5.2 按钮和提示组件
- 5.2.1 FloatingActionButton(悬停按钮组件)
- 5.2.2 FlatButton(扁平按钮组件)
- 5.2.3 PopupMenuButton(弹出菜单组件)
- 5.2.4 SimpleDialog(简单对话框组件)
- 5.2.5 AlertDialog(提示对话框组件)
- 5.2.6 SnackBar(轻量提示组件)
- 5.3 其他组件
- 5.3.1 TextField(文本框组件)
- 5.3.2 Card(卡片组件)
- 第6章 Cupertino风格组件
- 6.1 CupertinoActivityIndicator组件
- 6.2 CupertinoAlertDialog对话框组件
- 6.3 CupertinoButton按钮组件
- 6.4 Cupertino导航组件集
- 第7章 页面布局
- 7.1 基础布局处理
- 7.1.1 Container(容器布局)
- 7.1.2 Center(居中布局)
- 7.1.3 Padding(填充布局)
- 7.1.4 Align(对齐布局)
- 7.1.5 Row(水平布局)
- 7.1.6 Column(垂直布局)
- 7.1.7 FittedBox(缩放布局)
- 7.1.8 Stack/Alignment
- 7.1.9 Stack/Positioned
- 7.1.10 IndexedStack
- 7.1.11 OverflowBox溢出父容器显示
- 7.2 宽高尺寸处理
- 7.2.1 SizedBox(设置具体尺寸)
- 7.2.2 ConstrainedBox(限定最大最小宽高布局)
- 7.2.3 LimitedBox(限定最大宽高布局)
- 7.2.4 AspectRatio(调整宽高比)
- 7.2.5 FractionallySizedBox(百分比布局)
- 7.3 列表及表格布局
- 7.3.1 ListView
- 7.3.2 GridView
- 7.3.3 Table
- 7.4 其他布局处理
- 7.4.1 Transform(矩阵转换)
- 7.4.2 Baseline(基准线布局)
- 7.4.3 Offstage(控制是否显示组件)
- 7.4.4 Wrap(按宽高自动换行布局)
- 7.5 布局综合示例
- 7.5.1 布局分析
- 7.5.2 准备素材
- 7.5.3 编写代码
- 第8章 手势
- 8.1 用GestureDetector进行手势检测
- 8.2 用Dismissible实现滑动删除
- 第9章 资源和图片
- 9.1 添加资源和图片
- 9.1.1 指定assets
- 9.1.2 加载assets
- 9.1.3 平台assets
- 9.2 自定义字体
- 第10章 路由及导航
- 10.1 页面跳转基本使用
- 10.2 页面跳转发送数据
- 10.3 页面跳转返回数据
- 第11章 组件装饰和视觉效果
- 11.1 Opacity(透明度处理)
- 11.2 DecoratedBox(装饰盒子)
- 11.3 RotatedBox(旋转盒子)
- 11.4 Clip(剪裁处理)
- 11.5 案例——自定义画板
- 第12章 动画
- 12.1 用AnimatedOpacity实现渐变效果
- 12.2 用Hero实现页面切换动画
- 第13章 Flutter插件开发
- 13.1 新建插件
- 13.2 运行插件
- 13.3 示例代码分析
- 第14章 开发工具及使用技巧
- 14.1 IDE集成开发环境
- 14.1.1 Android Studio/IntelliJ
- 14.1.2 Visual Studio Code
- 14.2 Flutter SDK
- 14.3 使用热重载
- 14.4 格式化代码
- 14.5 Flutter组件检查器
- 第15章 测试与发布应用
- 15.1 测试应用
- 15.1.1 简介
- 15.1.2 单元测试
- 15.1.3 Widget测试
- 15.1.4 集成测试
- 15.2 发布Android版App
- 15.2.1 检查App Manifest
- 15.2.2 查看构建配置
- 15.2.3 添加启动图标
- 15.2.4 App签名
- 15.2.5 构建发布版APK并安装在设备上
- 15.3 发布iOS版App
- 15.3.1 准备工作
- 15.3.2 在iTunes Connect上注册应用程序
- 15.3.3 注册一个Bundle ID
- 15.3.4 在iTunes Connect上创建应用程序记录
- 15.3.5 查看Xcode项目设置
- 15.3.6 添加应用程序图标
- 15.3.7 准备发布版本
- 15.3.8 将应用发布到App Store
- 第16章 综合案例——即时通讯App界面实现
- 16.1 项目介绍
- 16.2 项目搭建
- 16.2.1 新建项目
- 16.2.2 添加源码目录及文件
- 16.3 入口程序
- 16.4 加载页面
- 16.5 应用页面
- 16.6 搜索页面
- 16.6.1 布局拆分
- 16.6.2 请求获取焦点
- 16.6.3 自定义TouchCallBack组件
- 16.6.4 返回文本组件
- 16.6.5 组装实现搜索页面
- 16.7 聊天页面
- 16.7.1 准备聊天消息数据
- 16.7.2 聊天消息列表项实现
- 16.7.3 聊天消息列表实现
- 16.8 好友页面
- 16.8.1 准备好友列表数据
- 16.8.2 好友列表项实现
- 16.8.3 好友列表头实现
- 16.8.4 ContactSiderList类
- 16.8.5 Contacts类
- 16.9 我的页面
- 16.9.1 通用列表项实现
- 16.9.2 Personal类