美文网首页
文本组件常用的案例

文本组件常用的案例

作者: 爱吃豆包 | 来源:发表于2021-01-03 18:24 被阅读0次

介绍五个项目中常用的文本组件案例:

后面还有每个案例的单独代码

  1. 过渡颜色的文字
  2. 带前后置标签的文本
  3. “服务协议”效果
  4. 登录密码输入框
  5. 评论回复
截屏2021-01-03 下午6.21.52.png
import 'dart:ui';

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

/**
 * 文本组件案例:
 * 介绍五个项目中常用的文本组建案例:
 *  1. 过渡颜色的文字
 *  2.带前后置标签的文本
 *  3.“服务协议”效果
 *  4.登录密码输入框
 *  5.评论回复
 *   
 */
class TestCase extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: [
          Builder(
            // Builder 组件式为了计算当前组件(当前是Text)的大小, 生成LinearGradien(渲染对象)
            builder: (BuildContext context) {
              // 获取当前渲染对象
              RenderBox box = context.findRenderObject();
              // 线性渐变
              final Shader linearGradient = LinearGradient(
                colors: <Color>[Colors.purple, Colors.blue], // 渐变颜色
              ).createShader(// 创建材质(面板)
                  // Rect 表示矩形
                  Rect.fromLTWH(0.0, 0.0, box?.size?.width, box?.size?.height));

              return Text(
                "这是过度颜色的文字",
                style: new TextStyle(
                  fontSize: 18.0,
                  fontWeight: FontWeight.bold,
                  foreground: Paint()..shader = linearGradient,
                ),
              );
            },
          ),
          RichText(
            // 富文本组件
            text: TextSpan(style: DefaultTextStyle.of(context).style, // 使用默认样式
                children: <InlineSpan>[
                  // 嵌套多个文本相关组件
                  //  WidgetSpan 这个控件支持接入任何Widget
                  // 有图文混合的需求的,使用这个类非常合适
                  WidgetSpan(
                      child: Container(
                    // EdgeInsets 指定填充方向:
                    //     fromLTRB(double left, double top, double right, double, bottom):分别指定四个方向的填充。
                    //     all(double value) : 所有方向均使用相同数值的填充。
                    //     only({left, top, right ,bottom }):可以设置具体某个方向的填充(可以同时指定多个方向)。
                    //     symmetric({vertical, horizontal}):用于设置对称方向的填充,vertical指top和bottom,horizontal指left和right。
                    margin: EdgeInsets.only(right: 10),
                    padding: EdgeInsets.symmetric(horizontal: 10),
                    // decoration 装饰属性
                    decoration: BoxDecoration(
                        // BoxDecoration 盒子装饰
                        shape: BoxShape.rectangle,
                        borderRadius: BorderRadius.all(Radius.circular(20)),
                        color: Colors.blue),
                    child: Text(
                      '标签',
                      style: TextStyle(color: Colors.white),
                    ),
                  )),
                  TextSpan(text: '带前后置标签的文本'),
                ]),
          ),
          Text.rich(
            TextSpan(
                text: '登录即代表同意并阅读',
                style: TextStyle(fontSize: 11, color: Color(0xFF999999)),
                children: [
                  TextSpan(
                    text: '《服务协议》',
                    style: TextStyle(
                        color: Colors.blue, fontWeight: FontWeight.bold),
                    recognizer: TapGestureRecognizer()
                      ..onTap = () {
                        print('onTap');
                      },
                  ),
                ]),
          ),
          TextField(
            // decoration 装饰属性
            decoration: InputDecoration(
              // 输入时的装饰
              fillColor: Color(0x30cccccc), // 填充的颜色
              filled: true, // 填充时是否填满
              // enabledBorder 启用了输入的时候的边框样式
              enabledBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Color(0x00FF0000)), // 边框样式
                  borderRadius: BorderRadius.all(Radius.circular(100))), // 边框圆角
              hintText: '输入密码', // 未输入时的提示文字
              // focusedBorder 获取焦点的时候的边框样式
              focusedBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Color(0x00000000)), // 边框样式
                  borderRadius: BorderRadius.all(Radius.circular(100))), // 边框圆角
            ),
            textAlign: TextAlign.center, // 内容居中
            obscureText: true, // 是否启用文字模糊保护(也就是内容显示为 *****)
            onChanged: (value) {
              print('输入框文字有变化:' + value);
            },
          ),
          Text.rich(
            TextSpan(
                text: '回复',
                style: TextStyle(fontSize: 11, color: Color(0xFF999999)),
                children: [
                  TextSpan(
                    text: '@weiximei:',
                    style: TextStyle(
                        color: Colors.blue, 
                        fontWeight: FontWeight.bold
                    ),
                    recognizer: TapGestureRecognizer()..onTap = () {
                        print('手势触发了点击onTap:');
                    },
                  ),
                  TextSpan(
                    text: '今天在干什么呢?',
                  ),
                ]),
          )
        ],
      ),
    );
  }
}

每个例子代码:

#过渡颜色的文字

Builder(
            // Builder 组件式为了计算当前组件(当前是Text)的大小, 生成LinearGradien(渲染对象)
            builder: (BuildContext context) {
              // 获取当前渲染对象
              RenderBox box = context.findRenderObject();
              // 线性渐变
              final Shader linearGradient = LinearGradient(
                colors: <Color>[Colors.purple, Colors.blue], // 渐变颜色
              ).createShader(// 创建材质(面板)
                  // Rect 表示矩形
                  Rect.fromLTWH(0.0, 0.0, box?.size?.width, box?.size?.height));

              return Text(
                "这是过度颜色的文字",
                style: new TextStyle(
                  fontSize: 18.0,
                  fontWeight: FontWeight.bold,
                  foreground: Paint()..shader = linearGradient,
                ),
              );
            },
          )
