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

Flutter开发Wake on Lan应用:魔术包生成类型错误求助

解决Flutter Wake on Lan魔术包生成的类型错误

错误原因分析

  1. 第一个类型错误:List<int>.generate(16, (_) => macBytes) 中,List<int>.generate强制要求闭包返回int类型,但你返回的是List<int>(macBytes),类型不匹配。
  2. 第二个类型错误:是第一个错误的连锁反应——由于generate生成的类型不符合预期,后续expand的参数类型推断混乱,导致报错。

修正后的代码

void sendMagicPacket(String macAddress, String subNetMask) async {
  final List<int> macBytes = macAddress.split(':').map((e) => int.parse(e, radix: 16)).toList();
  // 修正魔术包生成逻辑:先生成16次重复的macBytes列表,再展开为int集合,最后和6个0xFF拼接
  final List<int> packet = List<int>.filled(6, 0xFF) + 
                          List.generate(16, (_) => macBytes)
                              .expand((list) => list)
                              .toList();
  final RawDatagramSocket socket = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 0);
  socket.send(packet, InternetAddress(subNetMask), 9);
  socket.close();
}

关键修正点

  • 移除List<int>.generate中的<int>泛型约束,让Dart自动推断生成List<List<int>>类型(16个重复的macBytes列表)。
  • expand((list) => list)会将List<List<int>>展开为Iterable<int>,直接转换为列表后和前面的6个0xFF拼接,无需额外的cast<int>操作。

内容的提问来源于stack exchange,提问作者yomi4486

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:54:53