Flutter调试服务端口固定及热重载后获取WS URL问题咨询
关于Flutter Debug Service端口固定与热重载后获取URL的解决方案
好问题!我平时开发Flutter时也碰到过类似需求,来给你详细拆解:
一、能否固定Debug Service的端口?
当然可以!默认情况下Flutter会随机分配端口,但我们可以通过两种方式强制固定:
命令行启动时指定:直接在
flutter run命令后追加--debug-port参数,例如:flutter run --debug-port 58848这样每次启动都会复用58848端口,要是端口被其他进程占用,Flutter会直接抛出错误提示,换个未被占用的端口即可。
IDE配置固定端口:
- 如果你用VS Code,可以在项目的
.vscode/launch.json中添加debugPort字段:{ "version": "0.2.0", "configurations": [ { "name": "Flutter", "request": "launch", "type": "dart", "debugPort": 58848 } ] } - 用Android Studio的话,打开「Run/Debug Configurations」,找到你的Flutter项目配置,在「Debug port」输入框中填入58848即可。
- 如果你用VS Code,可以在项目的
二、热重载/热重启后获取Debug Service URL的方法
确实,热重载时控制台不会重新打印WS地址,这里有几个亲测好用的办法:
1. 在代码中主动获取并打印
这是最直接的方式,利用Flutter内置的dart:developer库,在App的build周期中添加逻辑:
import 'dart:developer' as developer; import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { // 页面渲染完成后获取并打印WS地址 WidgetsBinding.instance.addPostFrameCallback((_) { _fetchDebugWsUrl(); }); return MaterialApp( home: Scaffold(appBar: AppBar(title: const Text('Debug WS Demo'))), ); } void _fetchDebugWsUrl() async { final serviceInfo = await developer.Service.getInfo(); if (serviceInfo?.webSocketUri != null) { print('当前Debug Service WS地址: ${serviceInfo!.webSocketUri}'); } } }
热重载时build方法会重新执行,这段代码会自动打印最新的WS地址;热重启时自然也会触发。
2. 通过Flutter CLI命令获取
不想改代码的话,用终端命令也能拿到:
- 确保App已经在后台运行,执行:
这个命令会自动检测当前运行的Flutter应用,输出中会明确显示Debug Service的WS地址。查看完成后按flutter attachCtrl+C退出attach即可,不会影响App运行状态。
3. 查看Flutter本地日志文件
Flutter会把启动日志存在项目的.dart_tool/flutter_build目录下的日志文件里,不过这个方法比较繁琐,适合需要离线查看历史记录的场景。
内容的提问来源于stack exchange,提问作者TSR
相关产品推荐
相关产品推荐

