如何将子级动态添加到脚手架小部件

时间:2019-04-08 17:30:53

标签: flutter flutter-layout

比方说,我有一个看起来像这样的聊天屏幕。

enter image description here

现在,当用户单击“准备就绪时按一下”按钮时,将调用方法fetchNewQuestion()

我的意图是,这将发出一个HTTP请求,并使用显示结果

_buildUsersReply(httpResponse);

但是,问题在于此返回必须作为现有子项下的子项在当前脚手架的小部件内进行,以便将其建在底部,而先前的项仍在其中。结果如下:

enter image description here

您可以找到我的完整代码here

这是否可以在语法上做到?还是我必须改变做这件事的概念?

[更新,我现在知道我上面的方法是错误的,我必须使用listview构建器。下面的CurrentStatus显示了我在实现该目标方面的进展。]


当前状态:

我已经建立了一个小部件列表:

List<Widget> chatScreenWidgets = []; 

在setState上,我使用一个新的Widget更新它:

setState(() { chatScreenWidgets.add(_buildUsersReply("I think there were 35 humans and one horse.")); }); 

现在,我不确定如何在支架内传递小部件。我写了一些无效的代码。例如,我尝试过:

enter image description here

下图中和要点here中的代码:

enter image description here

2 个答案:

答案 0 :(得分:0)

忘记支架,这个想法是关于您真正想要改变的东西,可以说是 一个列表,如果更新数组,则从数组中获取数据,则列表将更新;如果它是另一种类型的小部件,则可以用不同的方式处理它;如果您弄清楚每个部分的作用,我将编辑此答案您的小部件,因为我无法阅读您的完整代码。


  1. 首先,您必须创建一个具有两个属性的对象,一个是行的类型(如果是用户重放或其他消息),第二个属性是字符串或文本。
  2. 现在从上述对象的listview类中创建一个全局列表,这样您就可以从用户或什至作为新闻获取数据,并从上述类中创建一个新对象并将其添加到数据并将其添加到列表。
  3. 项目生成器返回一个窗口小部件,因此将根据您返回的窗口小部件来设置行,因此根据对象中的数据调用您的函数之一,该函数返回诸如_buildUsersReply(string text)之类的视图。

如果您还有其他问题,可以问:)是否需要,请将其标记为答案。

答案 1 :(得分:0)

仅供以后参考,这是我真正需要做的:

1。。创建小部件列表

List<Widget> chatScreenWidgets = [];

2。。在我的方法中,我需要使用setState才能向该列表添加元素。我添加到此的每个小部件都将显示在该脚手架上。

`setState(() {
       chatScreenWidgets.add(_buildUsersReply("Some Text"));
    });`

3。。然后,将其加载到我的Scaffold中,我使用了itemBuilder以便将小部件列表返回到ListView。我已经有了该ListView(在这里我是手动添加子级的)。现在,这只是通过我的业务逻辑方法(在本例中为fetchNewQuestion())中的setState方法返回它们。

body: Stack(
    children: <Widget>[
      Padding(
        padding: EdgeInsets.only(bottom: 0),
        child: new ListView.builder(
          physics: BouncingScrollPhysics(),
          padding: EdgeInsets.symmetric(horizontal: 25),
          itemCount: chatScreenWidgets.length,
            itemBuilder: (BuildContext context, int itemCount) {
              return chatScreenWidgets[itemCount];
            }
        ),
      ),
          ],
        ),
      );`

我希望这对未来的颤振工程师有所帮助!