Как я могу использовать firstWhereOrNull с картой в Flutter?

#flutter

Вопрос:

Как я могу использовать firstWhereOrNull с картами во Флаттере?

Другими словами, как я могу это сделать:

 final myVariable1 = myList.firstWhereOrNull(
        (myVariable2) =>
            !myList.containsValue(myVariable2));
 

Вместо использования списка (myList) я хотел бы сделать то же самое с картой (Map<Строка, int>).

 Map<String,int> myMap = {};
myMap("stuff1") = 1;
myMap("stuff2") = 2;
myMap("stuff3") = 3;
 

Спасибо

Комментарии:

1. Вы можете показать свою переменную карты?

2. Я просто добавил это к своему вопросу. Спасибо

3. Вы хотите сказать, что вам нравится проверять значение null на основе ключей?

4. Map<String, int> не допускает ни обнуляемых ключей, ни значений. A Map само по себе не является Iterable (поэтому не может использовать firstWhere или firstWhereOrNull напрямую), но вы можете получить Iterable s от него (например, через его keys values свойства , или entries ). Мы не можем ответить на ваш вопрос, не указав, какие выходные данные вы хотите получить.

Ответ №1:

firstWhereOrNull Для карт такого метода не существует, но вы можете легко придумать его, используя методы расширения:

 extension ExtendedMap on Map {
  /// The first entry satisfying test, or null if there are none.
  MapEntry? firstWhereOrNull(bool Function(MapEntry entry) test) {
    for (var entry in this.entries) {
      if (test(entry)) return entry;
    }
    return null;
  }
}
 

Вот как вы можете его использовать:

 final map = <String, int>{
  'stuff1': 1,
  'stuff2': 2,
  'stuff3': 3,
};

final test = map.firstWhereOrNull((entry) => entry.value == 2);

print(test); // Prints MapEntry(stuff2: 2)

final nullTest = map.firstWhereOrNull((entry) => entry.key == "stuff5");

print(nullTest); // Prints null
 

Ответ №2:

Итак, я создал эту реализацию, я не думаю, что она наиболее оптимизирована, также потому, что было необходимо использовать приведение, так как из-за безопасности звука null невозможно вернуть какое-либо значение. Но для тебя это работает.

 var myMap = {"key1": "value", "key2": 3};

var result = myMap.entries
  .cast<dynamic>()
  .firstWhere((e) => e.key == "key", orElse: () => null);

print(result);
 

Я надеюсь, что это каким-то образом поможет!