仅当某些条件为真时,我才想在小部件的MaterialButton
方法中添加build
。例如:
if (..) {
MaterialButton(..)
}
如何在Flutter中实现这一目标?
答案 0 :(得分:2)
是的,实际上我至少看到了两种方法。
第一个是:
Container(
child: your_test_here ? MaterialButton() : Container(height:0), //or any other widget but not null
)
另一种方法是创建一个函数:
Widget your_test_widget(){
if (your_test_here){
return MaterialButton();
}
else{
return Container(height:0); //or any other widget but not null
}
}
在树中调用它:
Container(
child:your_test_widget(),
)
希望有帮助!
答案 1 :(得分:2)
使用conditional operators非常简单:
build(context) => condition ? MaterialButton(...) : Container();
在这种情况下,condition
是一个布尔表达式(返回bool
,这与您要在if语句中输入的内容相同),并且空的Container
将呈现为空白,并且不占用任何空间。
答案 2 :(得分:-1)
这是一个很好的问题!
假设您要将按钮添加到容器中,则可以执行以下操作:
client.channels.get('ID').send('Message content');
很明显,这里在Container中添加了一个示例,您可以分配一个将Widget返回到每个子元素的方法!
一个更明确的例子:
const Discord = require('discord.js');
const Mineflayer = require('mineflayer');
const client = new Discord.Client();
var bot = Mineflayer.createBot({
host: "localhost",
port: 62146,
email: "username",
password: "password",
});
bot.on('chat', function(username, message) {
if (username === bot.username) return;
client.channels.get("540620424426422272").send(message)
});
client.login('token');
答案 3 :(得分:-1)
如果您的窗口小部件显示在List<Widget>
/ <Widget>[]
中(例如,使用Row
,Column
或ListView
),则可以执行以下操作:
@override
Widget build(BuildContext context) => Column(children: _buildChildren());
List<Widget> _buildChildren() {
var list = [/* put widgets that always show at top here */];
if(myCondition) list.add(MyConditionalWidget());
return list;
}