Пакет Flutter Pigeon возвращает список динамических

#flutter #flutter-dependencies

#flutter #flutter-зависимости

Вопрос:

Я пытаюсь использовать новый (рекомендуемый) подход к каналам платформы Pigeon https://pub.dev/packages/pigeon Я пытаюсь получить список элементов но pigeon не позволяет этого в настоящее время вы должны перенести его в другой класс см. https://github.com/flutter/flutter/issues/66446 , но когда я делаю это, список, который я получаю, имеет тип dynamic, а нетип объекта, который я хочу здесь, — это моя конфигурация, урезанная для краткости и конфиденциальности, сначала мой файл messages.dart

 class Key {
  String displayName;
  String description;
}

class Keys {
  List<VirtualKey> virtualKeys;
}
 

после запуска генератора кода (снова урезанный)

 flutter pub run pigeon 
  --input pigeons/messages.dart 
  --dart_out lib/messages.dart 
  --objc_header_out ios/Classes/messages.h 
  --objc_source_out ios/Classes/messages.m 
  --objc_prefix FLT 
  --java_out myApp/pigeon_plugin/Messages.java 
  --java_package myApp.pigeon_plugin"
 

Я сгенерировал это

 class Keys {
  List keys;
  // ignore: unused_element
  Map<dynamic, dynamic> _toMap() {
    final Map<dynamic, dynamic> pigeonMap = <dynamic, dynamic>{};
    pigeonMap['keys'] = keys;
    return pigeonMap;
  }
  // ignore: unused_element
  static Keys _fromMap(Map<dynamic, dynamic> pigeonMap) {
    final Keys result = Keys();
    result.keys = pigeonMap['keys'];
    return resu<
  }
}
 

метод, который возвращает этот класс, завернутый в список массивов (проблема с pidgeon https://github.com/flutter/flutter/issues/66453 ) еще раз прошу прощения за любые ошибки при попытке отредактировать его из соображений конфиденциальности

     override fun getKeys(): Messages.Keys {
        return Messages.Keys().apply {
            this.keys = arrayListOf(getAllKeys())
        }
    }

    fun getAllKeys(): List<Key> {
        return KeyManager().allKeys
    }
 

Итак, учитывая все это, он должен предоставить мне объект Keys, который содержит список ключей, но вместо этого, когда я пытаюсь его использовать, я получаю объект Keys со списком dynamic см. Изображение ниже, это ожидаемое поведение или есть способ это исправить? большое спасибо

динамический список

Ответ №1:

Это связано с тем, что Pigeon еще не поддерживает дженерики

https://github.com/flutter/flutter/issues/63468