使文本的随机部分可点击,无需颤动中的 textSpan

ulu*_*ek 2 flutter

使文本的随机部分在不带 textSpan 的 flutter 中可点击,因为当我更改语言时,单词的顺序也会改变。对于 textSpan,我们知道文本的顺序很重要。

\n

下面有土耳其语和吉尔吉斯语的用户协议文本。如果语言环境为土耳其语,则应显示土耳其语用户协议,否则应显示吉尔吉斯语用户协议。

\n

示例文本:

\n
    \n
  1. \xd0\x9a\xd0\xb8\xd1\x80\xd2\xaf\xd2\xaf\xd0\xbd\xd2\xaf\xd0\xb1\xd0\xb0\xd1\x81\xd1\x83\xd1\x83\xd0 \xbc\xd0\xb5\xd0\xbd\xd0\xb5\xd0\xbd \xd0\xbc\xd0\xb5\xd0\xbd \xd0\ xa2\xd0\xb5\xd0\xb9\xd0\xbb\xd3\xa9 \xd3\xa9 \xd1\x88\xd0\xb0\xd1\x80\xd1\x82\xd1\x82\xd0\xb0\xd1\x80\xd1\x8b\xd0\xbd\xd0\xb0 \xd0\xbc\xd0 \xb0\xd0\xba\xd1\x83\xd0\xbb\xd0\xbc\xd1\x83\xd0\xbd
  2. \n
  3. 输入 t\xc4\xb1klayarak Hizmet \xc5\x9eartlar\xc4\xb1n\xc4\xb1 kabul ediyorum
  4. \n
\n

Ivo*_*ers 6

我这样做的方法是以某种方式标记可点击部分,例如将其包含在{}. 然后您可以这样做,例如:

\n
import \'package:flutter/gestures.dart\';\nimport \'package:flutter/material.dart\';\n\nvoid main() {\n  runApp(MaterialApp(\n      home: Column(\n    children: const [\n      TextWithLink(\n          text: "\xd0\x9a\xd0\xb8\xd1\x80\xd2\xaf\xd2\xaf\xd0\xbd\xd2\xaf \xd0\xb1\xd0\xb0\xd1\x81\xd1\x83\xd1\x83 \xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb5\xd0\xbd \xd0\xbc\xd0\xb5\xd0\xbd {\xd0\xa2\xd0\xb5\xd0\xb9\xd0\xbb\xd3\xa9\xd3\xa9 \xd1\x88\xd0\xb0\xd1\x80\xd1\x82\xd1\x82\xd0\xb0\xd1\x80\xd1\x8b\xd0\xbd\xd0\xb0 \xd0\xbc\xd0\xb0\xd0\xba\xd1\x83\xd0\xbb\xd0\xbc\xd1\x83\xd0\xbd}"),\n      TextWithLink(\n          text: "Enter\'a t\xc4\xb1klayarak {Hizmet \xc5\x9eartlar\xc4\xb1n\xc4\xb1} kabul ediyorum")\n    ],\n  )));\n}\n\nclass TextWithLink extends StatelessWidget {\n  final String text;\n  static final regex = RegExp("(?={)|(?<=})");\n\n  const TextWithLink({Key? key, required this.text}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    final split = text.split(regex);\n    return RichText(\n        text: TextSpan(\n      children: <InlineSpan>[\n        for (String text in split)\n          text.startsWith(\'{\')\n              ? TextSpan(\n                  text: text.substring(1, text.length - 1),\n                  style: const TextStyle(\n                      decoration: TextDecoration.underline, color: Colors.blue),\n                  recognizer: TapGestureRecognizer()\n                    ..onTap = () => print("click"),\n                )\n              : TextSpan(text: text),\n      ],\n    ));\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n

在此输入图像描述

\n