首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >'_InternalLinkedHashMap<dynamic,dynamic>‘不是类型类型Map<String,dynamic>的子类型

'_InternalLinkedHashMap<dynamic,dynamic>‘不是类型类型Map<String,dynamic>的子类型
EN

Stack Overflow用户
提问于 2020-12-25 02:54:40
回答 3查看 697关注 0票数 1

我有一个通用的功能:

代码语言:javascript
运行
复制
  ValueType get<ValueType>(String keyToRead) {
    try {
      return _dataClient.get(keyToRead) as ValueType;
    } on SocketException catch (error) {...

我这样叫它:

代码语言:javascript
运行
复制
  @override
  Map<String, dynamic> getUserRegistration() {
    return dataClient.get<Map<String, dynamic>>(UserRegistrationFieldKeys.self);
  }

但是,由于我从_dataClient的_dataClient框变成了蜂巢框,所以我得到了以下错误:

代码语言:javascript
运行
复制
The following ProviderException was thrown building LoggedOutPageView(dirty, dependencies: [UncontrolledProviderScope], state: _ConsumerState#6c90b):
An exception was thrown while building AutoDisposeProvider<RegisterViewModel>#00006().

Thrown exception:
type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>' in type cast

Stack trace:
#0      LocalDataClient.get
package:vepo/…/data_clients/local_data_client.dart:51
#1      UserRegistrationLocalDataSource.getUserRegistration
package:vepo/…/user_registration/user_registration_local_data_source.dart:22
#2      UserRegistrationRepository.getUserRegistration
package:vepo/…/user-registration/user_registration_repository.dart:31

由于加密,Hive必须将数据存储为不同的格式,但我如何解释这一点并消除此错误呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-25 05:21:13

试着使用

代码语言:javascript
运行
复制
Map<String, dynamic>.from(dataClient.get(UserRegistrationFieldKeys.self))`;

如果使用此方法,也可以删除泛型函数。

票数 3
EN

Stack Overflow用户

发布于 2020-12-25 06:57:00

这是因为_dataClient.get(keyToRead)函数返回_InternalLinkedHashMap<dynamic, dynamic>数据类型。当您将一个类型的Map<String, dynamic>分配给像这样的函数的输出:dataClient.get<Map<String, dynamic>>()时,这意味着您期望函数的输出是Map,而不是它,从而导致错误。

在本例中,您应该在获得该函数的输出后进行类型转换,如下所示:

代码语言:javascript
运行
复制
 @override
  Map<String, dynamic> getUserRegistration() {
    return Map<String, dynamic>.from(dataClient.get(UserRegistrationFieldKeys.self));
  }
票数 1
EN

Stack Overflow用户

发布于 2021-09-14 05:53:06

你可以试试这个:

代码语言:javascript
运行
复制
Map<String, dynamic> map = yourHiveBox.get("key").cast<String, dynamic>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65444862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档