Я новичок в флаттере, я хотел бы создать динамическую карту Map<key,value> для виджета без состояния. Я пытался использовать как можно больше руководств, но это может работать только в том случае, если это список. Если это карта, которая содержит такие как
final Map toCheck = {'bedroom':'bed','bathroom':'bathtub_outlined'};
Это показывает ошибку
lib/template/general.dart:164:18: Error: A value of type 'Row' can't be returned from a function with return type 'MapEntry<dynamic, dynamic>'.
- 'Row' is from 'package:flutter/src/widgets/basic.dart' ('../flutter/packages/flutter/lib/src/widgets/basic.dart').
- 'MapEntry' is from 'dart:core'. return Row( ^ lib/template/general.dart:170:12: Error: The method 'toList' isn't defined for the class 'Map<dynamic, dynamic>'.
- 'Map' is from 'dart:core'. Try correcting the name to the name of an existing method, or defining a method named 'toList'. }).toList(), ^^^^^^
Вот функция виджета без сохранения состояния
class BundleSpecification extends StatelessWidget {
final Map specification;
BundleSpecification(this.specification);
final Map toCheck = {'bedroom':'bed','bathroom':'bathtub_outlined'};
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.fromLTRB(0, 15.0, 0, 15.0),
child: Row(
children: toCheck.map((type,value){
return Row(
children: [
Icon(Icons.bed),
Text(specification[value]),
],
);
}).toList(),
)
);
}
Я очень ценю любые ответы. Спасибо.
Row
принимает Iterable
(например, List
) в качестве аргумента для children
. Вы предоставляете ему карту, которая явно не работает.
см. ответ @esentis
Привет, вы знаете, как установить Icon(Icons.bed) в Icon(Icons.[callVariable])?
Вы можете попробовать отобразить Map
в виджете Row
следующим образом:
Row(
children: [
...toCheck.entries.map(
(x) => Row(
children: [
Icon(Icons.bed),
Text(specification[x.value]),
],
),
)
],
)
Привет, я забыл установить значок (Icons.bed) в динамический. Как обратиться к Icon(Icons.[x.key])
Я не думаю, что вы можете. Вам придется вручную обрабатывать ваши случаи в функции, например if (x.key=='bed') return Icons.bed
Понятно, я думал, что это можно вызвать из динамической переменной. Спасибо
Итак, как насчет выполнения foreach внутри дочерних элементов Row? Какой подход вы предлагаете в любом случае?