Flutter Web 核心优势
Flutter Web 允许使用同一套代码库构建 Android、iOS 和 Web 应用,在保持高性能的同时提供一致的用户体验。对于追求像素级还原的 UI 开发者来说,跨平台方案往往意味着妥协,但 Flutter 在这方面表现相当出色。
环境搭建
启用 Web 支持
首先需要确保 Flutter SDK 已开启 Web 支持。执行以下命令检查设备并创建项目:
flutter config --enable-web
flutter devices
flutter create my_web_app
cd my_web_app
flutter run -d chrome
项目结构
一个标准的 Flutter Web 项目通常包含以下目录结构,便于管理不同平台的逻辑:
my_web_app/
├── lib/
│ ├── main.dart # 主入口
│ ├── home_screen.dart # 主屏幕
│ ├── components/ # 组件
│ ├── services/ # 服务层
│ └── web/ # Web 特定文件
├── web/
│ ├── index.html # HTML 入口
│ └── manifest.json # PWA 配置
├── icons/ # 图标资源
└── pubspec.yaml # 依赖配置
基础实现
简单的 Web 应用
创建一个基础的计数器应用是理解 Flutter 状态管理的起点。注意 setState 的使用时机,它负责触发 UI 重绘。
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 Web Demo',
theme: ThemeData(primarySwatch: Colors.blue),
home: const HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Flutter Web Demo')),
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.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}

