Flutter 环境搭建
以 MacOS 为例,介绍 Flutter 基础环境的搭建。
1. 安装 Flutter SDK
1.1 下载 Flutter SDK
1.2 配置 Flutter 环境变量
- 配置 Flutter 环境变量,将 Flutter SDK 的
bin
目录添加到系统的PATH
环境变量中。
sh
export PATH=$PATH:/Users/flingyp/Desktop/Flutter_Env/flutter_3.10.3/bin
export PUB_HOSTED_URL=https://pub.flutter-io.cn # 配置国内镜像(加速下载)
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn # 配置国内镜像(加速下载)
1.3 运行 Flutter doctor
- 打开终端,运行
flutter doctor
命令,检查 Flutter 环境是否配置正确。
2. 安装 Android Studio
- 确保安装了 Java 环境(需要在 Java17 以上版本)
- 创建安卓模拟器
3. VS Code 插件配置
之后就可以使用 VS Code 进行开发 Flutter 项目了
- Flutter
- Flutter Widget Snippets
Flutter 初始项目解读
txt
├── lib/ # Dart源代码目录
│ ├── main.dart # 应用程序入口点,包含主要业务逻辑
│
├── android/ # Android平台相关文件
│ ├── app/ # Android应用程序目录
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml # Android应用配置文件
│ │ │ │ └── kotlin/ # Kotlin源代码目录
│ │ │ │ └── MainActivity.kt # Android主活动
│
├── ios/ # iOS平台相关文件
│ ├── Runner/ # iOS应用程序目录
│ │ ├── AppDelegate.swift # iOS应用委托
│ │ ├── Info.plist # iOS应用配置文件
│
├── test/ # 测试目录
│ └── widget_test.dart # Widget测试示例
│
├── web/ # Web平台相关文件
│ ├── index.html # Web入口HTML文件
│ └── manifest.json # Web应用配置文件
│
├── pubspec.yaml # 项目依赖配置文件
└── README.md # 项目说明文档
main.dart
入口文件
dart
import 'package:flutter/material.dart';
void main() {
// 这是应用程序的入口点,runApp函数接收一个widget作为参数,它将成为widget树的根。
runApp(const MyApp());
}
// MyApp是一个StatelessWidget(无状态组件)
// 它设置了应用的基本主题和整体结构
// MaterialApp 是一个重要的widget,提供了许多Material Design的基础功能
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 Page22'),
);
}
}
// 主页面 (MyHomePage) MyHomePage是一个StatefulWidget(有状态组件)
// 状态组件分为两个部分:MyHomePage:定义组件的配置、_MyHomePageState:维护组件的状态
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// _counter是一个状态变量
int _counter = 0;
// setState用于更新状态,每次调用都会触发重建(rebuild)
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),
),
);
}
}