Flutter 3.38.0 主要在语法简化、Web 支持增强、性能优化、控件交互改进及桌面端功能扩展等方面进行了更新,具体内容如下:
- Dot Shorthands (Dart 3.10 + Flutter 3.38 默认支持)
功能:允许开发者通过简写方式省略类型前缀,提升代码可读性。
示例:
dart
// 旧语法
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
);
Padding(padding: EdgeInsets.all(8.0));
// 新语法(Dot Shorthands)
Column(
mainAxisAlignment: .start, // 省略 MainAxisAlignment
crossAxisAlignment: .center,
);
Padding(padding: .all(8.0)); // 省略 EdgeInsets
意义:减少冗余代码,使布局和样式定义更简洁。
- Web 支持增强
配置文件支持:通过 web_dev_config.yaml 文件自定义 Web 开发服务器配置,包括主机、端口、证书、Headers 等。
yaml
server:
host: "0.0.0.0"
port: 8080
https:
cert-path: "/path/to/cert.pem"
cert-key-path: "/path/to/key.pem"
proxy:
- target: "http://localhost:5000/"
prefix: "/users/"
Hot Reload 改进:默认开启 Web 端 Hot Reload,支持多浏览器同时连接,提升开发效率。
代理设置:支持将请求转发到其他服务器,简化后端服务调试。
- 性能优化
图片加载优化:通过 ui.ImmutableBuffer.fromAsset 减少数据拷贝和垃圾回收(GC)压力,基准测试显示图片加载速度提升约 2 倍。
触控板手势改进:修复 Flutter 3.3 前版本中触控板滚动误触问题,现在能正确识别滚动事件,提升列表滑动体验。
- 控件与交互优化
OverlayPortal 控件:允许将子 Widget 渲染在任意 Overlay 上,通过 overlayChildLayoutBuilder 灵活控制浮层位置(如按钮下方、屏幕中心等)。
dart
OverlayPortal(
overlayChildLayoutBuilder: (context, info) {
return Material(
child: Container(padding: EdgeInsets.all(12), child: Text('浮层内容')),
);
},
child: ElevatedButton(onPressed: () => _controller.toggle(), child: Text('显示浮层')),
);
Android 后退手势转场:默认启用预测后退路由转场(Predictive Back),后退时显示当前界面预览。
页面转换动画更新:默认动画从 ZoomPageTransitionsBuilder 改为 FadeForwardsPageTransitionsBuilder,提升视觉流畅度。
- 桌面端功能扩展(Windows)
多显示器支持:通过 PlatformDispatcher.displays 获取所有连接显示器的分辨率、刷新率、物理尺寸等信息,增强多窗口模式能力。
dart
void printDisplayInfos() {
final platformDispatcher = WidgetsBinding.instance.platformDispatcher;
platformDispatcher.displays.forEach((display) {
print('Display: {display.size}');
});
}
- 废弃与迁移指南
废弃 API:
OverlayPortal.targetsRootOverlay
SemanticsProperties.focusable 和 SemanticsConfiguration.isFocusable
SnackBar 默认不再自动关闭(需手动处理)。
迁移建议:使用 dart fix 命令自动迁移代码,或参考官方文档调整废弃 API 的使用。
- 其他改进
CupertinoDynamicColor 宽色域支持:优化颜色显示效果。
Windows 版本设置:支持通过 pubspec.yaml 和构建参数配置版本,与其他平台行为一致。