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

Flutter:从Window对象获取自定义属性以检测MetaMask扩展

在Flutter Web中检测MetaMask扩展

核心思路

Flutter Web本质还是运行在浏览器环境里的,不用纠结Flutter自带的Window对象,直接调用浏览器的JS API就行——毕竟MetaMask是浏览器扩展,只会在浏览器环境中暴露window.ethereum属性。

具体实现

直接检测MetaMask(推荐方法)

用Flutter的dart:js库直接访问浏览器全局对象,判断ethereum是否存在:

import 'dart:js' as js;

bool checkMetaMaskInstalled() {
  return js.context.hasProperty('ethereum') && js.context['ethereum'] != null;
}

调用这个函数就能直接得到检测结果,原理是通过js.context对接浏览器的window对象,直接检查目标属性是否存在。

列出浏览器全局所有属性(针对你的需求)

如果确实需要遍历window上的所有属性,可以借助JS的Object.keys()方法,通过dart:js获取结果:

import 'dart:js' as js;

List<String> getAllWindowProperties() {
  var propertyKeys = js.context.callMethod('Object.keys', [js.context]);
  return List<String>.from(propertyKeys);
}

这个函数会返回浏览器window对象上所有可枚举的属性名列表,你可以从中查找是否包含ethereum。不过这种方法效率较低,专门检测MetaMask用上面的方法更直接。

额外补充

  • 确认ethereum存在后,还可以进一步验证是否是MetaMask:js.context['ethereum'].callMethod('isMetaMask'),返回布尔值。
  • dart:js仅在Flutter Web环境下有效,其他平台编译会报错,记得做好平台判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:17:44