简介:本文聚焦Flutter学习首日核心内容,涵盖环境搭建、Dart语言特性解析及Canvas基础绘图实现,为开发者提供系统性入门指导。
Flutter开发环境的搭建需兼顾跨平台特性与性能优化需求。建议采用以下配置方案:
flutter doctor命令验证环境完整性,重点关注:
flutter doctor -v# 输出示例:# [✓] Flutter (Channel stable, 3.16.0)# [✓] Android toolchain - develop for Android devices# [✓] Chrome - develop for the web
新建项目flutter_demo后,关键目录作用如下:
lib/main.dart:应用入口文件,包含MaterialApp根组件android/:原生Android工程配置(含Gradle文件)ios/:原生iOS工程配置(需Xcode支持)pubspec.yaml:依赖管理文件,示例配置:
dependencies:flutter:sdk: fluttercupertino_icons: ^1.0.6dev_dependencies:flutter_test:sdk: flutter
Dart作为Flutter的官方语言,在语法设计上融合了静态类型与动态特性:
int count = 0; // 静态类型var name = 'Flutter'; // 类型推断dynamic value; // 动态类型(慎用)
函数式特性:支持高阶函数与箭头语法
// 传统写法int add(int a, int b) {return a + b;}// 箭头函数int add(int a, int b) => a + b;
Dart的类系统具有独特设计:
构造函数:支持命名构造与工厂模式
class Point {final double x, y;// 主构造Point(this.x, this.y);// 命名构造Point.origin() : x = 0, y = 0;// 工厂模式factory Point.fromJson(Map<String, dynamic> json) {return Point(json['x'], json['y']);}}
Mixin机制:实现多继承效果
mixin Logger {void log(String msg) => print('LOG: $msg');}class MyClass with Logger {// 可直接调用log方法}
Dart的异步处理基于Future和Stream:
Future链式调用:
Future<String> fetchData() async {final response = await http.get(Uri.parse('https://api.example.com'));return response.body;}// 使用示例fetchData().then((data) => print(data)).catchError((e) => print('Error: $e'));
Stream处理:
Stream<int> countStream(int max) async* {for (int i = 0; i < max; i++) {await Future.delayed(Duration(seconds: 1));yield i;}}// 订阅示例countStream(5).listen((data) => print(data));
Flutter的Canvas绘图通过CustomPaint和CustomPainter实现:
class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {final paint = Paint()..color = Colors.blue..strokeWidth = 5..style = PaintingStyle.stroke;// 绘制矩形canvas.drawRect(Rect.fromLTWH(50, 50, 200, 100),paint);// 绘制圆形canvas.drawCircle(Offset(150, 200),50,paint..color = Colors.red);}@overridebool shouldRepaint(covariant CustomPainter oldDelegate) => false;}
复杂图形可通过Path类实现:
void paintPath(Canvas canvas, Size size) {final path = Path()..moveTo(50, 50)..lineTo(150, 50)..quadraticBezierTo(200, 0, 250, 50)..lineTo(250, 150)..close();canvas.drawPath(path,Paint()..color = Colors.green..style = PaintingStyle.fill);}
结合AnimationController实现动态绘图:
class AnimatedCircle extends StatefulWidget {@override_AnimatedCircleState createState() => _AnimatedCircleState();}class _AnimatedCircleState extends State<AnimatedCircle>with SingleTickerProviderStateMixin {late AnimationController _controller;late Animation<double> _animation;@overridevoid initState() {super.initState();_controller = AnimationController(duration: Duration(seconds: 2),vsync: this,)..repeat(reverse: true);_animation = Tween<double>(begin: 50, end: 150).animate(_controller);}@overrideWidget build(BuildContext context) {return AnimatedBuilder(animation: _animation,builder: (context, child) {return CustomPaint(size: Size(300, 300),painter: CirclePainter(_animation.value),);},);}@overridevoid dispose() {_controller.dispose();super.dispose();}}class CirclePainter extends CustomPainter {final double radius;CirclePainter(this.radius);@overridevoid paint(Canvas canvas, Size size) {canvas.drawCircle(Offset(size.width / 2, size.height / 2),radius,Paint()..color = Colors.purple);}@overridebool shouldRepaint(covariant CirclePainter oldDelegate) =>oldDelegate.radius != radius;}
analyzer:strong-mode:implicit-casts: falseimplicit-dynamic: false
debugPaintSizeEnabled可视化布局
void main() {debugPaintSizeEnabled = true;runApp(MyApp());}
性能基准:建立Canvas绘制的FPS监控机制
class FPSMonitor extends StatefulWidget {@override_FPSMonitorState createState() => _FPSMonitorState();}class _FPSMonitorState extends State<FPSMonitor> {int _frameCount = 0;double _fps = 0;DateTime? _lastTime;@overrideWidget build(BuildContext context) {_frameCount++;final now = DateTime.now();if (_lastTime == null || now.difference(_lastTime!) >= Duration(seconds: 1)) {setState(() {_fps = _frameCount.toDouble();_frameCount = 0;_lastTime = now;});}return Text('FPS: ${_fps.toStringAsFixed(1)}');}}
本日学习应重点掌握:Flutter项目的基础架构、Dart语言的核心特性(特别是异步编程)、以及Canvas绘图的基本方法。建议通过实际项目(如绘制动态图表)巩固知识,同时关注官方文档的更新(当前稳定版为3.16.0)。明日将深入讲解Widget生命周期与状态管理。