前言
2015.6的Google I/O大会公开介绍了Flutter。2017.5正式发布首个Alpha版本,2018.12发布1.0版本。flutter为了尽快推出产品、减少开销、缩短开发周期、提高开发效率。Flutter3的发布实现了对6大主要平台支持Android、iOS、Windows、Web、macOS(新增)、Linux(新增)。
// material UI组件
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
// 没有状态的Widget
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'AppBar title'),
);
}
}
// 有状态的组件;key:确定widget在widget树中唯一性,super.key表示从父类继承
// title:构建ui需要的数据
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() {
// StatefulWidget 提供的函数,通知Flutter框架有状态发生改变
setState(() {
_counter++;
});
}
void _decrementCounter() {
setState(() {
_counter--;
});
}
// 第一次创建或者状态发生改变时,Flutter框架会自动调用此方法。
// 避免在这里进行耗时操作:网络请求,大量计算等
@override
Widget build(BuildContext context) {
// Scaffold 页面脚手架
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: Column(
// 底部
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton.extended(
onPressed: _incrementCounter,
tooltip: 'Increment',
icon: const Icon(Icons.add),
label:const Text('Increment'),
),
const SizedBox(height: 10),
FloatingActionButton.extended(
onPressed: _decrementCounter,
icon: const Icon(Icons.remove),
label:const Text('Decrement'),
),
],
),
);
}
}
项目结构
.dart_tool/ Flutter自动生成的配置和构建输出,一般不需要开发者去修改
.idea/ IDEA的配置信息
android/ Android原生项目文件
build/ 存放构建产物的文件夹
ios/ iOS原生项目文件夹
lib/ ⭐存放Flutter源代码,大部分开发者会在这个目录下进行
lib/main.dart ⭐Flutter应用程序的主要入口
linux/ linux平台相关代码以及配置文件
macos/ mac平台相关代码以及配置文件
test/ 测试文件
web/ web平台相关代码以及配置文件
windows/ windows平台相关代码以及配置文件
.metadata Dart编译器生成的元数据文件,包含有关项目的编译和依赖,metadata报错?报错直接删除让Dart重新编译
analysis_options.yaml 配置静态代码分析工具,可定义代码风格、禁用和启用特定警告和错误检查
hello_flutter.iml IntelliJ IDEA项目文件,描述模块项目和依赖项,及其他配置信息,用于确保项目可以在IntelliJ IDEA或AndroidStudio中正确加载和编译
pubspec.lock 项目依赖项的锁定信息,由pubspec.yaml自动生成,确保项目在不同环境使用相同的依赖项版本。
pubspec.yaml ⭐Flutter项目配置文件,依赖、插件、资源等。
pubspec.yaml文件,项目的配置文件:
name: flutter4 # 项目名称
description: "A new Flutter project." #项目描述
publish_to: 'none' # 防止上传到pub.dev 类似于maven
version: 1.0.0+1 # 版本号 版本名字 +1 是第一个版本
environment: # 程序所需要的环境
sdk: '>=3.3.4 <4.0.0' # 程序dart SDK的版本范围
dependencies: # 程序依赖的外部库
flutter:
sdk: flutter
cupertino_icons: ^1.0.6
http: ^1.1.0 # 添加http依赖
dev_dependencies: # 开发时的依赖包,一般时测试框架之类
flutter_test:
sdk: flutter
flutter_lints: ^3.0.0
flutter: # flutter特定字段,比如配置
uses-material-design: true # 是否启用Material Design 风格
assets:
- assets/