截屏2021-01-03 下午6.21.06.png

Builder组件是为了计算当前Text组件大小,生成LinearGradient。

#带前后置标签的文本

RichText(
            // 富文本组件
            text: TextSpan(style: DefaultTextStyle.of(context).style, // 使用默认样式
                children: <InlineSpan>[
                  // 嵌套多个文本相关组件
                  //  WidgetSpan 这个控件支持接入任何Widget
                  // 有图文混合的需求的,使用这个类非常合适
                  WidgetSpan(
                      child: Container(
                    // EdgeInsets 指定填充方向:
                    //     fromLTRB(double left, double top, double right, double, bottom):分别指定四个方向的填充。
                    //     all(double value) : 所有方向均使用相同数值的填充。
                    //     only({left, top, right ,bottom }):可以设置具体某个方向的填充(可以同时指定多个方向)。
                    //     symmetric({vertical, horizontal}):用于设置对称方向的填充,vertical指top和bottom,horizontal指left和right。
                    margin: EdgeInsets.only(right: 10),
                    padding: EdgeInsets.symmetric(horizontal: 10),
                    // decoration 装饰属性
                    decoration: BoxDecoration(
                        // BoxDecoration 盒子装饰
                        shape: BoxShape.rectangle,
                        borderRadius: BorderRadius.all(Radius.circular(20)),
                        color: Colors.blue),
                    child: Text(
                      '标签',
                      style: TextStyle(color: Colors.white),
                    ),
                  )),
                  TextSpan(text: '带前后置标签的文本'),
                ]),
          )

截屏2021-01-03 下午6.20.28.png

#“服务协议”

通常在登录页面的底部会出现登录即代表同意并阅读 《服务协议》,其中《服务协议》为蓝色且可点击:

Text.rich(
  TextSpan(
      text: '登录即代表同意并阅读',
      style: TextStyle(fontSize: 11, color: Color(0xFF999999)),
      children: [
        TextSpan(
          text: '《服务协议》',
          style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),
          recognizer: TapGestureRecognizer()
            ..onTap = () {
              print('onTap');
            },
        ),
      ]),
)

image

#登录密码输入框

TextField(
            // decoration 装饰属性
            decoration: InputDecoration(
              // 输入时的装饰
              fillColor: Color(0x30cccccc), // 填充的颜色
              filled: true, // 填充时是否填满
              // enabledBorder 启用了输入的时候的边框样式
              enabledBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Color(0x00FF0000)), // 边框样式
                  borderRadius: BorderRadius.all(Radius.circular(100))), // 边框圆角
              hintText: '输入密码', // 未输入时的提示文字
              // focusedBorder 获取焦点的时候的边框样式
              focusedBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Color(0x00000000)), // 边框样式
                  borderRadius: BorderRadius.all(Radius.circular(100))), // 边框圆角
            ),
            textAlign: TextAlign.center, // 内容居中
            obscureText: true, // 是否启用文字模糊保护(也就是内容显示为 *****)
            onChanged: (value) {
              print('输入框文字有变化:' + value);
            },
 )

image

#评论回复

Text.rich(
            TextSpan(
                text: '回复',
                style: TextStyle(fontSize: 11, color: Color(0xFF999999)),
                children: [
                  TextSpan(
                    text: '@weiximei:',
                    style: TextStyle(
                        color: Colors.blue, 
                        fontWeight: FontWeight.bold
                    ),
                    recognizer: TapGestureRecognizer()..onTap = () {
                        print('手势触发了点击onTap:');
                    },
                  ),
                  TextSpan(
                    text: '今天在干什么呢?',
                  ),
                ]),
          )
截屏2021-01-03 下午6.19.46.png

相关文章

  • 文本组件常用的案例

    介绍五个项目中常用的文本组件案例: 后面还有每个案例的单独代码 过渡颜色的文字 带前后置标签的文本 “服务协议”效...

  • Flutter常用组件的讲解

    TextWidget文本组件讲解 TextWidget的常用属性 TextAlign:文本对齐属性(TextAli...

  • Flutter

    简书地址 github传送们 常用组件 常用组件1. 重要概念2. 容器组件3. 图片组件4. 文本组件4.1...

  • Flutter-基础组件二

    1.基本组件 1)Text 文本组件 2)RichText 富文本 常用属性: text:需要设置TextSpan...

  • TextField-文本输入组件

    TextField 是文本输入组件,即输入框,常用组件之一。基本用法: 不需要任何参数,一个最简单的文本输入组件就...

  • Flutter 之Text、TextSpan

    Text组件常用属性 属性描述data必填项 文本信息style文本的样式信息strutStyle文本字体的样式信...

  • Flutter之Widget

    1.TextWidget文本组件 常用属性,Style属性的用法,让文本漂亮起来 1.TextAlign 文本对齐...

  • Flutter--TextField学习

    一、TextField学习 TextField 是文本输入组件,即输入框,常用组件之一 二、TextField源码...

  • 组件分享之后端组件——docconv组件将文档转换为纯文本

    组件分享之后端组件——docconv组件将文档转换为纯文本 背景 近期正在探索前端、后端、系统端各类常用组件与工具...

  • 表单设计

    前言 数据录入是使用表单组件最多的场景, 我们将常用于此场景的组件分成三种: 文本录入,选择录入和文件上传。 文本...

网友评论

      本文标题:文本组件常用的案例

      本文链接:https://www.haomeiwen.com/subject/jbqpoktx.html