微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型 'Map<dynamic, TOTPModel>' 的子类型 'kvPairs'

如何解决类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型 'Map<dynamic, TOTPModel>' 的子类型 'kvPairs'

我正在尝试找出 Flutter 中的 Hive 包。但是,它显示一个错误

错误说:“类型'_InternalLinkedHashMap'不是'kvPairs'的'Map'类型的子类型”

我正在使用带有 BLoC 模式的 Hive 包。

应用程序如下所示:

Image

代码

manual_input_bloc.dart

import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:dart_otp/dart_otp.dart';
import 'package:duckie/models/totp/totp_model.dart';
import 'package:hive/hive.dart';
import 'package:Meta/Meta.dart';

part 'manual_input_event.dart';
part 'manual_input_state.dart';

class ManualInputBloc extends Bloc<ManualInputEvent,ManualInputState> {
  ManualInputBloc() : super(ManualInputinitial());

  @override
  Stream<ManualInputState> mapEventToState(
    ManualInputEvent event,) async* {
    Box Box = await Hive.openBox<TOTPModel>('totpmodel');

    if (event is GetFormTextEvent) {
      if (event.secretKey == null ||
          event.issuer == null ||
          event.accountName == null) {
        yield ManualInputError(
            'all-fields-error-title','all-fields-error-content');
      } else {
        try {
          final TOTP totp = TOTP(
            secret: event.secretKey,digits: int.parse(event.numberOfDigits),interval: int.parse(event.timestep),);

          final String otp = totp.Now();

          Box.putAll({
            'otp': otp,'issuer': event.issuer,'accountName': event.accountName
          });

          print(Box.get('totpmodel'));

          yield ManualInputFinal(
            otp,event.issuer,event.accountName,);
        } catch (error) {
          yield ManualInputError('totp-fail-title','totp-fail-content');
          print(error.toString());
        }
      }
    }
  }
}

totp_model.dart

import 'package:hive/hive.dart';

part 'totp_model.g.dart';

@HiveType(typeId: 0)
class TOTPModel {
  @HiveField(0)
  String otp;

  @HiveField(1)
  String issuer;

  @HiveField(2)
  String accountName;

  TOTPModel(this.otp,this.issuer,this.accountName);
}

totp_model.g.dart

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'totp_model.dart';

// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************

class TOTPModelAdapter extends TypeAdapter<TOTPModel> {
  @override
  final int typeId = 0;

  @override
  TOTPModel read(BinaryReader reader) {
    final numOfFields = reader.readByte();
    final fields = <int,dynamic>{
      for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),};
    return TOTPModel(
      fields[0] as String,fields[1] as String,fields[2] as String,);
  }

  @override
  void write(BinaryWriter writer,TOTPModel obj) {
    writer
      ..writeByte(3)
      ..writeByte(0)
      ..write(obj.otp)
      ..writeByte(1)
      ..write(obj.issuer)
      ..writeByte(2)
      ..write(obj.accountName);
  }

  @override
  int get hashCode => typeId.hashCode;

  @override
  bool operator ==(Object other) =>
      identical(this,other) ||
      other is TOTPModelAdapter &&
          runtimeType == other.runtimeType &&
          typeId == other.typeId;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。