我想要创建一个‘TextSpans’‘的列表。如果你按下一个词,这个词就会变。
例如:
这棵树看起来很棒, => onTapped ' tree‘字符串应该改为这棵树,看起来很棒的。
如果再次按下该按钮,则该值应更改为默认值:,此树看起来很棒,。
有什么可以做的吗?
class Satz extends StatefulWidget {
@override
_SatzState createState() => _SatzState();
}
class _SatzState extends State<Satz> {
String stringValue= 'The tree looks great';
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blue,
body: Container(
child: ListView.builder(
itemCount: 1,
itemBuilder: (context, length,){
return RichText(
text: TextSpan(
children: createTextSpans(stringValue)));
}) )
);}}
List<TextSpan> createTextSpans(stringValue){
final string = stringValue;
final arrayStrings = string.split(" ");
List<TextSpan> arrayOfTextSpan = [];
for (int index = 0; index < arrayStrings.length; index++){
final text = arrayStrings[index] + " ";
final span = TextSpan(
text: text,
style: TextStyle(fontSize: 50),
recognizer: TapGestureRecognizer()..onTap = () {
print(text);
}
);
arrayOfTextSpan.add(span);
}
return arrayOfTextSpan;
}非常感谢。
发布于 2020-10-24 13:18:31
我可以给你个主意。试试这样的东西,
import 'package:flutter/material.dart';
import 'package:flutter/gestures.dart';
void main() {
runApp(MaterialApp(
home: Satz(),
));
}
class Satz extends StatefulWidget {
@override
_SatzState createState() => _SatzState();
}
class _SatzState extends State<Satz> {
String stringValue = 'The tree looks great';
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blue,
body: Container(
child: ListView(
children: [
RichText(
text: TextSpan(
children: stringValue.split(' ').asMap().entries.map((entry) {
String text = entry.value;
int index = entry.key;
return TextSpan(
text: text + " ",
style: TextStyle(fontSize: 50),
recognizer: new TapGestureRecognizer()
..onTap = () {
List<String> correctedValue = stringValue.replaceAll(',','').split(' ');
print(correctedValue[index]);
if(!text.contains(',')){
correctedValue[index] += ',';
}
setState(
() {
stringValue = correctedValue.join(' ');
},
);
},
);
}).toList(),
),
),
],
)),
);
}
}https://stackoverflow.com/questions/64513251
复制相似问题