Boa noite! Sou novo na Alura e estou com uma duvida com um projeto pessoal. Gostaria de primeiro resolver esse ponto que está me prendendo de progredir nesse projeto, antes de iniciar todos os cursos do qual tenho interesse em fazer. Eu procurei pelo fórum e olhei algumas aulas que estão relacionadas a Model, porém não encontrei o que pudesse me ajudar.
Tenho esse Model
import 'dart:convert';
import 'package:lockpass/models/type_model.dart';
class ItensModel {
int? id;
TypeModel? type;
String? service;
String? email;
String? login;
String? password;
ItensModel({
this.id,
this.type,
this.service,
this.email,
this.login,
this.password,
});
ItensModel.empty():
id = 0,
type = TypeModel.empty(),
service = '',
email = '',
login = '',
password = '';
Map<String, dynamic> toMap() {
return <String, dynamic>{
'id': id,
'type': type?.toMap(),
'service': service,
'email': email,
'login': login,
'password': password,
};
}
factory ItensModel.fromMap(Map<String, dynamic> map) {
return ItensModel(
id: map['id'] != null ? map['id'] as int : null,
type: map['type'] != null ? TypeModel.fromMap(map['type'] as Map<String,dynamic>) : null,
service: map['service'] != null ? map['service'] as String : null,
email: map['email'] != null ? map['email'] as String : null,
login: map['login'] != null ? map['login'] as String : null,
password: map['password'] != null ? map['password'] as String : null,
);
}
String toJson() => json.encode(toMap());
factory ItensModel.fromJson(String source) => ItensModel.fromMap(json.decode(source) as Map<String, dynamic>);
@override
String toString() {
return 'ItensModel(id: $id, type: $type, service: $service, email: $email, login: $login, password: $password)';
}
}
E esse Model
import 'dart:convert';
// ignore_for_file: public_member_api_docs, sort_constructors_first
class TypeModel {
String? type;
bool? visible;
TypeModel({
this.type,
this.visible = false,
});
Map<String, dynamic> toMap() {
return <String, dynamic>{
'type': type,
'visible': visible,
};
}
factory TypeModel.fromMap(Map<String, dynamic> json) {
return TypeModel(
type: json['type'] != null ? json['type'] as String : null,
visible: json['visible'] != null ? json['visible'] as bool : null,
);
}
String toJson() => json.encode(toMap());
factory TypeModel.fromJson(String source) => TypeModel.fromMap(json.decode(source) as Map<String, dynamic>);
TypeModel.empty():
type = '',
visible = false;
@override
String toString() => 'TypeModel(type: $type, visible: $visible)';
}
Eu vou mostrar o conteúdo como lista e como agrupamento. Por isso do model para o "type", contendo o bool visible, a intenção é quando estiver no modo agrupamento, mostrar apenas os Type registrados, Exemplo: Cadastrei times de futebol e coloquei para mostrar por agrupamento de país, então devo ter: Argentina Brasil Paraguai
quando clico no país, terei a listagem referente aos times registrados desse país, exemplo: Cliquei na Argentina e terei Argentina -> Boca Juniors -> River Plate Brasil Paraguai
Agora que contextualizei a ideia, quando vou cadastrar informações, recebo o erro no campo type type 'String' is not a subtype of type 'Map<String, dynamic>'
Estou cadastrando informações de teste assim:
ItensModel i = ItensModel(
id: 27,
type: TypeModel(type: "Email"),
service: "Gmail",
email: "teste@teste.com",
login: "teste",
password: "12345",
);
Agradeço qualquer ajuda que possa me direcionar, inclusive de alguma aula específica dentro da plataforma. Obrigado!!!