当前位置: 首页 > news >正文

flutter-一个可以输入的数字增减器

效果

在这里插入图片描述
参考文章

代码

在参考文章上边,主要是改了一下样式,逻辑也比较清楚,对左右两边添加增减方法。

我在此基础上加了_numcontroller 输入框的监听。

加了数字输入框的控制

keyboardType: TextInputType.number, //设置键盘为数字
inputFormatters: [
FilteringTextInputFormatter.digitsOnly, //设置只允许输入整数
],

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';class NumChangeWidget extends StatefulWidget {final double height;int num;final ValueChanged<int> onValueChanged;final bool disabled;NumChangeWidget({Key? key,this.height = 36.0,this.num = 0,this.disabled = false,required this.onValueChanged}): super(key: key);_NumChangeWidgetState createState() {return _NumChangeWidgetState();}
}class _NumChangeWidgetState extends State<NumChangeWidget> {TextEditingController _numcontroller = TextEditingController();void initState() {super.initState();_numcontroller.addListener(_onNumChange);}void _onNumChange() {String text = _numcontroller.text;if (text.isNotEmpty) {String result = text.replaceAll(RegExp(r'^[0]+'), '');// 去掉首位0的正则替换if (result != '') {widget.num = int.parse(result);widget.onValueChanged(widget.num);}if (result != text) {_numcontroller.selection =TextSelection.fromPosition(TextPosition(offset: result.length));}}}Widget build(BuildContext context) {_numcontroller.text = widget.num.toString();return Container(height: widget.height,decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(2.0)),color: Color(0x1FFFFFFF)),child: Row(mainAxisSize: MainAxisSize.min,children: <Widget>[GestureDetector(onTap: _minusNum,child: Container(width: 32.0,alignment: Alignment.center,child: Icon(Icons.horizontal_rule_outlined,color: widget.num == 0 || widget.disabled? Color.fromRGBO(255, 255, 255, .4): Colors.white),),),Container(width: 0.5,color: Colors.black54,),Container(width: 62.0,alignment: Alignment.center,child: TextField(controller: _numcontroller, //TextEditingController,用于获取文本值keyboardType: TextInputType.number, //设置键盘为数字textAlign: TextAlign.center, // 内容左右居中maxLines: 1,decoration: const InputDecoration(border: InputBorder.none,contentPadding: EdgeInsets.only(bottom: 10),),inputFormatters: [FilteringTextInputFormatter.digitsOnly, //设置只允许输入整数],style: TextStyle(fontSize: 16, color: Colors.white),readOnly: widget.disabled),),Container(width: 0.5,color: Colors.black54,),GestureDetector(onTap: _addNum,child: Container(width: 32.0,alignment: Alignment.center,child: Icon(Icons.add_outlined,color: widget.disabled? const Color.fromRGBO(255, 255, 255, .4): Colors.white,), // 设计图),),],),);}void _minusNum() {if (widget.num == 0 || widget.disabled) {return;}setState(() {widget.num -= 1;if (widget.onValueChanged != null) {widget.onValueChanged(widget.num);}});}void _addNum() {if (widget.disabled) {return;}setState(() {widget.num += 1;if (widget.onValueChanged != null) {widget.onValueChanged(widget.num);}});}
}
http://www.lryc.cn/news/250519.html

相关文章:

  • 抑郁症中西医治疗对比?
  • 012 OpenCV sobel边缘检测
  • 【开源视频联动物联网平台】libmodbus 写一个modbus tcp客户端
  • 安装以及使用 stylepro_artistic 所遇问题解决
  • 【Rust】所有权的认识
  • 中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞)
  • matlab操作方法(一)——向量及其操作
  • MicroPython标准库
  • 2023年产业数据价值化峰会暨数栖大会-核心PPT资料下载
  • 深入理解 Vue 组件:构建优雅的前端应用
  • 基于SpringBoot+Vue的前后端分离的房屋租赁系统2
  • PHPExcel 导出Excel报错:PHPExcel_IOFactory::load()
  • Jmeter-分布式压测(远程启动服务器,windows)
  • 【C++】string类模拟实现过程中值得注意的点
  • 大数据湖项目建设方案:文档全文101页,附下载
  • 通付盾Web3专题 | SharkTeam:起底朝鲜APT组织Lazarus Group,攻击手法及洗钱模式
  • <蓝桥杯软件赛>零基础备赛20周--第8周第1讲--十大排序
  • 数据增强让模型更健壮
  • Redis远程字典服务
  • Hdoop学习笔记(HDP)-Part.15 安装HIVE
  • vue3+element-plus之el-date-picker日期选择器清空无回调的解决方案
  • 【虚拟机】Docker基础 【二】
  • CSS 绝对定位问题和粘性定位介绍
  • matlab 计算两点云之间的放缩倍数
  • MySQL-数据库设计与实现
  • 后端返回图片流前端展示图片
  • 解决 from . import _imaging as core ImportError: DLL load failed: 找不到指定的模块。
  • springBoot3.2 + jdk21 + GraalVM上手体验
  • Python float(input())的用法,web中的应用
  • uniapp是否可以用elementUI等前端UI库、使用步骤以及需要注意的问题