Flutter开发Wake on Lan应用:魔术包生成类型错误求助
解决Flutter Wake on Lan魔术包生成的类型错误
错误原因分析
- 第一个类型错误:
List<int>.generate(16, (_) => macBytes)中,List<int>.generate强制要求闭包返回int类型,但你返回的是List<int>(macBytes),类型不匹配。 - 第二个类型错误:是第一个错误的连锁反应——由于
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
相关产品推荐
相关产品推荐

