Flutter实现Text完美封装

使用惯了android的布局,对Flutter的组件和布局简直深恶痛绝啊,于是下定决心,一点一点封装Flutter的基础组件,今天封装的是Text组件,自认为封装的非常完美,完全可以用android布局的写法来写Text了,而且可以直接设置margin,padding,color,font,等等所有的属性,只需要一行代码就能实现,废话不多说,先看效果

我们可以看到,颜色,边框,圆角通通都设置完成了,还有其他的属性,就不都一一展示了,实现这个效果需要哪些代码呢?看下面

TextView(
            "自定义textview自定义textview自定义textview自定义textview自定义textview",
            backgroundColor: Colors.red,
            textColor: Colors.white,
            padding: 10,
            cornerRadius: 10,
            borderColor: Colors.yellow,
            borderWidth: 1,
            marginTop: 5,
            singleLine: false,
          )

是的,跟android布局的方法完全一样,再也不用嵌套container再也不要写什么style了!!!

具体的封装实体类如下,为了纪念android,我叫他TextView,具体属性参考代码里面,应该都很简单易懂吧

import 'package:flutter/material.dart';

class TextView extends StatelessWidget {
  double? padding = 0;
  double? margin = 0;
  double? paddingLeft = 0;
  double? paddingRight = 0;
  double? paddingTop = 0;
  double? paddingBottom = 0;
  double? marginLeft = 0;
  double? marginRight = 0;
  double? marginTop = 0;
  double? marginBottom = 0;
  double? fontSize = 0;
  Color? textColor = Colors.black;
  Color? backgroundColor = Colors.white;
  AlignmentGeometry? alignment = Alignment.center;
  double? cornerRadius = 0;
  double? borderWidth = 0;
  Color? borderColor = Colors.white;
  String content = "";
  bool? singleLine = false;
  bool? isBold = false;

  TextView(this.content,
      {this.textColor,
      this.backgroundColor,
      this.padding,
      this.paddingTop,
      this.paddingBottom,
      this.paddingRight,
      this.paddingLeft,
      this.cornerRadius,
      this.borderColor,
      this.borderWidth,
      this.marginBottom,
      this.marginLeft,
      this.marginRight,
      this.marginTop,
      this.margin,
      this.fontSize,
      this.singleLine,
      this.isBold}) {
    if (padding != null) {
      if (padding != null && padding! > 0) {
        paddingLeft = padding;
        paddingRight = padding;
        paddingBottom = padding;
        paddingTop = padding;
      }
    }

    if (margin != null) {
      if (margin != null && margin! > 0) {
        marginLeft = margin;
        marginTop = margin;
        marginRight = margin;
        marginBottom = margin;
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.fromLTRB(this.marginLeft ?? 0, this.marginTop ?? 0,
          this.marginRight ?? 0, this.marginBottom ?? 0),
      decoration: new BoxDecoration(
        border: new Border.all(
            width: this.borderWidth ?? 0,
            color: this.borderColor ?? Colors.white),
        color: this.backgroundColor,
        borderRadius:
            new BorderRadius.all(new Radius.circular(this.cornerRadius ?? 0)),
      ),
      padding: EdgeInsets.fromLTRB(this.paddingLeft ?? 0, this.paddingTop ?? 0,
          this.paddingRight ?? 0, this.paddingBottom ?? 0),
      child: Text(
        content,
        style: TextStyle(
            color: this.textColor,
            fontSize: this.fontSize ?? 14,
            fontWeight:
                this.isBold ?? false ? FontWeight.bold : FontWeight.normal,
            overflow: this.singleLine ?? false
                ? TextOverflow.ellipsis
                : TextOverflow.clip),
      ),
    );
  }
}

到此这篇关于Flutter完美封装Text的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Flutter 封装一个 Banner 轮播图效果的实例代码

    实际业务开发中,首页一般都会存在一个轮播图. 在 Flutter 中,如何开发一个轮播? 了解需求 首先,我们在开发一个功能的时候要了解这个功能的需求,那一个轮播需要有什么功能? 1. 可以自定义高度和一些属性 2. 展示图片 3. 自动翻页播放 4. 点击事件 5. 指示器 6. 人为拖动的时候关闭自动播放 其中「人为拖动的时候关闭自动播放」是比较难的,我们后续会说,那先一个一个功能来实现. 自定义高度和一些属性 这里主要是做一些前期的工作,如果我们的 Banner 要开源让别人来使用,那我们

  • Flutter 如何封装文本输入框组件

    UI组件封装的考虑要点 封装一个 UI 组件,通常需要考虑下面这三个点: 接口如何定义:即组件接收什么输入参数来控制组件的外观和行为: 与业务分离:UI 组件应当只负责界面,而不负责业务,具体的业务应当由业务层完成: 简单易用:因为是 UI 组件,要尽可能地简单易用,方便使用者快速上手. 文本输入框接口定义 首先先看一下我们上一篇使用文本框的代码,这里实际上只是调用了一个函数返回新的组件,之所以要这么做是因为用户名.密码使用了成员属性,需要根据不同的成员属性来设置不同的行为,主要有: 文本框装饰

  • Flutter实现矩形取色器的封装

    前言 最近看插件库上少有的取色器大都是圆形的或者奇奇怪的的亚子,所以今天做两个矩形的颜色取色器 提示:以下是本篇文章正文内容,下面案例可供参考 一.BarTypeColorPicker 条形选色板的功能实现,颜色的获取是通过位置来判断,然后赋予相应的颜色.这个封装好的组件可通过colorListener.onTapUpListener的回调方法,把颜色传出去. 代码如下(示例): import 'package:flutter/cupertino.dart'; import 'package:f

