必须为文本窗口小部件提供非空字符串

时间:2019-05-28 23:51:03

标签: flutter dart flutter-layout

我正在尝试添加要调整的数量的选项,但是出现错误消息“必须向文本小部件提供非空字符串” 如何提供此代码? https://i.stack.imgur.com/Qp8pO.png

 trailing: Container(
        height: 60,
        width: 60,
        padding: EdgeInsets.only(left: 10),
        child: Column(
          children: <Widget>[
            new GestureDetector(child: Icon(Icons.arrow_drop_up), onTap: () {}),
            new Text(cart_prod_qty),
            new GestureDetector(child: Icon(Icons.arrow_drop_down), onTap: () {})
          ],
        ),

12 个答案:

答案 0 :(得分:2)

错误本身显示代码中的错误,“文本”小部件仅适用于字符串,对于null,它们有意引发了异常。 检查他们添加了引发异常的text.dart文件实现。

assert(
         data != null,
         'A non-null String must be provided to a Text widget.',
       ),

要解决以上错误,您必须提供一些默认文本。

new Text(cart_prod_qty!=null?cart_prod_qty:'Default Value'),

答案 1 :(得分:2)

这似乎是一个''值的问题。在null中,您将为文本小部件提供null,这是不允许的。在Text小部件中数据参数不能为空。

解决方案不要将Text(cart_prod_qty)传递给null小部件。为避免它,请设置默认值或检查您收到的值不为空。调用Text小部件时

您可以分配一个默认值,并且可以将其更改为以下值:

Text()

如果您使用的是飞镖模型或收藏类型,请检查null值并传递这样的默认值

Text(cart_prod_qty  ?? 'default value').

答案 2 :(得分:1)

在这种情况下给您和所有正在阅读本文的人的建议。

当你向 Text() 添加一个非直接字符串值时,不要像在这个例子中那样直接插入它:

Text(cart_prod_qty)

因为您可以像我一样得到“必须向文本小部件提供非空字符串”。

所以我建议你以后练习这个更安全:

Text('${cart_prod_qty}')

答案 3 :(得分:1)

如果您确定它不为空,那么您可以安全地执行此操作:

Text(cart_prod_qty!),

对我来说,当它在用例中绝对不是 null 时,它比这样做更干净:

Text(cart_prod_qty ?? ''),

答案 4 :(得分:0)

只需检查null并提供默认值

new Text(cart_prod_qty!=null?cart_prod_qty:'default value'),

如果愿意,可以将其保留为空

new Text(cart_prod_qty!=null?cart_prod_qty:''),

否则,您可以将文本小部件设置为可选

cart_prod_qty!=null?new Text(cart_prod_qty): Container()

答案 5 :(得分:0)

由于此原因我有同样的错误

之前

title:  Text(widget.title)

之后:

title:  Text('ram')

这已解决了我的错误

要解决此错误,请添加双引号或单引号 title: Text('ram')

答案 6 :(得分:0)

该值可能为空,因此如果出现可选字段,则您将得到null错误

new Text(cart_prod_qty == null ? '' : cart_prod_qty),

答案 7 :(得分:0)

问题很明显。您正在将null传递给Text小部件。 new Text(cart_prod_qty)这可能是由于api的响应延迟(如果您正在使用它)。或者变量“ cart_prod_qty”中没有值。您可以这样处理:new Text(cart_prod_qty != null ? cart_prod_qty.toString : '')

答案 8 :(得分:0)

如果你知道你的字符串可以为空,你可以做这样的事情。虽然我使用了可见性小部件,因为我不希望我的小部件在它为空时显示。

class NullableTextWidget extends StatelessWidget {
      final String? text;
      final TextStyle? textStyle;
      const NullableTextWidget({Key? key, this.text,this.textStyle}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Visibility(
          visible: text != null,
          child: Text(
            text ?? "",
            style: textStyle,),
        );
      }
    }

答案 9 :(得分:-1)

您应该检查null安全性

new Text(cart_prod_qty??'default value'),

答案 10 :(得分:-1)

只需将文本小部件值设置为可选

Text(value ?? ""),

答案 11 :(得分:-1)

<块引用>

我遇到了同样的问题......我已经通过使用 “new” 关键字之前的文本...

child: new Text(mydata[1]["2"][k]),