flutter自定义按钮-文本按钮

这篇具有很好参考价值的文章主要介绍了flutter自定义按钮-文本按钮。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

需求

实现


前言

最近闲着无聊学习了flutter的一下知识,发现flutter和安卓之间,页面开发的方式还是有较大的差异的,众所周知,android的页面开发都是写在xml文件中的,而flutter直接写在代码里(dart文件中),从目前我的认识来看,两者在UI上的“套娃”方式,flutter更能套,简直就是“套中套”啊哈哈。比如今天的手写一个最简单的自定义按钮吧,效果如下图所示

flutter自定义按钮-文本按钮,学习记录,flutter

需求

  • 带文本的普通按钮,可修改字体大小和字体颜色
  • 提供修改背景色,按下后的背景色支持
  • 支持圆角和边框
  • 提供点击事件的回调

 这几个需求还是毕竟常用的,目前没考虑渐变色和图标,具体需求具体改吧

实现

本次demo的代码本身属于练手,相当于flutter的"hello world"(毕竟我才刚了解flutter没几天)

以下是具体的代码实现:

import 'package:flutter/material.dart';

class CustomTextButton extends StatefulWidget {
  //按钮的宽度
  final double? width;
  //按钮的长度
  final double? height;
  final String text;
  final double? textSize;
  final Color textColor;
  final Color backgroundColor;
  final Color pressedBackgroundColor;
  final VoidCallback onClick;
  final double borderRadius;
  final Color borderColor;

  const CustomTextButton(
      {super.key,
      required this.onClick,
      required this.text,
      this.textSize = 16,
      this.width = double.infinity,
      required this.height,
      this.backgroundColor = Colors.white,
      this.pressedBackgroundColor = Colors.white,
      this.borderRadius = 0.0,
      this.borderColor = Colors.white,
      this.textColor = Colors.black});

  @override
  State<CustomTextButton> createState() => _CustomTextButtonState();
}

class _CustomTextButtonState extends State<CustomTextButton> {
  bool _isPressed = false;

  @override
  Widget build(BuildContext context) {
    return ConstrainedBox(
      constraints:
          BoxConstraints.expand(width: widget.width, height: widget.height),
      child: GestureDetector(
        onTap: () {
          widget.onClick();
        },
        onTapDown: (details) {
          setState(() {
            _isPressed = true;
          });
        },
        onTapUp: (details) {
          setState(() {
            _isPressed = false;
          });
        },
        child: Container(
          alignment: Alignment.center,
          decoration: BoxDecoration(
              color: _isPressed
                  ? widget.pressedBackgroundColor
                  : widget.backgroundColor,
              borderRadius: BorderRadius.circular(widget.borderRadius),
              border: Border.fromBorderSide(
                  BorderSide(width: 1, color: widget.borderColor))),
          child: Text(
            widget.text,
            maxLines: 1,
            overflow: TextOverflow.ellipsis,
            style: TextStyle(
              color: widget.textColor,
              fontSize: widget.textSize,
              fontStyle: FontStyle.normal,
            ),
          ),
        ),
      ),
    );
  }
}

extension HexColor on Color {
  /// String is in the format "aabbcc" or "ffaabbcc" with an optional leading "#".
  static Color fromHex(String hexString) {
    final buffer = StringBuffer();
    if (hexString.length == 6 || hexString.length == 7) buffer.write('ff');
    buffer.write(hexString.replaceFirst('#', ''));
    return Color(int.parse(buffer.toString(), radix: 16));
  }

}

代码演示,如何使用,这个还是非常简单易懂的,有什么需要改进的地方,也请大佬指示改进。文章来源地址https://www.toymoban.com/news/detail-692062.html

Container(
                  margin: const EdgeInsets.only(left: 20, right: 20),
                  child: CustomTextButton(
                    text: '注册',
                    textSize: 18,
                    textColor: Colors.white,
                    backgroundColor: HexColor.fromHex("F9AC00"),
                    pressedBackgroundColor: HexColor.fromHex("E0CE32"),
                    height: 44,
                    borderRadius: 30,
                    onClick: () {
                      Fluttertoast.showToast(
                          msg: "您按了注册",
                          toastLength: Toast.LENGTH_SHORT,
                          gravity: ToastGravity.BOTTOM,
                          timeInSecForIosWeb: 1,
                          backgroundColor: Colors.black12,
                          textColor: Colors.black,
                          fontSize: 14.0);
                    },
                  ),
                ),

