Flutter 颤振提取文本小部件并在不同位置修改它

Flutter 颤振提取文本小部件并在不同位置修改它,flutter,dart,Flutter,Dart,我有一个数据,它正在不同的文本中使用。下面是代码片段 var data = "Hello world"; Text( data, style: TextStyle(fontSize: 10), ); Text( data, style: TextStyle(fontSize: 15), ); Text( data, style: TextStyle(fontSize: 20), ); 正如您所看到的,文本(数据)在所有人中都很常见,所以我想我可以制作如下内容: v

我有一个
数据
,它正在不同的
文本中使用。下面是代码片段

var data = "Hello world";

Text(
  data,
  style: TextStyle(fontSize: 10),
);

Text(
  data,
  style: TextStyle(fontSize: 15),
);

Text(
  data,
  style: TextStyle(fontSize: 20),
);
正如您所看到的,
文本(数据)
在所有人中都很常见,所以我想我可以制作如下内容:

var text = Text("Hello World");

text.copyWith(style: TextStyle(fontSize: 10));

text.copyWith(style: TextStyle(fontSize: 15));

text.copyWith(style: TextStyle(fontSize: 20));

但这是不可能的,任何人都可以告诉我如何实现这样的目标?

也许你可以通过将它变成一个函数来实现它

可能是这样的:

Widget textFunction(int fontsize){
    return Text(
             data,
             style: TextStyle(fontSize: fontsize),
           );
}
你这样称呼它:

...
textFunction(10),
textFunction(15),
textFunction(20),
...

定义fontSize变量

var fontSize = 5.0;
然后使用for循环

Column(
  children: <Widget>[
    for (int i = 0; i <= 2; i++)
      Text(
        "Hello World!",
        style: TextStyle(fontSize: fontSize += 5),
      ),
    ],
  );
列(
儿童:[

对于(inti=0;i我也遇到了同样的问题,我就是这样解决的。我有一个小部件,可以创建一个链接文本(像一个普通的
html标记)

PS:本例中缺少一些代码片段,但它们无助于解决此问题

为我解决这个问题的代码如下:

Text(
  this.label.data,
  style: this.label.style.merge(
    TextStyle(
      color: color ??
          this.label.style.color ??
          defaultPrimaryColor,
    ),
  ),
)
因为标签被显式标记为文本小部件,所以我使用构造器中的文本重新创建了另一个文本小部件,然后我合并/修改了我感兴趣的样式……在本例中,只修改了颜色

color??this.label.style.color??defaultPrimaryColor

如果下面这些对我有用的话,那就太好了,但事实并非如此:(


所以您想用Text.copyWith(style:TextStyle(fontSize:20))替换文本(data,style:TextStyle(fontSize:20)).即使它能工作,也看不到它的好处。毕竟你编写的代码量是一样的。@Marc我认为在第一种情况下,我创建了3个不同的
文本
,在第二种情况下,我只是重复使用了
文本的一个实例,但无论如何都不会这样。谢谢你,我知道我可以这样做,但我不想为它寻找函数。如果你要使您的第二段代码正常工作,请执行以下操作:var text1=Text(“Hello World”);var text2=Text(“Hello World”);var text3=Text(“Hello World”);并为每一段代码指定所需的样式。我怀疑作者是否考虑到了这一点。他希望重新使用文本小部件(可能在内存中),因为对代码的每一次尝试都会产生更复杂的代码,很可能会产生更多的打字和思考。对我来说,这个问题没有任何有意义的解决方案。@Marc是的,你是对的,@Lekr0抱歉,这不是我在看的,我既不想在
列中使用我的
文本
,也不想设置
fontSize
5
的倍数,为简单起见,我使用了该代码。不过,感谢您的回复!我认为创建
文本一次并使用3次或更长时间会更好。
Text(
  this.label.data,
  style: this.label.style.merge(
    TextStyle(
      color: color ??
          this.label.style.color ??
          defaultPrimaryColor,
    ),
  ),
)
this.label..style.merge(
                  TextStyle(
                    color: color ??
                        this.label.style.color ??
                        defaultPrimaryColor,
                  ),
                )