Quando uso Flutter(dart) para desenvolver um aplicativo de plataforma no Android Studio, quero encapsular um json geral para qualquer tipo List tool( _fromJsonList
). Abaixo está minha função de conversão de nível mais baixo e código de definição de tipo.
// services/api_service.dart
import 'package:dio/dio.dart';
import 'package:myapp/models/Common.dart';
import 'dart:convert';
import 'package:logging/logging.dart';
class ApiService {
static final ApiService instance = ApiService._internal();
……somecode
// parse JsonList to List<T>
List<T> _fromJsonList<T extends BaseData>(dynamic data, T entity) {
if (data != null && data is List) {
return data.map((e) {
if (e is Map<String, dynamic>) {
return entity.fromJson(e);
} else {
return e as T;
}
}).toList() as List<T>;
} else {
return [];
}
}
}
class ApiResult<T> {
……
}
abstract class BaseData {
BaseData fromJson(Map<String, dynamic> json);
}
class CommonOption extends BaseData {
String label;
String value;
CommonOption({required this.label, required this.value});
factory CommonOption.fromJson(Map<String, dynamic> json) {
return CommonOption(
label: json['label'],
value: json['value'],
);
}
@override
BaseData fromJson(Map<String, dynamic> json) {
return CommonOption(
label: json['label'],
value: json['value'],
);
}
}
Função de chamada:
Future<List<CommonOption>> getCategoryList() async {
return await ApiService.instance.getList<CommonOption>(
'/category/getCategoryList', CommonOption(label: "", value: ""));
}
Quando eu uso as T
a conversão de tipo na função de conversão, ele mostra um aviso amarelo e [Link do documento]: https://dart.dev/tools/diagnostic-messages?utm_source=dartdev&utm_medium=redir&utm_id=diagcode&utm_content=unnecessary_cast#unnecessary_cast
assim:
Imagem de advertência de elenco desnecessária
mas isso não afeta a operação do código, e o código pode ser convertido com sucesso; mas se eu não usar as T
duas vezes para conversão de tipo, um erro será relatado quando o código estiver em execução
Exceção não tratada: o tipo 'List (talvez List, depende de qual T você exclui)' não é um subtipo do tipo 'List' na conversão de tipo
Sim, devo usar as T
duas vezes, e uma a menos resultará em erro! O que está acontecendo? Alguém pode me dizer como eliminar esse aviso amarelo? Ou como encapsular essa ferramenta sem disparar um aviso?