Flutter 车牌号键盘和输入框底部弹框

2024-01-23 02:10

本文主要是介绍Flutter 车牌号键盘和输入框底部弹框,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下载car_number_view

Flutter版的车牌号输入键盘和输入框,样式和12123类似 ,支持键盘和输入框分开使用;都是使用Widget组装,然后处理一下逻辑;

import 'package:car_number_view/main.dart';
import 'package:flutter/material.dart';import '../utils/color_res.dart';
import '../utils/screen_utils.dart';
import '../utils/string_utils.dart';
import 'carnumber_constants.dart';openCarNumberViewDialog(BuildContext context , String carNumber){showModalBottomSheet(context: context,shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)),builder: (w){return CarNumberKeyView(carNumber);});
}
//通过路由的方式打开
openCarNumberViewRoute(BuildContext context , String carNumber){Navigator.push(context, PageRouteBuilder(opaque: false,pageBuilder: (context, animation, secondaryAnimation){return SlideTransition(position: Tween(begin: Offset(0, 1), end: Offset(0, 0)).animate(animation),child:  Scaffold(backgroundColor: Colors.black38,body: Align(alignment: AlignmentDirectional.bottomCenter,child: CarNumberKeyView(carNumber))),);},));
}///车牌号数据框+车牌号键盘-底部弹框
class CarNumberKeyView extends StatefulWidget {const CarNumberKeyView(this.car_number , {Key? key}) : super(key: key);final String? car_number;@overrideState<CarNumberKeyView> createState() => _CarNumberKeyViewState();
}class _CarNumberKeyViewState extends State<CarNumberKeyView> {final String mABC = "ABC";final String mProvince = "省份";final String mDelete = "<-";String carNumber = "";bool isInputABC = false;int maxCarNumberLength = 8;@overrideinitState(){super.initState();carNumber = widget.car_number??'';isInputABC = carNumber.isNotEmpty;}@overrideWidget build(BuildContext context) {return Container(width: ScreenUtils.getScreenWidth(context),height: (380),decoration: const BoxDecoration(color: Colors.white,borderRadius: BorderRadius.only(topLeft: Radius.circular(5) , topRight: Radius.circular(5) ,)),child: Column(children: [Padding(padding: EdgeInsets.symmetric(horizontal: 20),child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [InkWell(onTap:(){Navigator.pop(context);},child: Icon(Icons.keyboard_arrow_down_outlined , color: Color(0XFF6A6E74), size: (24),)),Text("编辑车牌" , style: TextStyle(color: color_00131D , fontSize: (16)),),InkWell(onTap: carNumber.length > 6 ?(){mCarNumber.value = carNumber;Navigator.pop(context);} : null,child: Container(alignment: AlignmentDirectional.center,height: (56),child: Text("确定",style: TextStyle(color: carNumber.length > 6 ? color_00131D : color_8F9296 , fontSize: (16)),)),),],),),Container(alignment: AlignmentDirectional.center,height: (92),width: ScreenUtils.getScreenWidth(context),child: Row(mainAxisSize: MainAxisSize.min,children: getCarNumberInputView(),),),Expanded(child: Container(color: color_f6f6f6,width: ScreenUtils.getScreenWidth(context),padding: EdgeInsets.only(top: 4),child: Column(crossAxisAlignment: CrossAxisAlignment.center,children: [getCarNumberKeyView(isInputABC ? carnumber_numbers : carnumber_provinces_list[0]),getCarNumberKeyView(isInputABC ? carnumber_alphabets[0]: carnumber_provinces_list[1]),getCarNumberKeyView(isInputABC ? carnumber_alphabets[1]: carnumber_provinces_list[2]),getCarNumberKeyView(isInputABC ? carnumber_alphabets[2] : carnumber_provinces_list[3], isEnd: true),],),),),],),);}List<Widget> getCarNumberInputView(){var carNumbers = StringUtils.stringToStringList(carNumber);List<Widget> views = [];for(int i = 0; i < maxCarNumberLength ; i++){if(carNumbers.length > i){views.add(carNumberInputView(carNumbers[i] , borderSelect: carNumbers.length == i, marginLeft: i==0 ? 0 : i == 2 ? 24 : 8));}else{views.add(carNumberInputView('' ,  borderSelect: carNumbers.length == i, marginLeft: i==0 ? 0 : i == 2 ? 24 : 8));}}return views;}Widget carNumberInputView(String? text , {borderSelect = false , double marginLeft = 8}){return Container(margin: EdgeInsets.only(left: (marginLeft)),alignment: AlignmentDirectional.center,width: (32),height: (44),decoration: BoxDecoration(border: Border.all(color: borderSelect ? color_00131D : color_DADBDC , width: (1) ,),borderRadius: BorderRadius.all(Radius.circular(4)),),child: Text(text ??'', style: TextStyle(color: color_00131D , fontSize: (18) , fontWeight: FontWeight.w700),),);}Widget getCarNumberKeyView(List<String> datas , {bool isEnd = false}){List<Widget> views = [];if(isEnd) views.add(Expanded(child: carNumberKeyView(isInputABC ? mProvince : mABC , backColor: color_DADBDC)));datas.forEach((e) {views.add(carNumberKeyView(e));});if(isEnd) views.add(Expanded(child: carNumberKeyView(mDelete , backColor: color_DADBDC)));return Row(mainAxisSize: MainAxisSize.min,children: views,);}Widget carNumberKeyView(String text , {backColor = color_fff} ){return InkWell(onLongPress: (){print('onLongPress');},onTap: (){setState((){if(text == "I"){print('车牌号中不存在I');//车牌号中不存在I}else if(text == mABC || text == mProvince){isInputABC = !isInputABC;}else if(text == mDelete) {carNumber = carNumber.substring(0, carNumber.isNotEmpty ? carNumber.length - 1 : 0);isInputABC = carNumber.isNotEmpty; //自动切换省份or字母逻辑}else if(carNumber.length < maxCarNumberLength){carNumber += text;isInputABC = true; //自动切换省份or字母逻辑}});},child: SizedBox(height: (48),width: ScreenUtils.getScreenWidth(context)/10,child: Card(elevation: .8,shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(4)),margin: const EdgeInsets.fromLTRB(2, 3, 2, 3),color: backColor,child: Container(alignment: AlignmentDirectional.center,height: double.infinity,width: double.infinity,child: text == mDelete ?Image.asset("lib/images/icon_rollback.png" , width: 23 , height: 17,):Text(text, style:TextStyle(color: text == 'I' ? Color(0XFFB7BABC) : color_00131D, fontSize: (18)),),),),),);}
}

全部代码在GItHub:https://github.com/CuiChenbo/car_number_view

这篇关于Flutter 车牌号键盘和输入框底部弹框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/634930

相关文章

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

键盘快捷键:提高工作效率与电脑操作的利器

键盘快捷键:提高工作效率与电脑操作的利器 在数字化时代,键盘快捷键成为了提高工作效率和优化电脑操作的重要工具。无论是日常办公、图像编辑、编程开发,还是游戏娱乐,掌握键盘快捷键都能带来极大的便利。本文将详细介绍键盘快捷键的概念、重要性、以及在不同应用场景中的具体应用。 什么是键盘快捷键? 键盘快捷键,也称为热键或快捷键,是指通过按下键盘上的一组键来完成特定命令或操作的方式。这些快捷键通常涉及同

Flutter Button使用

Material 组件库中有多种按钮组件如ElevatedButton、TextButton、OutlineButton等,它们的父类是于ButtonStyleButton。         基本的按钮特点:         1.按下时都会有“水波文动画”。         2.onPressed属性设置点击回调,如果不提供该回调则按钮会处于禁用状态,禁用状态不响应用户点击。

如何快速练习键盘盲打

盲打是指在不看键盘的情况下进行打字,这样可以显著提高打字速度和效率。以下是一些练习盲打的方法: 熟悉键盘布局:首先,你需要熟悉键盘上的字母和符号的位置。可以通过键盘图或者键盘贴纸来帮助记忆。 使用在线打字练习工具:有许多在线的打字练习网站,如Typing.com、10FastFingers等,它们提供了不同难度的练习和测试。 练习基本键位:先从学习手指放在键盘上的“家位”开始,通常是左手的

推荐练习键盘盲打的网站

对于初学者来说,以下是一些推荐的在线打字练习网站: 打字侠:这是一个专业的在线打字练习平台,提供科学合理的课程设置和个性化学习计划,适合各个水平的用户。它还提供实时反馈和数据分析,帮助你提升打字速度和准确度。 dazidazi.com:这个网站提供了基础的打字练习,适合初学者从零开始学习打字。 Type.fun打字星球:提供了丰富的盲打课程和科学的打字课程设计,还有诗词歌赋、经典名著等多样

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题 GitHub Pages是一个直接从GitHub存储库托管的静态站点服务,‌它允许用户通过简单的配置,‌将个人的代码项目转化为一个可以在线访问的网站。‌这里使用flutter build web来构建web发布到GitHub Pages。 最近通过flutter build web,通过发布到GitHu

Flutter 中的低功耗蓝牙概述

随着智能设备数量的增加,控制这些设备的需求也在增加。对于多种使用情况,期望设备在需要进行控制的同时连接到互联网会受到很大限制,因此是不可行的。在这些情况下,使用低功耗蓝牙(也称为 Bluetooth LE 或 BLE)似乎是最佳选择,因为它功耗低,在我们的手机中无处不在,而且无需连接到更广泛的网络。因此,蓝牙应用程序的需求也在不断增长。 通过阅读本文,您将了解如何开始在 Flutter 中开

Android 进入页面后默认不弹出系统键盘

在onCreate中加入一行代码getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

解决TMP_InputField 在WebGL(抖音)上不能唤起虚拟键盘,不能使用手机内置输入法的问题

整整花费了一天时间测试和解决。试验了多个方法,花了不少美刀,最终才发现抖音这个官方文档,哭了: https://partner.open-douyin.com/docs/resource/zh-CN/mini-game/develop/guide/game-engine/rd-to-SCgame/open-capacity/capability-adaptation/sc_webgl_keyboa

flutter开发多端平台应用的探索 下 (跨模块、跨语言通信之平台通道)

前文 Flutter 是一个跨平台的开发框架,它允许开发者使用相同的代码库来构建 iOS、Android、Web 和桌面应用程序。 上文flutter开发多端平台应用的探索 上(基本操作)-CSDN博客列举了一些特定平台的case(桌面端菜单,鼠标快捷键)的使用方法,有些是flutter提供了对应能力,只需要学习如何调API,有些事三方库支持,本文要探讨的平台通道是更为强大的工具,很多三方插件