Flutter - 如何使用某种构建器在同一段落中显示具有不同样式的字符串数组?
Flutter - How to display an array of strings in the same paragraph with varying styling using a builder of some sort?
如果您能提供任何帮助,我们将不胜感激。我想不通。
我将处理 JSON 包含各种字符串数组的数据文件,我们希望所有这些文件都显示在同一个段落中。将需要以编程方式遍历数组以动态创建显示的小部件。
该段落将包含要显示为普通文本、粗体和斜体的字词。 (我们可以在结构的第二个参数中提供类型,稍后会详细介绍。)
我可以在 Flutter 中手动执行此操作,如下所示:
这是创建这个的代码片段:
(我在这里伪装了一个数据数组……真正的数据将在运行时读入。)
List data = [
"For example, ",
"this(1)",
" is bold. And ",
"this(2)",
" is italic. And, finally ",
"this(3)",
" is bold and italic."
];
return Text.rich(
TextSpan(
text: '',
children:
<InlineSpan>[
TextSpan(
text: data[0],
),
TextSpan(
text: data[1],
style: TextStyle(fontWeight: FontWeight.bold,),
),
TextSpan(
text: data[2],
),
TextSpan(
text: data[3],
style: TextStyle(fontStyle: FontStyle.italic),
),
TextSpan(text: data[4]),
TextSpan(
text: data[5],
style: TextStyle(
fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic)),
TextSpan(text: data[6]),
],
),
);
但是,我需要在运行时以编程方式创建小部件(使用某种生成器函数或其他东西)。
曾尝试使用 RichText 和 Tech.rich,但无济于事。此外,找不到有关 ParagraphBuilder 的任何有用示例(找到了 class 描述,但帮助不够)。
有谁知道如何在 Flutter 的单个段落中做这样的事情,来自 array/List/Map)
非常感谢,提前?
下面显示了一个数据数组示例和手动工作的代码(撇开如何准确提供样式类型的问题......我可以在弄清楚如何在中显示字符串后进行探索)数组中的相同段落)。
要在列表中生成小部件,您可以使用简单的 for
循环:
<InlineSpan>[
for(var string in data)
TextSpan(text: string),
]
感谢@MickaelHrndz 和@psink
@MickaelHmdz - 效果很好!!!非常感谢!
这是第一部分的相关代码——将字符串的 array/List 放入同一段落:
var list = [
"one asdfads",
"two fasdf aeer",
"three asdf 23v ar uppo ",
"four aspl ojv mepfif hepv,"
];
...
body: Center(
// Center is a layout widget. It takes a single child and positions it
// in the middle of the parent.
child: RichText(
text: TextSpan(children: <InlineSpan>[
for (var string in list)
TextSpan(text: string, style: TextStyle(color: Colors.black)),
]),
),
),
这里是 phone 上的结果截图:
更新:使用三元运算符处理 .
中的样式
完美,有样式!!!!谢谢大家!
更新结果如下:
如果您能提供任何帮助,我们将不胜感激。我想不通。
我将处理 JSON 包含各种字符串数组的数据文件,我们希望所有这些文件都显示在同一个段落中。将需要以编程方式遍历数组以动态创建显示的小部件。
该段落将包含要显示为普通文本、粗体和斜体的字词。 (我们可以在结构的第二个参数中提供类型,稍后会详细介绍。)
我可以在 Flutter 中手动执行此操作,如下所示:
这是创建这个的代码片段: (我在这里伪装了一个数据数组……真正的数据将在运行时读入。)
List data = [
"For example, ",
"this(1)",
" is bold. And ",
"this(2)",
" is italic. And, finally ",
"this(3)",
" is bold and italic."
];
return Text.rich(
TextSpan(
text: '',
children:
<InlineSpan>[
TextSpan(
text: data[0],
),
TextSpan(
text: data[1],
style: TextStyle(fontWeight: FontWeight.bold,),
),
TextSpan(
text: data[2],
),
TextSpan(
text: data[3],
style: TextStyle(fontStyle: FontStyle.italic),
),
TextSpan(text: data[4]),
TextSpan(
text: data[5],
style: TextStyle(
fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic)),
TextSpan(text: data[6]),
],
),
);
但是,我需要在运行时以编程方式创建小部件(使用某种生成器函数或其他东西)。
曾尝试使用 RichText 和 Tech.rich,但无济于事。此外,找不到有关 ParagraphBuilder 的任何有用示例(找到了 class 描述,但帮助不够)。
有谁知道如何在 Flutter 的单个段落中做这样的事情,来自 array/List/Map)
非常感谢,提前?
下面显示了一个数据数组示例和手动工作的代码(撇开如何准确提供样式类型的问题......我可以在弄清楚如何在中显示字符串后进行探索)数组中的相同段落)。
要在列表中生成小部件,您可以使用简单的 for
循环:
<InlineSpan>[
for(var string in data)
TextSpan(text: string),
]
感谢@MickaelHrndz 和@psink
@MickaelHmdz - 效果很好!!!非常感谢!
这是第一部分的相关代码——将字符串的 array/List 放入同一段落:
var list = [
"one asdfads",
"two fasdf aeer",
"three asdf 23v ar uppo ",
"four aspl ojv mepfif hepv,"
];
...
body: Center(
// Center is a layout widget. It takes a single child and positions it
// in the middle of the parent.
child: RichText(
text: TextSpan(children: <InlineSpan>[
for (var string in list)
TextSpan(text: string, style: TextStyle(color: Colors.black)),
]),
),
),
这里是 phone 上的结果截图:
更新:使用三元运算符处理 .
中的样式完美,有样式!!!!谢谢大家!
更新结果如下: