Flutter实现一行文字多种颜色,部分文字设置点击事件

本文介绍如何在Flutter中实现文本的删除线效果、多色显示及点击交互,通过具体代码示例展示如何使用TextDecoration和RichText组件来增强文本表现力。

效果图:

上面是效果图,请看有三种效果,第一行是删除效果,第二种是文字设置不同颜色,最后的绿色还可以设置点击,代码如下:

import 'package:flutter/material.dart';
import 'package:flutter/gestures.dart';
//import 'ur';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Text示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Hello My Name is WeiWenYi,And You?...',
                maxLines: 1,
                overflow: TextOverflow.ellipsis,
                softWrap: true,
                style: TextStyle(
                  fontSize: 20.0,
                  decoration: TextDecoration.lineThrough,
                  decorationStyle: TextDecorationStyle.wavy
                ),
              ),
              SizedBox(
                height: 10.0,
              ),
              RichText(
                text: TextSpan(
                  text: '你好啊,我是很牛逼的人物哦!',
                  style: TextStyle(color: Color(0xffff0000),fontSize: 20.0),
                  children: <TextSpan>[
                    TextSpan(
                      text: '康师傅啊,,你在干嘛呀,'
                    ),
                    TextSpan(
                      text: '哒哒哒哒哒哒哒,,哈哈哈哈哈',
                      style: TextStyle(color: Color(0xff00ff00)),
                      recognizer: TapGestureRecognizer()..onTap = () async {
                        //这里做点击事件
//                        String url = 'http://www.baidu.com';
//                        if (await canlaunch(url)){
//                          await launch(url);
//                        }
                      }
                    ),
                  ],
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}

快去试试吧!

### 如何在 Flutter 中创建可点击的超链接文本 为了实现Flutter 应用程序中通过点击文本打开指定 URL 的功能,可以利用 `url_launcher` 插件。此插件允许应用程序启动统一资源标识符 (URI),例如 HTTP 和 HTTPS 网址[^1]。 #### 添加依赖项 要在项目中使用该插件,在项目的 `pubspec.yaml` 文件内添加如下依赖: ```yaml dependencies: flutter: sdk: flutter url_launcher: ^6.3.0 ``` 完成上述配置后,运行命令刷新包缓存以确保新加入的库被正确加载到工程里。 #### 创建带有超链接的文字控件 对于简单的场景来说,可以直接借助于 `GestureDetector` 或者更推荐的方式——`InkWell` 来包裹 `Text` 小部件并结合 `launchUrl` 方法调用来构建交互式的链接按钮;而对于复杂一点的需求,则可能涉及到多段不同样式的文字组合成一段连续的内容时,这时就需要考虑采用 `RichText` 结合多个 `TextSpan` 子元素来达到目的了[^3]。 下面给出两种不同的解决方案示例代码片段供参考: ##### 方案一:单个独立的超链文本 当只需要展示单一的一条带下划线样式并且能够响应触摸事件触发跳转动作的纯文本形式的超级链接时,可以选择这种方式实现: ```dart import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher_string.dart'; class SimpleHyperlink extends StatelessWidget { final String _label; final Uri _uri; const SimpleHyperlink(this._label, this._uri); @override Widget build(BuildContext context) { return InkWell( onTap: () async { if (!await launchUrlString(_uri.toString())) { throw Exception('无法启动 $_uri'); } }, child: Text( _label, style: TextStyle(color: Colors.blueAccent, decoration: TextDecoration.underline), ), ); } } ``` ##### 方案二:复合型富文本中的超链部分 如果希望在同一行中有多种字体颜色、大小或者其他属性变化的同时还包含有特定区域作为可点击链接的情况,那么应该选用这种方法来进行布局设计: ```dart import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher_string.dart'; class RichTextWithLink extends StatefulWidget { @override State<RichTextWithLink> createState() => _RichTextWithLinkState(); } class _RichTextWithLinkState extends State<RichTextWithLink> { Future<void> _launchURL(String urlString) async { await canLaunchUrlString(urlString).then((bool result){ if(result){ launchUrlString(urlString); }else{ ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("无法访问 $urlString"))); } }); } @override Widget build(BuildContext context) { return Center( child: Padding( padding: EdgeInsets.all(8.0), child: RichText( text: TextSpan( children: [ TextSpan(text: "欢迎来到"), TextSpan( recognizer: TapGestureRecognizer() ..onTap = () => _launchURL("http://example.com"), // 替换成实际要指向的目标地址 text: " Example", style: TextStyle(decoration: TextDecoration.underline,color:Colors.blue) ), TextSpan(text:"网站!") ], style: DefaultTextStyle.of(context).style.copyWith(fontSize: 24), ), ), ), ); } } ``` 以上就是有关如何在 Flutter 开发环境下制作支持点击操作从而导航至外部网页的功能介绍以及具体实践案例分享[^2].
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值