Заполните виджет функцией List <Widgets>из предварительно заполненного List - Flutter - PullRequest
1 голос
/ 18 марта 2020

Идея, лежащая в основе моего кода, состоит в том, чтобы заполнить виджет Column динамическими c данными, которые я получаю из списка объектов, которые я использую List >>, по сути, это просто список объектов.

My List:

List<List<Map<String, String>>> listCardsAll = [
  [
    {
      "cardCate": "AMEX",
      "cardDesc": "American Platinum 6",
      "cardImg":
          "images/AMEX/American-Express®-Green-Card-Earn-Rewards-Points.png"
    }
  ],
  [
    {
      "cardCate": "AMEX",
      "cardDesc": "American Platinum 5",
      "cardImg":
          "images/AMEX/American-Express®-Green-Card-Earn-Rewards-Points.png"
    }
  ],
];

Затем я вызываю функцию в столбце, который возвращает виджет (я хочу вернуть список, но он выдает ошибку)

Виджет:

  Column(
      children: <Widget>[
        Row(
          children: <Widget>[generateCardsALL()],
        )
      ],
    )

Я использую for-l oop, затем в функции a создаю виджет с этими динамическими c данными, но он возвращает только один виджет, а не коллекцию, на которую я надеялся.

my Function:

Widget generateCardsALL() {
  var count = 0;
  for (var item in listCardsAll) {
    count++;
    if (count <= 2) {
      return ReusableCards(
        cardName: item[0]["cardDesc"],
        cardLink: item[0]["cardImg"],
        cardRowNum: count,
      );
    } else {
      count = 0;
      return ReusableCards(
        cardName: item[0]["cardDesc"],
        cardLink: item[0]["cardImg"],
        cardRowNum: 3,
      );
    }
  }
}

(CardRowNum должен видеть только, когда его 3 карты рядом друг с другом, что он может генерировать новую строку)

Это ReusableCards

ReusableCards:

class ReusableCards extends StatelessWidget {
  final String cardLink;
  final int cardRowNum;
  final String cardName;
  ReusableCards(
      {@required this.cardLink,
      @required this.cardRowNum,
      @required this.cardName});

  @override
  Widget build(BuildContext context) {
    // addToListcards(cardLink);
    print("Inserted");
    return (cardRowNum == 1 || cardRowNum == 2
        ? GestureDetector(
            onDoubleTap: () {},
            child: Padding(
              padding: EdgeInsets.fromLTRB(0, 15, 15, 20),
              child: Container(
                width: MediaQuery.of(context).size.width * 0.24,
                child: SizedBox(
                  child: Column(
                    children: <Widget>[
                      Image.asset(cardLink, fit: BoxFit.fill),
                      Text(cardName)
                    ],
                  ),
                ),
              ),
            ),
          )
        : cardRowNum == 3
            ? Padding(
                padding: EdgeInsets.fromLTRB(0, 15, 0, 20),
                child: Container(
                  width: MediaQuery.of(context).size.width * 0.24,
                  child: SizedBox(
                    child: Column(
                      children: <Widget>[
                        Image.asset(cardLink, fit: BoxFit.fill),
                        Text("" + cardRowNum.toString())
                      ],
                    ),
                  ),
                ),
              )
            : SizedBox());
  }
}

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

1 Ответ

0 голосов
/ 18 марта 2020

Попробуйте использовать map для перебора списка и получения списка widgets,

Пример:

Column(
      children: listCardsAll.map((oneCard){ 
                      return Container(
                                child: Text(oneCard.cardDesc)
                       );
                 }).toList(),
)


...