【问题标题】:'_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>' in type cast'_InternalLinkedHashMap<dynamic, dynamic>' 不是类型转换中的 'Map<String, dynamic>' 类型的子类型
【发布时间】:2021-04-03 07:00:04
【问题描述】:

我有这个通用函数:

  ValueType get<ValueType>(String keyToRead) {
    try {
      return _dataClient.get(keyToRead) as ValueType;
    } on SocketException catch (error) {...

我这样称呼它:

  @override
  Map<String, dynamic> getUserRegistration() {
    return dataClient.get<Map<String, dynamic>>(UserRegistrationFieldKeys.self);
  }

但由于我将 _dataClient 的 get_storage 框更改为 hive 框,我收到此错误:

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 必须将数据存储为不同的格式,这可能是由于加密的原因,但我该如何解决这个问题并消除此错误?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    你可以试试这个:

    Map<String, dynamic> map = yourHiveBox.get("key").cast<String, dynamic>();
    

    【讨论】:

      【解决方案2】:

      这是因为您的 _dataClient.get(keyToRead) 函数返回一个 _InternalLinkedHashMap&lt;dynamic, dynamic&gt; 数据类型。当您将类型 Map&lt;String, dynamic&gt; 分配给函数的输出时,如下所示:dataClient.get&lt;Map&lt;String, dynamic&gt;&gt;(),这意味着您期望函数的输出是 Map 而不是,从而导致错误。

      在这种情况下,您应该获得该函数的输出后进行类型转换,例如:

       @override
        Map<String, dynamic> getUserRegistration() {
          return Map<String, dynamic>.from(dataClient.get(UserRegistrationFieldKeys.self));
        }
      

      【讨论】:

        【解决方案3】:

        尝试使用

        Map<String, dynamic>.from(dataClient.get(UserRegistrationFieldKeys.self))`;
        

        如果你使用这个,你也可以删除通用函数。

        【讨论】:

          猜你喜欢
          • 2018-12-14
          • 2020-03-03
          • 2019-04-03
          • 1970-01-01
          • 2019-08-28
          • 2019-05-02
          • 2019-09-21
          • 1970-01-01
          • 2021-10-23
          相关资源
          最近更新 更多