根据条件添加小部件

时间:2019-02-06 17:25:07

标签: dart flutter

仅当某些条件为真时,我才想在小部件的MaterialButton方法中添加build。例如:

if (..) {
    MaterialButton(..)
}

如何在Flutter中实现这一目标?

4 个答案:

答案 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>[]中(例如,使用RowColumnListView),则可以执行以下操作:

@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;
}