Flutter 将函数指定给Dart/FLETAR中的变量

Flutter 将函数指定给Dart/FLETAR中的变量,flutter,dart,Flutter,Dart,我正在尝试使用函数(返回字符串)对文本小部件执行操作。如果我直接使用getName(),效果很好 但是如果通过下面这样的动态变量分配函数,它会抛出一个错误。我想在按下按钮时更新名称 Text(title, style:kText20White), Button( title: 'Change Name', onPressed: (){ setState((){ value = 1; }); { ) dynamic title; int value = 0; @ov

我正在尝试使用函数(返回字符串)对
文本
小部件执行操作。如果我直接使用getName(),效果很好

但是如果通过下面这样的动态变量分配函数,它会抛出一个错误。我想在按下按钮时更新名称

Text(title, style:kText20White),
Button(
 title: 'Change Name',
 onPressed: (){
   setState((){
     value = 1;
   });
 {
)

dynamic title;
int value = 0;

@override
void initState() {
 super.initState();
 title = getName;
}

String getName(){
 if(name == 0){
   return 'Taarak';
 } else {
   return 'Harshad';
 }
错误:
type'()=>String'不是类型“String”的子类型。


是否可以通过变量按函数分配字符串?

如果引用函数,则必须在此处调用函数

字符串标题;
字符串getName(){
返回“名字”;
}
title=getName//这里您引用的是一个函数,您必须在这里调用函数
文本(标题、样式:kText20White)
解决方案:

title = getName();

试试这个。

您正在引用一个函数,您必须在那里调用函数

字符串标题;
字符串getName(){
返回“名字”;
}
title=getName//这里您引用的是一个函数,您必须在这里调用函数
文本(标题、样式:kText20White)
解决方案:

title = getName();

试试这个。

我终于明白你想做什么了。

您需要检查title的变量类型并按类型划分调用。

这是最终的解决方案

Text(title is String ? title : title(), style:kText20White),
Button(
 title: 'Change Name',
 onPressed: (){
   setState((){
     value = 1;
   });
 {
)

dynamic title;
int value = 0;

@override
void initState() {
 super.initState();
 title = getName;
}

String getName(){
 if(name == 0){
   return 'Taarak';
 } else {
   return 'Harshad';
 }

我终于明白你想做什么了。

您需要检查title的变量类型并按类型划分调用。

这是最终的解决方案

Text(title is String ? title : title(), style:kText20White),
Button(
 title: 'Change Name',
 onPressed: (){
   setState((){
     value = 1;
   });
 {
)

dynamic title;
int value = 0;

@override
void initState() {
 super.initState();
 title = getName;
}

String getName(){
 if(name == 0){
   return 'Taarak';
 } else {
   return 'Harshad';
 }


这对我的用例没有帮助。为了更好地理解我的用例,我编辑了我的问题。我更改了内容并更新了您的代码。我希望稍后使用字符串变量分配标题,但为标题提供()将不允许我这样做。不在文本小部件上提及()而直接通过变量传递函数是不可能的吗?我在理解了您想要做的事情后更新了内容。太好了!!这成功了!这对我的用例没有帮助。为了更好地理解我的用例,我编辑了我的问题。我更改了内容并更新了您的代码。我希望稍后使用字符串变量分配标题,但为标题提供()将不允许我这样做。不在文本小部件上提及()而直接通过变量传递函数是不可能的吗?我在理解了您想要做的事情后更新了内容。太好了!!这成功了!这将把getName()的输出分配给该标题,该标题以后不可更新。为了更好地理解我的用例,我编辑了我的问题。@VipiNNegi在本例中,您只需将变量类型注释作为字符串,使用字符串而不是动态。这将把getName()的输出分配给标题,标题以后不可更新。为了更好地理解我的用例,我编辑了我的问题。@VipiNNegi在这种情况下,您只需将变量类型注释作为字符串,使用字符串而不是动态的。
Text(title(),…)
Text
小部件不需要函数,它需要字符串。您可以提供函数,直到它返回字符串。我不明白您在说什么(“直到它返回?”),你能重写它吗?哦,你想等待网络请求、异步事件或
Future
?然后使用
FutureBuilder
对不起,我的英语很抱歉。我的意思是“只要它返回”函数字符串。我不需要使用FutureBuilder,因为我的字符串是静态的。请检查getName()仅供参考。您只想在文本存在时显示
Text
小部件?您可以使
getName
返回空值,并使用条件呈现:内部构建,
var name=getName()
if(name)Text(name)
Text(title(),…)
取而代之的是,
文本
小部件不需要函数,它需要字符串。你可以提供函数,直到它返回字符串。我不明白你在说什么(“直到它返回?”),你能重写它吗?哦,您想等待网络请求、异步事件还是
未来
?然后使用
FutureBuilder
对不起,我的英语太差了。我的意思是“只要它从函数返回”字符串。我不需要使用FutureBuilder,因为我的字符串是静态的。检查getName()以供参考。您只想在文本存在时显示
Text
小部件吗?您可以使
getName
返回为null,并使用条件呈现:内部构建、
var name=getName()
if(name)Text(name)