Android Studio运行出现Unsupported method: AndroidProject.getPluginGeneration() while running project

本文介绍如何通过禁用Android Studio中的InstantRun功能来解决代码热更新时出现的问题。针对不同操作系统,提供了详细的步骤指导。

这里写图片描述

原因是Instant Run的问题。

Windows & Linux:

File -> Settings -> Build, Execution, Deployment -> Instant Run.

Mac:

Android Studio -> Preferences -> Build, Execution, Deployment -> Instant Run.

这是效果图

把Enable Instant Run to hot swap code的勾去掉

<think>根据用户的问题,用户正在Flutter项目中使用WebSocket库时遇到了错误:'js_primitives.dart:28 Unsupported operation: Platform._version'。结合引用[1],这个错误通常发生在Flutter Web平台上,因为dart.io库中的某些操作在Web上不受支持。引用[1]提到,在Web端应该使用`HtmlWebSocketChannel.connect`而不是`IOWebSocketChannel.connect`。 因此,解决方案是检查代码中WebSocket通道的创建方式,并根据平台选择正确的实现。具体来说: - 对于非Web平台(Android、iOS等),使用`IOWebSocketChannel.connect`。 - 对于Web平台,使用`HtmlWebSocketChannel.connect`。 此外,可以使用条件编译来区分不同平台。Flutter支持使用`kIsWeb`常量来检查当前平台是否是Web。 下面是一个示例代码,展示如何根据平台创建不同的WebSocket通道: ```dart import 'package:flutter/foundation.dart'; // 引入kIsWeb import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:web_socket_channel/io.dart'; // 用于非Web平台 import 'package:web_socket_channel/html.dart'; // 用于Web平台 WebSocketChannel createWebSocketChannel(String url) { if (kIsWeb) { return HtmlWebSocketChannel.connect(url); } else { return IOWebSocketChannel.connect(url); } } ``` 然后在代码中使用`createWebSocketChannel`函数来创建WebSocket通道。 这样,在Web平台上就会使用`HtmlWebSocketChannel`,从而避免出现`Unsupported operation: Platform._version`错误。 另外,确保已正确添加`web_socket_channel`依赖到`pubspec.yaml`文件中: ```yaml dependencies: web_socket_channel: ^1.1.0 ``` 最后,运行`flutter pub get`以获取依赖。 总结步骤: 1. 在代码中使用条件编译(`kIsWeb`)选择正确的WebSocket通道实现。 2. 确保依赖中包含了`web_socket_channel`(版本至少1.1.0)。 如果按照上述步骤操作,应该可以解决该问题。 §§相关问题§§ 1. 如何在Flutter中根据平台编写不同的代码? 2. Flutter Web与其他平台在dart库支持上有何差异? 3. 除了WebSocket,还有哪些dart.io操作在Flutter Web上不受支持? </think> ### Flutter WebSocket报错 'js_primitives.dart:28 Unsupported operation: Platform._version' 解决方案 这个错误通常发生在 Flutter Web 平台使用 WebSocket 时,是由于尝试在 Web 环境中使用仅适用于原生平台(Android/iOS)的 `dart:io` 库导致的。以下是完整解决方案: #### 1. **问题原因分析** - 在 Flutter Web 中调用 `IOWebSocketChannel.connect()` 会触发 `dart:io` 的 `Platform` 类操作 - Web 平台不支持 `dart:io`,仅支持 `dart:html` 相关操作[^1] - 错误信息明确指向 `Platform._version` 操作不兼容 Web 环境 #### 2. **解决方案:平台适配 WebSocket 连接** 修改 WebSocket 连接代码,根据平台选择正确的实现: ```dart import 'package:flutter/foundation.dart'; // 引入kIsWeb import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:web_socket_channel/io.dart'; // 原生平台 import 'package:web_socket_channel/html.dart'; // Web平台 // 创建平台自适应的WebSocket连接 WebSocketChannel createWebSocketChannel(String url) { if (kIsWeb) { return HtmlWebSocketChannel.connect(url); // Web端专用 } else { return IOWebSocketChannel.connect(url); // Android/iOS端专用 } } // 使用示例 final channel = createWebSocketChannel('wss://yourserver.com'); channel.stream.listen((message) { print('Received: $message'); }); ``` #### 3. **关键修改说明** | 代码部分 | 作用说明 | |---------|---------| | `kIsWeb` | Flutter 提供的全局常量,自动检测当前平台 | | `HtmlWebSocketChannel` | 使用浏览器原生 WebSocket API(通过 `dart:html`) | | `IOWebSocketChannel` | 使用 Dart 的 I/O 库(仅支持原生平台) | #### 4. **依赖配置** 确保 `pubspec.yaml` 包含最新版 web_socket_channel: ```yaml dependencies: web_socket_channel: ^2.4.0 # 推荐使用最新版 ``` 运行 `flutter pub get` 更新依赖 #### 5. **验证与测试** ```dart // 测试代码 void main() { test('WebSocket connection', () { final channel = createWebSocketChannel('wss://echo.websocket.org'); channel.sink.add('Hello Flutter!'); expectLater(channel.stream, emits('Hello Flutter!')); }); } ``` #### 6. **注意事项** - **不要**在 Web 项目中导入 `dart:io` - 使用 `flutter clean` 清除缓存后再重新构建 - Web 平台需在安全源(HTTPS)下使用 WebSocket > **替代方案**:若需统一 API,可使用 [shelf_web_socket](https://pub.dev/packages/shelf_web_socket) 等跨平台封装库
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值