我有一个通用的功能:
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的_dataClient框变成了蜂巢框,所以我得到了以下错误:
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必须将数据存储为不同的格式,但我如何解释这一点并消除此错误呢?
发布于 2020-12-25 05:21:13
试着使用
Map<String, dynamic>.from(dataClient.get(UserRegistrationFieldKeys.self))`;如果使用此方法,也可以删除泛型函数。
发布于 2020-12-25 06:57:00
这是因为_dataClient.get(keyToRead)函数返回_InternalLinkedHashMap<dynamic, dynamic>数据类型。当您将一个类型的Map<String, dynamic>分配给像这样的函数的输出:dataClient.get<Map<String, dynamic>>()时,这意味着您期望函数的输出是Map,而不是它,从而导致错误。
在本例中,您应该在获得该函数的输出后进行类型转换,如下所示:
@override
Map<String, dynamic> getUserRegistration() {
return Map<String, dynamic>.from(dataClient.get(UserRegistrationFieldKeys.self));
}发布于 2021-09-14 05:53:06
你可以试试这个:
Map<String, dynamic> map = yourHiveBox.get("key").cast<String, dynamic>();https://stackoverflow.com/questions/65444862
复制相似问题