必须向 Text 小部件提供非空字符串

Posted

技术标签:

【中文标题】必须向 Text 小部件提供非空字符串【英文标题】:A non-null String must be provided to a Text widget 【发布时间】:2019-10-14 12:34:36 【问题描述】:

我正在尝试添加要调整数量的选项,但我收到一条错误消息,提示“必须向文本小部件提供非空字符串” 我如何提供这个,这个代码?

 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: () )
          ],
        ),

【问题讨论】:

听起来cart_prod_qtynull 尝试插入:Text('$cart_prod_qty'), @FellipeMalta 不是一个好主意。它不会在运行时失败,但文本将显示“null”。 我以为变量已经被声明了,只是一个想法@HugoPassos 请不要使用图片发布代码。提取主要部分并将其放在问题中。如果绝对需要发送大部分代码,请考虑将其发布到 gist 或 pastebin 并在此处发送链接 【参考方案1】:

你应该检查 null 安全

Text(cart_prod_qty??'default value'),

【讨论】:

我想补充一点:在颤振中,在这种情况下创建一个 Text 小部件通常是有意义的,例如在各种Tiles 和其他东西中:Tile(..., subtitle: cart_prod_qty == null ? null : Text(cart_prod_qty)), 这将渲染得更好,因为它周围没有空的Text 小部件。 帮助我理解了我的愚蠢错误。 最佳答案.....【参考方案2】:

只需检查 null 并给出默认值

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

如果你愿意,你可以把它留空

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

或者你可以让文本小部件成为可选的

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

【讨论】:

【参考方案3】:

错误本身显示了代码中的错误,Text 小部件仅适用于字符串,而对于 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'),

【讨论】:

【参考方案4】:

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

当您向 Text() 添加非直接字符串值时,不要像在此示例中那样直接插入它:

Text(cart_prod_qty)

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

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

Text('$cart_prod_qty')

【讨论】:

非常感谢,你拯救了我的灵魂,真的很丰富?【参考方案5】:

该值可能为空,因此如果它是可选字段,则您会收到 null 错误,请尝试以下操作:

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

【讨论】:

【参考方案6】:

这看起来像是null 值的问题。在Text(cart_prod_qty) 中,您向文本小部件提供了 null,这是不允许的。在文本小部件中的数据参数不能为空。

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

您可以指定一个默认值,并可以将其更改为:

 

Text(cart_prod_qty  ?? 'default value').

如果你有一个 dart 模型或集合类型,那么检查 null 值并像这样传递一个默认值

ListTile(
    title: Text(User[‘user_name’] ?? 'default'),
    subtitle: Text(User[‘user’_info] ?? 'default'),
);

【讨论】:

【参考方案7】:

如果你确定它不为空,那么你可以安全地这样做:

Text(cart_prod_qty!),

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

Text(cart_prod_qty ?? ''),

【讨论】:

【参考方案8】:

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

Text(value ?? ""),

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

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

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,),
        );
      
    

【讨论】:

【参考方案11】:

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

子:新文本(mydata[1]["2"][k]),

【讨论】:

你能用你的答案解释更多细节吗?【参考方案12】:

由于这个原因,我遇到了同样的错误

之前

title:  Text(widget.title)

之后:

title:  Text('ram')

这解决了我的错误

为了解决这个错误添加双引号或单引号 title: Text('ram')

【讨论】:

以上是关于必须向 Text 小部件提供非空字符串的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 必须向 Text 小部件提供非空字符串

必须向 Text 小部件 Flutter Api 提供非空字符串

必须向 Text 小部件提供非空字符串。错误显示,但 null-safety 不适用于代码

如何修复“必须向文本小部件提供非空字符串”。颤振错误?

如何修复非空字符串必须提供给文本小部件?

data!= null :必须向 Text 小部件提供非 null 字符串