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

现代Dart(含空安全)中如何读取Chrome存储返回的JsObject?

解决Dart调用Chrome Storage API获取JsObject内部数据的问题

方法1:直接通过键访问取值

JsObject支持类似JavaScript对象的下标访问,你可以直接通过键名获取对应的值,再转换为匹配的Dart类型:

void _getCallback(dynamic stuff) {
  JsObject obj = stuff as JsObject;
  // 根据实际存储的数据类型转换,比如String、int、bool等
  String? targetValue = obj['r'] as String?;
  print('获取到的目标值:$targetValue');
}

方法2:用package:js封装API实现类型安全(推荐)

在现代Dart空安全环境下,更推荐通过package:js的注解封装Chrome Storage API,避免直接操作JsObject,让代码更清晰且类型可控:

先确保pubspec.yaml中依赖package:js:

dependencies:
  js: ^0.6.7 # 使用最新稳定版本

然后封装Chrome Storage相关接口:

import 'package:js/js.dart';

// 定义Storage get方法的回调类型
typedef StorageGetCallback = void Function(JsObject result);

// 绑定chrome.storage.local对象
@JS('chrome.storage.local')
external JsObject get chromeStorageLocal;

// 封装get方法
@JS()
external void get(List<String> keys, StorageGetCallback callback);

调用时的代码会更简洁,处理数据也更直观:

void fetchStorageData() {
  get(['r'], (JsObject result) {
    String? storedValue = result['r'] as String?;
    print('存储的值:$storedValue');
  });
}

方法3:将JsObject转换为Dart Map

如果需要查看JsObject的所有键值对,可以遍历其keys属性,转换为Dart原生Map:

void _getCallback(dynamic stuff) {
  JsObject obj = stuff as JsObject;
  Map<String, dynamic> dartMap = {};
  // 遍历所有键并转换为Dart Map
  for (var key in obj.keys) {
    dartMap[key as String] = obj[key];
  }
  print('完整的键值对:$dartMap');
  // 后续可像操作普通Map一样获取数据
  String? value = dartMap['r'] as String?;
}

内容的提问来源于stack exchange,提问作者Connor O'Leary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:15:36