我在Flutter上构建了一个应用程序,但是我遇到了带有许多TextSpan小部件的RichText小部件,并且我需要有两个手势识别器,一个是双击的,另一个是长按的,所以如果出现这种情况,我该怎么办?有可能的?
最佳答案
每个textSpan
都有其自己的text
和children
属性,您可以使用它们的recognizer
属性并根据需要实现不同的抽头。
考虑以下示例:
Container(
color: Colors.black,
padding: EdgeInsets.all(10),
child: Center(
child: RichText(
text: TextSpan( // <-- 1
text: 'This is a text from first textspan. ',
style: TextStyle(
color: Colors.grey,
fontSize: 20,
fontWeight: FontWeight.bold),
children: <TextSpan>[ // <-- 2
TextSpan(
text: ' This is a text from second textspan ',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold),
recognizer: LongPressGestureRecognizer()
..onLongPress = () {
print('Long pressed');
},
children: <
TextSpan>[ // <-- 3 (children of 2 textspan
TextSpan(
text: ' This is a another text from second textspan',
recognizer: DoubleTapGestureRecognizer()
..onDoubleTap = () {
print('double tapped');
}
)
]
),
]
),
)
)
)
注释为
children: <TextSpan>[]
的2
具有text
属性和我使用recognizer
的相应LongPressGestureRecognizer()
。相同的textSpan
(2
)具有children
属性,该属性再次可以具有带有文本的子文本范围以及我使用recognizer
的相应DoubleTapGestureRecognizer()
。因此输出将是:您可以长按
This is a text from second textspan
,也可以双击This is another text from second textspan
。希望这能回答您的问题。
关于flutter - Flutter中更多用于TextSpan的GestureRecognisers,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57236673/