一、前言:为什么选择Flutter?
在正式开始之前,我们先了解一下为什么Flutter会成为跨平台开发的首选框架:
-
一次编写,多端运行:iOS、Android、Web、Desktop全支持
-
高性能:自绘引擎,媲美原生的60fps流畅体验
-
热重载:开发效率提升300%,实时看到修改效果
-
丰富的UI组件:Material和Cupertino两大设计体系
现在,让我们开始搭建开发环境吧!
二、环境搭建全攻略
2.1 系统要求
-
操作系统:Windows 10/11、macOS、Linux
-
磁盘空间:至少2.8GB可用空间
-
工具:Git、文本编辑器/IDE
2.2 Windows环境搭建步骤
步骤1:安装Flutter SDK
powershell
复制
下载
# 1. 下载Flutter SDK(建议使用国内镜像)
# 官方地址:https://flutter.dev/docs/get-started/install
# 国内镜像:https://flutter.cn/docs/get-started/install
# 2. 解压到指定目录,例如:C:\src\flutter
# 3. 将Flutter添加到环境变量PATH
# 右键"此电脑" -> 属性 -> 高级系统设置 -> 环境变量
# 在用户变量PATH中添加:C:\src\flutter\bin
步骤2:安装Android Studio(Android开发)
-
下载并安装 Android Studio
-
启动后安装Android SDK:
-
打开"SDK Manager"
-
勾选Android SDK(建议选择API 30以上)
-
勾选Android SDK Platform-Tools
-
勾选Android SDK Build-Tools
-
-
配置Android环境变量:
powershell
复制
下载
# 新增系统变量
ANDROID_HOME = C:\Users\你的用户名\AppData\Local\Android\Sdk
# 在PATH中添加
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\tools
%ANDROID_HOME%\emulator
步骤3:安装Visual Studio Code(推荐编辑器)
-
下载 VS Code
-
安装Flutter插件:
-
打开Extensions(Ctrl+Shift+X)
-
搜索并安装"Flutter"
-
搜索并安装"Dart"
-
2.3 macOS环境搭建
bash
复制
下载
# 1. 使用Homebrew安装(最简单的方式)
brew install --cask flutter
# 2. 或者手动下载
# 下载后解压到 ~/development/flutter
# 3. 配置环境变量
echo 'export PATH="$PATH:$HOME/development/flutter/bin"' >> ~/.zshrc
source ~/.zshrc
# 4. 安装Xcode(iOS开发必需)
# 从App Store安装Xcode
xcode-select --install
# 5. 同意Xcode协议
sudo xcodebuild -license accept
2.4 运行Flutter Doctor(环境检查)
打开终端/命令提示符,运行:
bash
复制
下载
flutter doctor
你会看到类似下面的输出,绿色对勾✅表示通过:
text
复制
下载
[✓] Flutter (Channel stable, 3.16.0, on macOS 14.0 23A344 darwin-arm64, locale zh-CN)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.0)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2022.3)
[✓] VS Code (version 1.84.0)
[✓] Connected device (2 available)
[!] HTTP Host Availability
✗ HTTP host https://maven.google.com/ is not reachable. Reason: An error occurred while checking the HTTP host
解决常见问题:
-
Android许可未接受 :运行
flutter doctor --android-licenses -
设备未连接:连接Android手机或启动模拟器
-
镜像配置问题(国内用户需要):
bash
复制
下载
# 设置国内镜像
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
# Windows用户可以在环境变量中添加
三、创建第一个Flutter应用
3.1 使用命令行创建项目
bash
复制
下载
# 1. 创建一个新的Flutter项目
flutter create my_first_app
# 2. 进入项目目录
cd my_first_app
# 3. 运行项目
# 连接Android手机或启动模拟器后运行:
flutter run
3.2 使用VS Code创建项目
-
打开VS Code,按
Ctrl+Shift+P -
输入 "Flutter: New Project"
-
选择 "Application"
-
输入项目名称:my_first_app
-
选择保存位置
-
按F5或点击运行按钮启动
3.3 项目结构详解
text
复制
下载
my_first_app/
├── android/ # Android原生代码
├── ios/ # iOS原生代码
├── lib/ # Flutter代码主目录
│ └── main.dart # 应用入口文件
├── test/ # 测试文件
├── pubspec.yaml # 项目配置文件(依赖管理)
└── README.md
四、理解第一个Flutter应用代码
打开 lib/main.dart,让我们分析默认生成的代码:
dart
复制
下载
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
4.1 代码解析
1. 入口函数 main()
dart
复制
下载
void main() {
runApp(const MyApp());
}
-
每个Flutter应用都需要一个
main()函数 -
runApp()将根Widget绑定到屏幕上
2. StatelessWidget 与 StatefulWidget
-
MyApp继承自StatelessWidget:静态界面 -
MyHomePage继承自StatefulWidget:有状态变化的界面
3. MaterialApp 和 Scaffold
-
MaterialApp:Material Design风格的应用框架 -
Scaffold:页面脚手架,提供AppBar、Body、FloatingActionButton等
4. 状态管理 setState()
dart
复制
下载
void _incrementCounter() {
setState(() {
_counter++;
});
}
-
调用
setState()通知框架状态已改变 -
框架会重新调用
build()方法重建界面
五、动手改造:创建你的第一个自定义应用
让我们修改代码,创建一个简单的登录界面:
dart
复制
下载
import 'package:flutter/material.dart';
void main() {
runApp(const MyFirstApp());
}
class MyFirstApp extends StatelessWidget {
const MyFirstApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '我的第一个Flutter应用',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: const LoginPage(),
);
}
}
class LoginPage extends StatefulWidget {
const LoginPage({super.key});
@override
State<LoginPage> createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
final TextEditingController _usernameController = TextEditingController();
final TextEditingController _passwordController = TextEditingController();
void _login() {
String username = _usernameController.text;
String password = _passwordController.text;
if (username.isNotEmpty && password.isNotEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('欢迎回来,$username!'),
duration: const Duration(seconds: 2),
),
);
} else {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('请输入用户名和密码'),
backgroundColor: Colors.red,
),
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('用户登录'),
centerTitle: true,
),
body: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 应用Logo
const Icon(
Icons.account_circle,
size: 80,
color: Colors.blue,
),
const SizedBox(height: 30),
// 用户名输入框
TextField(
controller: _usernameController,
decoration: const InputDecoration(
labelText: '用户名',
hintText: '请输入用户名',
prefixIcon: Icon(Icons.person),
border: OutlineInputBorder(),
),
),
const SizedBox(height: 20),
// 密码输入框
TextField(
controller: _passwordController,
obscureText: true,
decoration: const InputDecoration(
labelText: '密码',
hintText: '请输入密码',
prefixIcon: Icon(Icons.lock),
border: OutlineInputBorder(),
),
),
const SizedBox(height: 30),
// 登录按钮
SizedBox(
width: double.infinity,
height: 50,
child: ElevatedButton(
onPressed: _login,
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
),
child: const Text(
'登录',
style: TextStyle(fontSize: 18),
),
),
),
// 注册链接
TextButton(
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('跳转到注册页面'),
),
);
},
child: const Text('还没有账号?立即注册'),
),
],
),
),
);
}
}
六、热重载:开发效率的秘密武器
6.1 什么是热重载?
-
保存代码后立即看到变化
-
保持应用状态(比如输入框中的文字)
-
快速迭代UI设计
6.2 如何使用热重载?
-
在终端运行
flutter run -
在VS Code中按
F5运行 -
修改代码后:
-
终端中按
r键 -
VS Code中点击闪电图标⚡
-
保存文件自动热重载(需设置)
-
6.3 热重载 vs 热重启
-
热重载(Hot Reload):快速,保持状态
-
热重启 (Hot Restart):重置状态,按
R键
七、运行到不同设备
7.1 连接Android设备
bash
复制
下载
# 查看连接的设备
flutter devices
# 运行到指定设备
flutter run -d <设备ID>
7.2 启动Android模拟器
bash
复制
下载
# 查看可用模拟器
flutter emulators
# 启动模拟器
flutter emulators --launch <模拟器名称>
# 或者直接通过Android Studio启动
7.3 运行到iOS模拟器(仅macOS)
bash
复制
下载
# 启动iOS模拟器
open -a Simulator
# 运行Flutter应用
flutter run
八、常见问题解决
Q1: flutter doctor显示Android许可未接受
bash
复制
下载
flutter doctor --android-licenses
# 一直按y接受所有许可
Q2: 国内下载速度慢
bash
复制
下载
# 设置环境变量
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
Q3: 模拟器无法启动
-
确保已安装Intel HAXM(Intel CPU)
-
确保Hyper-V已禁用(Windows)
-
尝试重启电脑
Q4: iOS证书问题
-
确保Xcode已安装并打开过一次
-
确保Apple Developer账号配置正确
九、作业与实践
作业1:完成环境搭建
-
成功运行
flutter doctor且所有项目都是✅ -
创建并运行默认计数器应用
作业2:改造登录页面
在刚才创建的登录页面基础上:
-
添加"记住密码"复选框
-
添加"忘记密码"链接
-
修改主题颜色为绿色系
作业3:创建个人名片应用
创建一个显示个人信息的应用,包含:
-
头像(使用Icon或网络图片)
-
姓名、职位、联系方式
-
技能标签列表
-
一个"联系我"按钮
十、下一步学习建议
-
熟悉Dart语言:掌握基础语法和面向对象编程
-
理解Widget树:学习布局和组件的嵌套关系
-
尝试更多组件:按钮、列表、对话框等
-
查看官方文档 :https://flutter.dev/docs
恭喜你!你已经成功搭建了Flutter开发环境并创建了第一个应用。记住,学习Flutter最好的方式就是多动手实践。在下一课中,我们将深入学习Dart语言基础。