#flutter
#трепетать
Вопрос:
Я связываю облачную функцию с моей моделью Flutter. Результат приходит от Cloud-Function
print(result.data); print(result.data.runtimeType); GameModel _incomingGame = GameModel.fromJson(result.data);
печать(результат.данные);
{ game: 'GTA', played: ['ISODATE', ...] }
печать(результат.данные.тип выполнения);
flutter: _InternalLinkedHashMaplt;String, dynamicgt;
Игровая модель
@JsonSerializable() class GameModel { String? game; List? played; GameModel( this.game, this.played,); factory GameModel.fromJson(Maplt;String, dynamicgt; json) =gt; _$GameModelFromJson(json); Maplt;String, dynamicgt; toJson() =gt; _$GameModelToJson(this); }
game_model.g.дротик
// GENERATED CODE - DO NOT MODIFY BY HAND part of 'game_model.dart'; // ************************************************************************** // JsonSerializableGenerator // ************************************************************************** GameModel _$GameModelFromJson(Maplt;String, dynamicgt; json) =gt; GameModel( json['game'] as String?, json['played'] as List?, ); Maplt;String, dynamicgt; _$GameModelToJson(GameModel instance) =gt; lt;String, dynamicgt;{ 'game': instance.game, 'played': instance.played, };
Тип времени выполнения результата входящих данных показывает, что он находится Maplt;String, dynamicgt;
в консоли. Однако, когда я выполняю GameModel.fromJson()
, это вызывает type '_InternalLinkedHashMaplt;Object?, Object?gt;' is not a subtype of type 'Maplt;String, dynamicgt;' in type cast
.
Я действительно не понимаю, почему это как-то происходит? Даже если я сделаю что-то подобное ниже, это также приведет к ошибке приведения того же типа.
GameModel _gameData = result.data; var game = GameModel.fromJson(_gameData);
Есть ли какой-нибудь способ, которым я могу это исправить?
Комментарии:
1. вы тоже не против поделиться
GameModel
файлом класса?2. вы можете попробовать
jsonDecode
, напримерGameModel.fromJson(jsonDecode(result.data));
3.
jsonDecode(result.data)
возвращает'_InternalLinkedHashMaplt;String, dynamicgt;' is not a subtype of type 'String'
ошибку.
Ответ №1:
Попробуйте эти решения
GameModel _incomingGame = GameModel.fromJson(result.data as Maplt;String, dynamicgt;);
Или
GameModel _incomingGame = GameModel.fromJson(Maplt;String, dynamicgt;.from(result.data));
Также было бы лучше, если бы вы проверили типы перед выполнением приведения типов
Если вышеуказанные решения не работают, добавьте тип при вызове облачных функций
final func = FirebaseFunctions.instance.httpsCallable('gameFunction'); final result = await funclt;Maplt;String, dynamicgt;?gt;();
Комментарии:
1. Возникает та же проблема :/
Maplt;String, dynamicgt; game = Maplt;String, dynamicgt;.from(result.data);
иprint(game.runtimeType);
возвращаетсяMaplt;String, dynamicgt;
, но как только он входит.fromJson()
, он превращается вMaplt;Object?, Object?gt;
2. Не могли бы вы написать метод FromJSON вручную? или добавьте сгенерированный метод в вопрос @chichi
3. Да, это странно, я обновил ответ, если вы используете облачные функции firebase, возможно, это сработает, @chichi
4. Те же продукты. Я просто перестраиваюсь
result.data
и просто используюGameModel();
для добавления непосредственно в свою переменную. Если я это выясню, то буду держать тебя в курсе, в чем была проблема, братан. Большое спасибо за помощь5. Был еще один
object - map
добавленный мангустом, который шел сdata
asMaplt;Object?, Object?gt;
… Итак, я добавил объект в свой MongoDB, и все эти объекты имеют тип приведения какMaplt;Object?, Object?gt;
.
Ответ №2:
Попробуйте это решение:
GameModel.fromJson((result.data as Maplt;dynamic, dynamicgt;).castlt;String, dynamicgt;())