到了这里,关于flutter自定义按钮-文本按钮的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网页设计学习记录-常用圆角按钮css

    效果图

    2024年02月07日
    浏览(36)
  • Android Studio 学习记录-按钮控件(Button)

    目录 按钮控件(Button)         textAllCaps属性         onClick属性 点击事件和长按事件 禁用与恢复按钮         本文介绍按键控件的常见用法,包括:如何设置大小写属性,如何响应按钮的点击事件和长按事件,如何禁用按钮又该如何启用按钮,等等。        

    2023年04月22日
    浏览(50)
  • 【Flutter】创建应用顶级组件,应用根组件 (学习记录)

    在 Flutter 中,应用的顶级组件或根组件通常是在 main() 函数中通过 runApp() 方法创建的。这个组件通常是一个 MaterialApp、CupertinoApp、GetMaterialApp 或其他类似的应用框架组件。 以下是一个创建 MaterialApp 作为根组件的示例: 在这个示例中,MyApp 是应用的根组件,它返回了一个 Ma

    2024年02月04日
    浏览(38)
  • 【学习记录24】vue3自定义指令

    1、html部分  2、js部分 3、实现效果 1、html部分 2、js部分 在components下创建loading文件夹,在loading文件夹里创建directive.js  在main.js中全局注册指令 1、在components下创建loading文件夹,在loading文件夹里创建directive.js 2、在loading文件夹里创建loading.vue 3、在loading文件夹里放入一张G

    2024年01月19日
    浏览(43)
  • Flutter 组件(三)按钮类组件

    Flutter开发笔记 Flutter 组件(三)按钮类组件 - 文章信息 - Author: Jack Lee (jcLee95) Visit me at: https://jclee95.blog.csdn.net Email: 291148484@163.com. Shenzhen Chine Address of this article: https://blog.csdn.net/qq_28550263/article/details/131387856 【介绍】:本文介绍 Flutter 按钮类组件。 上一节:《 Flutter 组件(二

    2024年02月11日
    浏览(39)
  • Flutter组件--按钮(Button)组件

      属性  说明 onPressed 必填参数,按下按钮时触发的回调,接收一个方法,传null表示按钮禁用,会显示禁用相关样式 child 子组件 style 通过ButtonStyle装饰 ButtonStylee里面的常用的参数 属性名称 值类型  属性值 foregroundColor Color 文本颜色 backgroundColor Color 按钮的颜色 shadowColor Col

    2024年02月14日
    浏览(39)
  • 使用flutter开发一个渐变色按钮

    因为项目需要,需要使用flutter开发一个渐变色的按钮,flutter自带的按钮样式不太好调整,所以需要自定义实现,实现的思路就是使用GestureDetector嵌套Container,Container里面嵌套text实现。 实现的效果: 实现的代码:    

    2024年01月20日
    浏览(68)
  • 【MATLAB GUI】 1. 普通按钮、静态文本和可编辑文本

    看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记 任务要求:点击一次“100”按钮,按钮上的文字值就递增1;点击“close”按钮,关闭所有窗口 命令行打开GUI:命令行guide,或者appdesigner 如果左边方块没有文字说明,则点击文件-预设-在组件选项板中显示名称

    2024年02月19日
    浏览(37)
  • flutter系列之:做一个下载按钮的动画

    目录 简介 定义下载的状态 定义DownloadButton的属性 让DownloadButton的属性可以动态变化 定义downloadController 定义DownloadButton的细节 总结 我们在app的开发过程中经常会用到一些表示进度类的动画效果,比如一个下载按钮,我们希望按钮能够动态显示下载的进度,这样可以给用户一

    2024年02月06日
    浏览(39)
  • flutter开发实战-实现左右来回移动的按钮引导动画效果

    flutter开发实战-实现左右来回移动的按钮引导动画效果 最近开发过程中需要实现左右来回移动的按钮引导动画效果 AnimationController用来控制一个或者多个动画的正向、反向、停止等相关动画操作。在默认情况下AnimationController是按照线性进行动画播放的。AnimationController两个监听

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包