Есть ли способ определить, какое слово в TextSpan
было затронуто пользователем?
Этот абзац здесь, чтобы обойти робота переполнения стека, который настаивает, чтобы я писал больше :)
Есть ли способ определить, какое слово в TextSpan
было затронуто пользователем?
Этот абзац здесь, чтобы обойти робота переполнения стека, который настаивает, чтобы я писал больше :)
Вы можете улучшить сами
import 'package:flutter/gestures.dart';
...
new RichText(
text: new TextSpan(text: 'Non touchable. ', children: [
new TextSpan(
text: 'Tap here.',
recognizer: new TapGestureRecognizer()..onTap = () => print('Tap Here onTap'),
)
]),
);
text
, а не для TextSpan, предоставленного в children
.
- person surenyonjan; 17.04.2019
dispose()
метода TapGestureRecognizer
? Это необходимо?
- person Alex Semeniuk; 06.08.2019
Снимок экрана:
Используйте свойство recognizer
TextSpan
, которое допускает почти все типы событий.
RichText(
text: TextSpan(
children: [
TextSpan(
text: 'Single tap',
style: TextStyle(color: Colors.red[300]),
recognizer: TapGestureRecognizer()..onTap = () {
// Single tapped.
},
),
TextSpan(
text: ' Double tap',
style: TextStyle(color: Colors.green[300]),
recognizer: DoubleTapGestureRecognizer()..onDoubleTap = () {
// Double tapped.
}
),
TextSpan(
text: ' Long press',
style: TextStyle(color: Colors.blue[300]),
recognizer: LongPressGestureRecognizer()..onLongPress = () {
// Long Pressed.
},
),
],
),
)
Перебрать строку, чтобы получить массив строк, создать отдельный текстовый диапазон для каждой и добавить распознаватель жестов.
List<TextSpan> createTextSpans(){
final string = """Text seems like it should be so simple, but it really isn't.""";
final arrayStrings = string.split(" ");
List<TextSpan> arrayOfTextSpan = [];
for (int index = 0; index < arrayStrings.length; index++){
final text = arrayStrings[index] + " ";
final span = TextSpan(
text: text,
recognizer: TapGestureRecognizer()..onTap = () => print("The word touched is $text")
);
arrayOfTextSpan.add(span);
}
return arrayOfTextSpan;
Сделать GestureRecognizer
- это их попытка сделать что-нибудь доступным для прикосновения. распознаватель жестов, который будет получать события, которые попадают в этот Span
.
составьте простой виджет, содержащий TextSpan
с recognizer
.
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
RichText(
textAlign: TextAlign.center,
text: TextSpan(children: <InlineSpan>[
TextSpan(
text: 'By signing up, you agree to our ',
style: TextStyle(color: Colors.black87)),
TextSpan(
recognizer: TapGestureRecognizer()..onTap = () {
print('Terms and Conditions Single Tap');
},
text: 'Terms and Conditions',
style: TextStyle(
color: Colors.blueAccent,
fontWeight: FontWeight.bold)),
]),
),
RichText(
textAlign: TextAlign.center,
text: TextSpan(children: <InlineSpan>[
TextSpan(
text: 'Already have an account ',
style: TextStyle(color: Colors.black87)),
TextSpan(
recognizer: DoubleTapGestureRecognizer()..onDoubleTap = () {
print('Contact Us Double Tap');
},
text: 'Contact Us',
style: TextStyle(
color: Colors.blueAccent,
fontWeight: FontWeight.bold)),
]),
)
],
))
" "
и повторите, чтобы создать массив текстовых панелей - person Tree   schedule 22.02.2018