  • Flutter实现Text完美封装

    使用惯了android的布局,对Flutter的组件和布局简直深恶痛绝啊,于是下定决心,一点一点封装Flutter的基础组件,今天封装的是Text组件,自认为封装的非常完美,完全可以用android布局的写法来写Text了,而且可以直接设置margin,padding,color,font,等等所有的属性,只需要一行代码就能实现,废话不多说,先看效果 我们可以看到,颜色,边框,圆角通通都设置完成了,还有其他的属性,就不都一一展示了,实现这个效果需要哪些代码呢?看下面 TextView( "自定义

  • android6.0运行时权限完美封装方法

    前几天看了郭大神的运行时权限的专讲,深受启发,由于现在基于目前项目中的运行时权限封装的还不是那么完美,趁着郭神建议的还是历历在目.于是把它完整的敲了下来.并在此基础上添加上自己的一些见解,封装成一个完整的demo,希望与大家进行交流与. 在这里我进行了简单的在activity中简单进行获取权限和工具类封: 某一个权限被禁止或者是所有的权限被禁止,这里我做了去到烯烃界面去设置的处理: 如果要开启多个权限的话,则可能不同的手机显示的效果不同,有些手机在权限Dialog上显示需要获取权限的个数,但有些

  • Android实现左滑退出Activity的完美封装

    1:定义一个自己的父级容器,让它继承自一个布局(LinearLayout.RelativeLayout都可以) public class SildingFinishLayout extends RelativeLayout implements View.OnTouchListener { /** * SildingFinishLayout布局的父布局 */ private ViewGroup mParentView; /** * 处理滑动逻辑的View */ private View touc

  • 教你用java完美封装微信模板消息的发送动态

    目录 导入maven依赖 模板实例 实体类代码 Remark Miniprogram //小程序相关数据,无小程序可以不填,或者填充空串 Keyword,中间keyword部分 First 首个数据 JsonRootBean ,整合实体类所有数据 发送模板消息用到的工具类 发送消息工具类 发送模板案例 效果 导入maven依赖 <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</ar

  • Flutter 网络请求框架封装详解

     Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 HttpClient.第三方网络请求 http以及 Flutter 中的 Dio.我们可以比较一下这三种网络请求方式,然后封装为我们方便请求网络的工具类. Dart 原生的网络请求 HttpClient 实现 Dart 获取网络数据的请求,一般我们需要以下几个步骤: step 1: 原生的网络请求时不需要修改 pubspec.yaml 文件的,我们只需要在使用的地方引入所需包就可以了 i

  • Flutter Dio二次封装的实现

    目录: DioManager:Dio辅助类NWMethod:请求方法,get.post等 NWApi:大家都知道 EntityFactory:json转换辅助工厂,把json转为T BaseEntity<T>:数据基类,返回的参数为 {"code": 0, "message": "", "data": {}} BaseListEntity<T>:数据基类2,返回的参数为 {"code"

  • flutter text组件使用示例详解

    目录 正文 Text组件 Text组件构造器上的主要属性 正文 flutter组件的实现参考了react的设计理念,界面上所有的内容都是由组件构成,同时也有状态组件和无状态组件之分,这里简单介绍最基本的组件. 在组件代码的书写方式上,web端开发的样式主要有由css进行控制,而客户端开发根据使用的技术栈不同,写法也稍微有些不同:ReactNative的写法和web比较类似,但是ReactNative是使用StyleSheet.create()方法创建样式对象,以内联的方式进行书写. import

  • 详解Flutter中网络框架dio的二次封装

    其实dio框架已经封装的很好了,但是在实战项目中,为了项目可以统一管理,还是需要对dio框架进行二次封装. 整体思路:一般情况下,后台返回的数据我们可以分为两部分 1.状态数据 2.渲染数据 状态数据就是接口有没有正常返回数据相关的数据,这部分数据跟业务无关,我们可以封装起来统一管理,渲染数据就是我们渲染页面所需要的数据,这块的数据需要我们自己处理. 接下来我们就主要处理渲染数据这块的内容,我定义了两个函数,渲染数据可能为一个对象或者一个数组,我做了分别处理,定义两个函数来接受渲染数据. //

  • Flutter验证码输入框的2种方法实现

    目录 重点是什么? 从头开始制作 OTP 字段 使用第三个包 结论 本文向您展示了在 Flutter 中实现完美的验证码输入框几种不同方法. 重点是什么? 真实世界的 完美的验证码输入框或 PIN 输入 UI 通常满足以下最低要求: 有4个或6个文本域,每个文本域只能接受1个字符(通常是一个数字) 输入数字后自动聚焦下一个字段 您经常在需要电话号码确认.电子邮件或双因素身份验证的应用程序中看到此功能. 从头开始制作 OTP 字段 应用预览 此示例创建一个简单的 OTP 屏幕.首先,聚焦第一个输入

  • JavaScript使用链式方法封装jQuery中CSS()方法示例

    本文实例讲述了JavaScript使用链式方法封装jQuery中CSS()方法.分享给大家供大家参考,具体如下: 主要思路就是:返回this对象,将所获取的操作元素放入一个数组中.在原型中添加拓展方法 <html> <head> <title></title> </head> <body> <div id="one">aa</div> </body> <script typ

随机推荐