三元运算符作为回报 - FLUTTER

Posted

技术标签:

【中文标题】三元运算符作为回报 - FLUTTER【英文标题】:ternary operator in return - FLUTTER 【发布时间】:2021-11-13 07:47:53 【问题描述】:
  Widget _buildItems() 
    return id == 0
        ? Column(Text("PAGE 1"))
        : Center(
            Text("PAGE 2"),
          );
  

你好,上面是我的颤振代码的一部分,我一直在出错。你能调查一下吗?看起来我的语法是错误的,但我无法确定我错在哪里。

谢谢。

        ? Column(Text("PAGE 1"))

                ^

packages/flutter/lib/src/widgets/basic.dart:4930:3: Context: Found this candidate, but the arguments don't match.

  Column(

  ^^^^^^

/lib/components/challenge_menu.dart:32:17: Error: Too many positional arguments: 0 allowed, but 1 found.

Try removing the extra positional arguments.

        : Center(

                ^

packages/flutter/lib/src/widgets/basic.dart:1984:9: Context: Found this candidate, but the arguments don't match.

  const Center( Key? key, double? widthFactor, double? heightFactor, Widget? child )

        ^^^^^^

/lib/components/challenge_menu.dart:30:12: Error: The getter 'id' isn't defined for the class '_ChallengeMenuState'.

 - '_ChallengeMenuState' is from 'package:osam2021/components/challenge_menu.dart' ('/lib/components/challenge_menu.dart').

Try correcting the name to the name of an existing getter, or defining a getter or field named 'id'.

    return id == 0

           ^^

【问题讨论】:

【参考方案1】:

每一列都有一个称为子项的必需属性。您必须使用它在列中包含任何子小部件。

【讨论】:

【参考方案2】:

在您直接在 Column 中使用 Text Widget 的情况下,每个 Columns 都有一个“儿童”列表,您必须像这样使用:

  Column(
           children:[
                       Text("your text"),
                         .....
                         ]

          )

【讨论】:

【参考方案3】:

列类

在垂直数组中显示其子项的小部件。

Column(
  children: const <Widget>[
    Text('Deliver features faster'),
    Text('Craft beautiful UIs'),
    Expanded(
      child: FittedBox(
        fit: BoxFit.contain, // otherwise the logo will be tiny
        child: FlutterLogo(),
      ),
    ),
  ],
)

for more details

中心类

一个以自身为中心的小部件。

Center(
     child: Container()
),

你忘了使用 child 和 children 。

同时使用两个小部件:

class LoginPage extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return SafeArea(
      child: Scaffold(
        body: Column(
          children: <Widget>[
            Center(
              child: Text('Logo'),
            ),
          ],
        ),
      ),
    );
  
  

【讨论】:

【参考方案4】:

您错过了 Column 中的孩子和 Center 小部件中的孩子。您应该将一个小部件数组分配给 Column 中的子键,并将 Text() 小部件分配给 Center 小部件中的子键。

你应该有这样的代码

Widget _buildItems() 
  return id == 0
    ? Column(children: [Text("PAGE 1")])
    : Center(child: Text("PAGE 2"));

【讨论】:

【参考方案5】:
Widget _buildItems() 
return( id == 0)
    ? Column(children : [Text("PAGE 1")])
    : Center(child : 
        Text("PAGE 2")
      );
  

我不知道你打算用它做什么,但只是修复错误

【讨论】:

以上是关于三元运算符作为回报 - FLUTTER的主要内容,如果未能解决你的问题,请参考以下文章

Java:没有回报的三元。 (用于方法调用)

三元运算符问题 SwiftUI

React - 三元运算符和声纳

返回值的三元运算符 - Java/Android

26.Python三目运算符(三元运算符)用法详解

循环条件中的三元运算符:评估顺序/操作。优先级不明确