Получение значения открытого статического поля / свойства класса по его имени в виде строки в dart через отражаемое - PullRequest
0 голосов
/ 07 февраля 2019

Скажем, у меня есть класс:

class Icons {
       static const IconData threesixty = IconData(0xe577, fontFamily: 'MaterialIcons');
 }

Теперь у меня есть строковая переменная со значением "threesixty":

String fieldName = "threesixty";

как я могу получить значение threesixty вКласс значков с помощью переменной fieldName?

Я использую отражаемый пакет и уже использовал другие функции ClassMirrors во флаттере, но не знаю, как это сделать.

Ответы [ 2 ]

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

То, что вы хотите, требует использования отражения.В флаттере отражение не поддерживается из-за тряски деревьев.Встряхивание дерева - это процесс удаления неиспользуемого кода из пакета приложения (apk, ipa) с целью уменьшения размера пакета.Когда используется отражение, весь код может использоваться неявно, поэтому флаттер не сможет узнать, от каких частей кода избавиться, поэтому они решили не поддерживать отражение (зеркала в контексте дротика).Вы должны попытаться решить вашу проблему с наследованием, если это возможно, или, в зависимости от вашей конкретной проблемы, вы можете попытаться использовать статическую генерацию кода.

Редактировать: вы можете вызывать статический геттер с отражаемым типом, как этот;

import 'package:reflectable/reflectable.dart';

class Reflector extends Reflectable {
  const Reflector() : super(staticInvokeCapability);
}

const reflector = const Reflector();

@reflector
class ClassToReflect {
  static double staticPropertyToInvoke = 15;
}

Main.dart

import 'package:reflectable/reflectable.dart';
import 'main.reflectable.dart';

void main() {
  initializeReflectable();

  ClassMirror x = reflector.reflectType(ClassToReflect);
  var y = x.invokeGetter('staticPropertyToInvoke');
  debugPrint(y);
}

PS main.reflectable.dart - это файл, созданный отражаемым пакетом.

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

Насколько я знаю, это невозможно без использования зеркальной библиотеки.

См .: Получить доступ к свойству объекта с помощью скобочных обозначений в dart

...