You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:05:25