flutter学习笔记之文本和富文本

2019/12/22 12:10:12 | 阅3571 来源:好空间网络 [打印] [关闭]
 

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      title: "tttttttttt",
      home: Scaffold(
        appBar: AppBar(
          title: Text("我是标题"),
        ),
        body: HomeContext(),
      ),
    );
  }
}

//自定义的Widget
class HomeContext extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return TextRich();
  }
}

//文本演示
class TextContext extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text(
        "<<定风波>> 苏轼\n莫听穿林打叶声,何妨吟啸且徐行。\n竹杖芒鞋轻胜马,谁怕?\n料峭春风吹酒醒,微冷",
        style: TextStyle( //文字的修饰风格,他也是个widget
          fontSize: 20, //文字大小
          color: Colors.orange, //文字颜色 也可以 color:Color(0xffff4400),0x是固定的 ff是透明度 后面的是16进制
          fontWeight: FontWeight.w700, //文字加粗
          backgroundColor: Color(0xffff4400), //文字背景颜色
          height: 2.0,//行高
          decoration:TextDecoration.lineThrough //下划线 none:不加下划线 underline:上方 overline:下方 lineThrough:中间
        ),
        textAlign: TextAlign.center, //文字的对齐方式
        maxLines: 3, //文字修饰的行数
        overflow:TextOverflow.ellipsis,//溢出后如何处理 
      ),
    );
  }
}


//富文本
class TextRich extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text.rich(
          TextSpan(
            text: 'hello world',
            children: [
              TextSpan(
                text: '<<定风波>>',
                style: TextStyle(fontSize: 30,color: Colors.red)
              ),

              TextSpan(
                text: '苏轼',
                style: TextStyle(fontSize: 18,color: Colors.yellow)
              ),
            
              TextSpan(
                text: '\n莫听穿林打叶声,何妨吟啸且徐行。      ',
                style: TextStyle(fontSize: 22,color: Colors.blue)
              )
            
            ]
          ),
          textAlign: TextAlign.center,//让文字居中     
        )
      ],
    );

1:文本:

文本的参数我都在代码里面详细备注了

显示效果为:


TIM图片20191222102148.png


2:富文本:

富文本比较有意思,学习的时候看了10几遍,感觉都会了,但是自己动手写的时候却废了...

Text.rich 需要传入一个 TextSpan()

这个TextSpan比较有意思

他可以传入

TextSpan(
                text: '<<定风波>>',
                style: TextStyle(fontSize: 30,color: Colors.red)
              ),

作为独立一行处理,也可以这样写

TextSpan(
            text: 'hello world',
            children: [
              TextSpan(
                text: '<<定风波>>',
                style: TextStyle(fontSize: 30,color: Colors.red)
              ),
             ]
         )

他还带了个 children的数组,这个数组里面还可以在传入TextSpan....多重嵌套

总结:如果文本只有一行,那么直接写text,Style即可 如果有多行,那么在Text.rich里面直接传入多个TextSpan即可


Text.rich 还有个参数可以让文本居中 

textAlign: TextAlign.center 但是这个居中,需要文字是整整一行,也就是说需要文本把这行撑开,在这行上面或者下面的行里的文字不够一行的时候,他们才会居中,个人认为这样不好

所以我在外面包了一层 row 设置row的主轴居中 这样就实现了文本的居中对齐

效果如图:


TIM图片20191222102148.png

最新评论
  • 好空间:
    Text.rich()这个组件,好有自动换行的功能,但文字超出后他会自动换行,这个是上次写没有发现的问题
    评论时间:2019/12/26 15:8:11
经营许可证ICP:皖B2-20100052 公司邮箱:zcdnsz@jspkongjian.net
Copyright © 2004-2015, 安徽好空间网络科技有限公司 版权所有 , 本站素材部分来源于网络,如有侵权请告知删除。