Как динамически вставлять и удалять виджеты в зависимости от спроса в флаттере? - PullRequest
0 голосов
/ 11 апреля 2020

Вопрос общий. Однако я попытался смоделировать событие, добавив Контейнер в Столбец при нажатии кнопки. Но контейнер не добавляется в столбец или не отображается на экране. В дополнение к этому, метод setState отображает предупреждение о том, что на него нет ссылок.

здесь код

import 'package:flutter/material.dart';
import 'package:focus7/Configurations/size_config.dart';

class Demo2 extends StatefulWidget {
  @override
  _Demo2State createState() => _Demo2State();
}

class _Demo2State extends State<Demo2> {
  List<Widget> containersList = [
    Container(
      color: Colors.amberAccent,
      height: 100,
      width: 200,
    ),
    Container(
      color: Colors.red,
      height: 100,
      width: 200,
    ),
    Container(
      color: Colors.brown,
      height: 100,
      width: 200,
    ),
    Container(
      color: Colors.green,
      height: 100,
      width: 200,
    ),
  ];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SafeArea(
      child: Column(children: <Widget>[
        ...containersList,
        RaisedButton(
          onPressed: () {
            setState() => containersList.add(Container(
                  color: Colors.lightBlue,
                  height: 100,
                  width: 200,
                ));
          },
          child: Text("click"),
        )
      ]),
    ));
  }
}

здесь вывод:

enter image description here

1 Ответ

1 голос
/ 11 апреля 2020

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

Замените ваш setState следующим, пока решите вашу проблему.

setState(() {
              containersList.add(Container(
                color: Colors.lightBlue,
                height: 100,
                width: 200,
              ));
            });
...