如何在颤振小部件中使用条件语句/三元

Posted

技术标签:

【中文标题】如何在颤振小部件中使用条件语句/三元【英文标题】:How to use conditional statements/ternary inside a flutter widget 【发布时间】:2018-09-18 02:35:01 【问题描述】:

我需要知道是否可以在颤振小部件中使用三元/if else。

我正在尝试创建一个 buttonCreator 小部件,它需要几个参数,其中一个是背景。我需要检查小部件是否启用了背景。我有的是这个,但我不知道如何在真正的飞镖代码中使用它。

Container buildButton(String text, bool bg)
  return new Container(
    decoration: new BoxDecoration(
      border: new Border.all(color: Colors.white),
      if (bg != true ? color: Colors.white : '')
    ),
    padding: new EdgeInsets.all(15.0),
    margin: new EdgeInsets.symmetric(horizontal: 10.0, vertical: 5.0),
    child: new Center(
      child: new Text(
        text, style: new TextStyle(color: Colors.white, fontFamily: 'Monsterrat')
      )
    ),
  );
;

【问题讨论】:

How to use conditional statement within child atribute of a Flutter Widget (Center Widget)的可能重复 这不是重复的,我需要返回一个对象,而不仅仅是值本身。 【参考方案1】:
decoration: new BoxDecoration(
    border: new Border.all(color: Colors.white),
    color: bg ? Colors.transparent : Colors.red, // you can use ternary operator here
),

根据 AleksTi 的回答修改。 color 属性不能是 null

【讨论】:

【参考方案2】:
Container buildButton(String text, bool bg)
  return new Container(
    decoration: new BoxDecoration(
      border: new Border.all(color: Colors.white),
      color: bg ? Colors.white : null, // you can use ternary operator here
    ),
    padding: new EdgeInsets.all(15.0),
    margin: new EdgeInsets.symmetric(horizontal: 10.0, vertical: 5.0),
    child: new Center(
      child: new Text(
        text, style: new TextStyle(color: Colors.white, fontFamily: 'Monsterrat')
      )
    ),
  );
;

【讨论】:

【参考方案3】:

我认为这就是您的问题的真正意义所在?

import 'package:flutter/material.dart';

void main() => runApp(new MaterialApp(
  home: new Home(),
));


class Home extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return new Scaffold(
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Flexible(
                          child: new MyContainer(
                color: Colors.red,
              ),
            ),
            new Flexible(
                          child: new MyContainer(
                img: "http://www.clker.com/cliparts/F/v/O/6/E/c/cartoon-rubber-duck-hi.png",
              ),
            )
          ],
        ),
      ),
    );
  


class MyContainer extends StatelessWidget 
  String img;
  Color color;
  MyContainer (this.img,this.color);
  @override
  Widget build(BuildContext context) 
    return this.img!=null? new Container(
      decoration: new BoxDecoration(
        image:new DecorationImage(
          image: new NetworkImage(this.img)
        ) 
      ),
    ): new Container(
      decoration: new BoxDecoration(
        color: this.color
      ),
    );
  

【讨论】:

以上是关于如何在颤振小部件中使用条件语句/三元的主要内容,如果未能解决你的问题,请参考以下文章

使用条件语句修改其他小部件 KivyMD

三元条件没有重建我的小部件 - Flutter

在不使用条件语句和三元运算符的情况下,在 C 中查找最多三个数

Flutter:为什么在构建函数中基于条件语句在脚手架之间进行切换,但不适用于自定义窗口小部件

试图弄清楚如何将具有多个条件的长三元运算符转换为长if语句

python条件(三元)运算符