Я пытаюсь установить GestureDetectors на отдельные фразы в текстовом блоке. Хотя это работает, я не хочу, чтобы GestureDetector создавал новую строку. То, что я хочу, больше похоже на текстовую ссылку в html. Что-то вроде следующего кода дает мне 3 отдельные строки, как мне получить одну строку?
Text(
'This ',
),
GestureDetector(
onTap: () {
doSomething();
},
child: Text(
'text ',
),
),
Text(
"should be in one line.",
),
Обновлено:
Row(
children: <Widget>[
Expanded(
child: Column(
children: <Widget>[
Text("Short text"),
GestureDetector(
child: Text(
"Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. "),
),
Text("Short text"),
Text(
"Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. Very long text. ")
],
),
),
],
),
В то время как решение, предложенное в комментариях, дает что-то вроде этого:
Вот что я ищу:
Спасибо, но для более длинных текстов у меня получается что-то вроде последнего скриншота выше.
Можете ли вы поделиться скриншотом того, как вы хотите, чтобы он выглядел (последний экран)?
добавил скриншот
Во-первых, вы не можете сделать это с помощью Row
или Column
, вам нужно использовать RichText
.
спасибо, что указали мне правильное направление, посмотрю на это
Я обновил код, взгляните сейчас.
Если вы используете Row
вместо Column
в качестве родителя, это должно сработать.
Row(
children: [
Text(
'This ',
),
GestureDetector(
onTap: () {
doSomething();
},
child: Text(
'text ',
),
),
Expanded( child:
Text(
"should be in one line.",
),),
],
),
Спасибо, это дает мне одну строку, но она переполняется вправо, если она слишком длинная. Я ищу решение, которое ограничено размером/шириной представления, а не переносом на каждый GestureDetector.
Просто оберните последнего ребенка, используя Expanded
он все еще переполняется, только желтый / черный перелив становится выше (высота строки без расширенного и становится выше с расширенным)
Не могли бы вы добавить скриншот?
Итак, после очистки моего кода переполнение исчезло (не знаю, что это было), но в любом случае я не смог решить свою первоначальную проблему. Добавлю скриншот в свой пост.
Я думаю, вы хотите, чтобы в какой-то части вашего абзаца был кликабельный текст.
Надеюсь, это поможет.
Спасибо, но мне нужен GestureDetector и для других жестов, кроме кликов.
var underlineStyle = TextStyle(decoration: TextDecoration.underline, color: Colors.black);
// ...
RichText(
text: TextSpan(
text: 'Basically what I want is a block of text with certain ',
style: underlineStyle.copyWith(decoration: TextDecoration.none),
children: <TextSpan>[
TextSpan(text: 'elements ', style: underlineStyle),
TextSpan(text: 'allowing for '),
TextSpan(text: 'clicks ', style: underlineStyle),
TextSpan(text: 'or '),
TextSpan(text: 'drag gestures', style: underlineStyle ),
],
),
),
Вот и все. В сочетании с TapGestureRecognizer() связь я могу построить то, что хочу
Да, в recognizer
есть TextSpan
недвижимость и это то, что вам нужно.
Пожалуйста, дайте мне знать, если у вас все еще есть проблемы с решением, представленным ниже. Спасибо :)