Flutter 如何向Scaffold小部件动态添加子部件
比如说,我有一个聊天屏幕,看起来像这样 现在,当用户单击“准备就绪时按”按钮时,将调用方法Flutter 如何向Scaffold小部件动态添加子部件,flutter,flutter-layout,Flutter,Flutter Layout,比如说,我有一个聊天屏幕,看起来像这样 现在,当用户单击“准备就绪时按”按钮时,将调用方法fetchNewQuestion() 我的意图是,这将发出一个HTTP请求,并使用 _buildUsersReply(httpResponse); 但是,问题是这个返回必须在当前scaffold的小部件中作为现有子部件下的子部件进行,以便在底部构建它,而之前的子部件仍然存在。结果如下: 你可以找到我的完整代码 这是否可以按专业语法进行?还是我必须改变我如何做到这一点的观念 [更新,我现在了解到我的上述
fetchNewQuestion()
我的意图是,这将发出一个HTTP请求,并使用
_buildUsersReply(httpResponse);
但是,问题是这个返回必须在当前scaffold的小部件中作为现有子部件下的子部件进行,以便在底部构建它,而之前的子部件仍然存在。结果如下:
你可以找到我的完整代码
这是否可以按专业语法进行?还是我必须改变我如何做到这一点的观念
[更新,我现在了解到我的上述方法是错误的,我必须使用listview生成器。下面的CurrentStatus显示了我在实现该目标方面的进展。]
当前状态: 我已经建立了一个小部件列表:
List<Widget> chatScreenWidgets = [];
现在,我不知道如何在脚手架内传递小部件。我写了一些不起作用的代码。例如,我尝试了以下方法:
下图和要点中的代码:
忘掉脚手架吧,这个想法是关于你真正想要改变的东西,让我们假设它是 列表和你从数组中获取数据如果你更新了数组,那么列表就会更新,如果它是另一种类型的小部件,那么你可以用不同的方式处理它。如果你澄清了小部件中每个部分的作用,我会编辑这个答案,因为我无法阅读你的完整代码
如果您有任何其他问题,您可以问:)如果这是您需要的,请将其标记为答案。仅供将来参考,以下是我真正需要做的: 1.创建小部件列表
List chatScreenWidgets=[]代码>
2.在我的方法中,我需要使用一个setState来向该列表添加元素。我添加到其中的每个小部件都将显示在脚手架上
`setState(() {
chatScreenWidgets.add(_buildUsersReply("Some Text"));
});`
3.然后,将其加载到我的Scaffold中,我使用itemBuilder将小部件列表返回到我的ListView。我已经有了这个ListView(在这里我手动添加了孩子)。现在,这只是通过我的业务逻辑方法中的setState方法返回它们(在本例中为fetchNewQuestion()
)
body:Stack(
儿童:[
填充物(
填充:仅限边设置(底部:0),
子项:新建ListView.builder(
物理:弹跳CrollPhysics(),
填充:边缘组。对称(水平:25),
itemCount:chatScreenWidgets.length,
itemBuilder:(BuildContext上下文,int itemCount){
返回chatScreenWidgets[itemCount];
}
),
),
],
),
);`
我希望这有助于未来的颤振工程师 如果您的scaffold位于一个有状态的小部件中,您可以将子部件分配给一个List类型的变量,然后当请求返回时,只需调用setState(()=>_scaffoldchilds=…)或类似的东西。是的,它是一个有状态的小部件。但我无法理解如何实现\u scaffoldChildren=…
想法。任何进一步的解释都很好。此外,当我尝试将children:转换为children:List时,我遇到了一个错误运算符<未为类类型定义,并且等式表达式不能是另一个等式的操作数。感谢您的帮助。这是一个完整的例子:我理解。让我知道你想知道更多关于代码的哪一部分。为了给你一个基本的想法,我有一个\u buildUsersReply()代码>获取字符串并创建聊天泡泡的小部件生成器。类似地,我的主框架/小部件位于这个链接()中,我已经评论了我想在这个链接中构建聊天泡泡的位置。目前我可以手动添加它们。我只是想自动化这项工作。我已经在上一个文件的底部指出了这些。好的,检查listview生成器上方的链接当我看到你的代码时,我发现你只使用带有编码子项的listview,所以基本上你必须添加listview生成器,在item builder中,你将有一个行索引,我将编辑详细答案,谢谢。你能再核对一下这个问题吗?在最后一部分中,我添加了一些内容,试图模仿您使用项目生成器的建议。我正在尝试创建一个小部件列表,并使用setState()更新它。现在的主要问题是如何在原始的scaffold中返回/显示它(如何编写itemBuilder以接受我的小部件列表)。您可以在上述问题的最后一个细节处找到当前代码。请忽略。我已经用小部件解决了这个问题。非常感谢你!
`setState(() {
chatScreenWidgets.add(_buildUsersReply("Some Text"));
});`
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];
}
),
),
],
),
);`