如何在Flutter中以编程方式检测Hot Restart?
在Flutter中检测并处理Hot Restart
方法1:监听Flutter服务扩展事件
Hot Restart会触发ext.flutter.restart服务扩展调用,可通过dart:developer包监听该事件,在重启前执行清理操作:
import 'dart:developer' as developer; import 'package:flutter/material.dart'; void main() { // 注册Hot Restart监听 developer.Service.getInfo().then((serviceInfo) { if (serviceInfo.serverUri != null) { developer.Service.registerExtension( 'ext.flutter.restart', (methodName, parameters) async { // 执行Hot Restart前的蓝牙断开操作 if (user.equipment != null && user.equipment!.isConnected()) { print("断开蓝牙设备(Hot Restart触发)"); user.equipment!.disconnectDevice(); } return null; }, ); } }); runApp(const MyApp()); }
方法2:利用Dart Finalizer自动清理
Dart 2.14+引入的Finalizer可在对象被垃圾回收时执行回调,Hot Restart会重启VM,所有对象都会被回收,因此可以用它自动断开蓝牙连接:
import 'dart:core'; import 'package:flutter/material.dart'; // 定义用于清理的Finalizer final Finalizer<Equipment> _equipmentFinalizer = Finalizer((equipment) { if (equipment.isConnected()) { print("通过Finalizer断开蓝牙设备"); equipment.disconnectDevice(); } }); // 创建设备对象时绑定Finalizer void setupEquipment() { user.equipment = Equipment(); _equipmentFinalizer.attach(user.equipment!, user.equipment!); }
补充说明
- 以上方法仅适用于调试环境,发布版不会触发Hot Restart,无需保留相关逻辑。
reassemble方法仅对Hot Reload生效,Hot Restart会直接重启VM,因此无法通过该方法捕获。
内容的提问来源于stack exchange,提问作者bulgarian-beast
相关产品推荐
相关产品推荐

