Как я могу справиться с проблемой дротиков - PullRequest
0 голосов
/ 02 февраля 2019

Я должен сделать данные json для моего пользовательского объекта, ниже приведен код, показывающий мою модель.

import 'package:meta/meta.dart';

class KakaoMLModel {
  final List<List<double>> jaw;
  final List<List<double>> rightEyebrow;
  final List<List<double>> leftEyebrow;
  final List<List<double>> nose;
  final List<List<double>> rightEye;
  final List<List<double>> leftEye;
  final List<List<double>> lip;

  KakaoMLModel({
    @required this.jaw,
    @required this.rightEyebrow,
    @required this.leftEyebrow,
    @required this.nose,
    @required this.rightEye,
    @required this.leftEye,
    @required this.lip
  });

  factory KakaoMLModel.fromJson(Map<String,dynamic> json) {
    print(json['jaw']);
    return KakaoMLModel(
      jaw: json['jaw'],
      rightEyebrow: json['rightEyebrow'],
      leftEyebrow: json['leftEyebrow'],
      nose: json['nose'],
      rightEye: json['rightEye'],
      leftEye: json['leftEye'],
      lip: json['lip']
    );
  }
}

Но, когда я передаю данные json по параметру, появляется сообщение об ошибке, подобное этому.

_TypeError (type 'List<dynamic>' is not a subtype of type 'List<List<double>>'

json['jaw'] формат, как показано ниже

[[0,04616761798553884, 0,5475042080412023], [+0,026029605771987013, 0,6203330820534684], [0,014870009633410218, 0,6947797773981148], [+0,01478418759402894, 0,7684331582472369], [0,03166518933198375, 0,8392744747251855], [+0,06115956082472804, 0,9024180638379186], [+0,10860571254829726, 0,9601635183836916], [+0,17011504626717094, 1,0057204991427136], [+0,25121165844788507, 1,0340586363828044], [0,3433729801681099, 1,0413332887822182], [0,4340747633053713, 1,0248020469426704], [0,5180659200853382, 0,9941894832935652], [0,5905636066620379, 0,949568636289012],[0,6483867917457562, 0,8895699510264967], [0,6935845784738898, 0,8206748353165457], [0,7288984252469625, 0,7487434227072808], [0,7554424386870936, 0,675567056784911] 101 * 101 * 101 * 101 * 1 * w * 101 * 1 * w * 1Это ли проблема с кастингом?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вложенные дженерики из dynamic - дело непростое.К сожалению, приведение должно происходить полностью на самом низком уровне, если элементы являются коллекциями.

Чтобы взять dynamic, который, как вы знаете, List, содержащий только List с, содержащий толькоdouble s, (то есть List<List<double>> и убедите систему типов времени выполнения Dart в том, что вам понадобится что-то вроде:

List<List<T>> _castNestedList<T>(dynamic l) =>
    (l as List).map((inner) => List<T>.from(inner)).toList();

List<T>.from берет каждый из внутренних списков и копирует егов новый список с правильным типом reified. Это лучше, чем List.cast, если в списке будет многократное чтение, потому что в случае List.cast есть проверки типов во время выполнения при каждом доступе к элементу.

Работа с этим типом отливки - известная проблема Dart 2. В долгосрочной перспективе мы надеемся улучшить удобство использования. См. Обсуждение на https://github.com/leafpetersen/cast/issues/1

0 голосов
/ 02 февраля 2019

Сначала вам нужно получить ссылку на Список, затем разыграть:

lip: (json['lip'] as List).cast<List<double>>()

Или быть осведомленным о нуле:

lip: (json['lip'] as List)?.cast<List<double>>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...