使用Flutter get_server包出现The getter 'ws' isn't defined错误如何解决
问题排查与解决方案
错误产生原因
该报错来自get_server包的版本迭代差异:
- 你参考的示例是v0.1.2及更早版本的官方写法,从v0.2.0版本开始,get_server重构了WebSocket相关API,旧版本中
app.ws路由回调参数携带的ws属性已被移除,新版本的BuildContext类没有定义wsgetter,直接调用res.ws就会触发该错误。 - 你原有代码还遗漏了服务器启动的
app.start()方法调用,即使修复API问题也无法正常启动服务。
解决方法
方案1:适配新版本API(推荐)
无需降级依赖,直接修改代码适配新版API即可,新版app.ws的回调参数会直接返回WebSocket实例,不需要额外取ws属性和调用listen方法,修改后代码如下:
import 'package:get_server/get_server.dart'; void main() { final app = GetServer(); app.get('/', (ctx) => Text('Get_server of javascript way')); app.ws('/socket', (socket) { socket.onMessage((data) { print('data: $data'); }); socket.onOpen((ws) { print('new socket opened'); }); socket.onClose((ws) { print('socket has been closed'); }); }); // 启动服务器,默认端口为8080,可传入port参数自定义端口 app.start(); }
方案2:锁定旧版本依赖
如果你需要沿用原有写法,可在pubspec.yaml中将get_server的依赖版本锁定在0.1.2版本:
dependencies: get_server: ^0.1.2
修改后执行依赖刷新操作即可。
内容的提问来源于stack exchange,提问作者Akash khan
相关产品推荐
相关产品推荐

