我试图使一个Android应用程序使用Flutter从教程,当我想改变的颜色的文本根据教程通过:
children: [
text(
'Hi Yoikers!',
style: Theme.of(context).textTheme.headlineSmall.copyWith(color: Colors.white),
),
],
程序错误:
The method 'copyWith' can't be unconditionally invoked because the receiver can be 'null'.
Try making the call conditional (using '?.') or adding a null check to the target ('!').
你们能帮我写代码吗,谢谢。
5条答案
按热度按时间omjgkv6w1#
对上述答案的补充,请尝试使用“?”
ogsagwnx2#
错误信息是在说明copyWith方法的接收者Theme.of(context).textTheme.headlineSmall可以为null,在调用copyWith方法之前需要检查是否为null。
您可以使用null-assertion运算符**!**向目标添加null检查,如下所示:
或者,也可以使用null感知运算符**?**.使调用有条件,如下所示:
这两个选项都应该可以修复您遇到的错误。
daupos2t3#
试试我为你修改的代码(我也是道德的初学者)
TextWidget
通过将TextSelection
对象存储在_textSelection
变量中来跟踪所选文本。每当文本选择发生变化时,TextField
都会调用onSelectionChanged
回调,TextWidget
会相应地更新_textSelection
变量。在
build()
方法中,TextWidget
检查是否有选中的文本,并使用TextEditingController
.selection属性在TextField
小部件上设置选择。使用
FocusNode.requestFocus()
方法聚焦TextField
,并将_textSelection
变量设置为null
,以在点击TextField
时清除选择。tyu7yeag4#
使用null check:
dxxyhpgq5#
我想在这里讨论两个问题(也是可能的解决方案)。
1.主题
这通常发生在您没有在
MaterialApp
中显式提供theme
/darkTheme
时。您可以选择提供
Theme()
小部件,将其 Package 在您现在代码中的Text
小部件上。同时确保您有Scaffold
。请记住,此主题仅适用于Text
小部件。1.空感知
为了避免出现运行时错误,请在调用
copyWith()
之前添加?
,这是另一个答案(以及控制台中的Flutter)的建议。这意味着它仅在存在可复制的定义时才复制您指定的值。换句话说,它将忽略您的规范并使用默认值而不会抛出错误。要获得更多说明,请提供更多代码并添加注解!