При использовании флаттера нам иногда нужно создать множество значков с похожими свойствами. Хотя есть много способов сделать это, но мы всегда хотим использовать передовой опыт и более эффективный способ кодирования. Посмотрим, как мы сможем это сделать.

Один из самых простых способов - использовать виджет «Иконки» и нарисовать иконку в нашем приложении. Вот фрагмент кода, показывающий, как это можно сделать обычным способом: -

return Container(
  child: Row(
   mainAxisAlignment: MainAxisAlignment.spaceEvenly,
   childern: <Widget>[
      Icon(
      Icons.add,
      size: 50.0,
      color: Colors.green,
      ),
      Icon(
      Icons.search,
      size: 50.0,
      color: Colors.blue,
      ),
      Icon(
      Icons.close,
      size: 50.0,
      color: Colors.red,
      ),
    ],
  ),
)

Этот метод вполне подходит, если вы хотите добавить в свое приложение некоторое фиксированное количество значков меньшего размера. Но что, если мы хотим иметь более 5 иконок в разных контейнерах? А что, если вы хотите изменить одно свойство этих значков, например цвет или размер? Что ж, есть много способов сделать это. Один из способов, который я нашел очень полезным и простым, - это использовать списки, функции и карту.

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

Чтобы упростить понимание, сначала мы создаем список «IconData», в котором указываются значки, которые мы хотим создать. Затем мы создаем функцию и пишем некоторые свойства, которые хотим применить к иконкам. И после этого мы создаем список в виде карты, чтобы мы могли неявно перебирать список. Давайте сначала посмотрим на код списка.

List<IconData> _icons = [ 
// The underscore declares a variable as private in dart.
Icons.add,
Icons.search,
Icons.close,
];

Итак, мы закончили с созданием нашего списка, мы можем добавить столько значков, сколько захотим, но для простоты этого примера я показываю здесь только три. Следующим шагом будет создание функции, которая будет строить наши значки.

Widget _buildIcon(int index){
  return Container(
    height: 40.0
    width: 40.0
    child:
      _icons[index],
      size: 50.0,
    )
}

Мы собираемся передать индекс иконок из списка в функцию. На следующем шаге в строке или столбце мы преобразуем список в карту. Цель использования map - использовать итерацию по элементам списка. Посмотрим код

return Container(
  child: Row(
    mainAxisAlignment: MainAxisAlignment.spaceAround,
    children: _icons.asMap().entries.map(
      (MapEntry map) => _buildIcon(map.key
    ),
  ).toList(),
),

Здесь Entries () предоставляет нам итератор, по которому мы можем выполнять итерацию, а map () принимает анонимную функцию, в которой мы передаем MapEntry в качестве параметра, который ссылается на одну запись, и эта функция вызывает наш _buildIcon () с 'ключом' параметр карты, который передается в анонимную функцию. И, наконец, мы снова преобразуем эту карту в список виджетов, которые наша Row () примет в качестве своих дочерних элементов. Это вернет строку, содержащую значки, которые есть в нашем списке.

Вам может показаться, что это больше кода по сравнению с предыдущим, но это динамический способ, который избавляет нас от «жесткого кодирования», когда у нас есть несколько строк с разными значками. В этом случае нам просто нужно создать еще один список IconData и передать его в функцию, и будет готова еще одна строка значков. Вы также можете применить эту технику везде, где захотите. Надеюсь, вы нашли эту статью полезной.

thisArticle == «Нашли полезным»? hitClaps () && saveArticle (): commentBelow ();