flutter 输入框组件封装

一、组件分析

ui如下

根据UI分析我们需要提取哪些是动态的,可以通过传递参数得到不同的结果?

1.左侧icon

2.输入的文本

3.是否是密码框

4.输入框的控制器:如何控制输入框的回调函数

二、快速创建自定义组件

vscode中使用快捷键stl快速生成一个无状态组件,

class CreateMyInput extends StatelessWidget {

@override

Widget build(BuildContext context) {

return Container(

);

}

}

为什么这里使用的是一个无状态组件(StatelessWidget)?,这里只是一个纯展示的,给定固定的参数就会返回固定的结果,而不是涉及自定义组件内部状态交互。因此选择无状态组件。

下面是建立好的无状态组件模板

import ‘package:flutter/material.dart‘;

class CreateMyInput extends StatelessWidget {

final iconString;

final placeholder;

final isPassword;

final inputController;

// const CreateMyInput(

// {Key key,

// @required this.iconString,

// @required this.placeholder,

// @required this.isPassword,

// @required this.inputController})

// : super(key: key);

CreateMyInput({this.iconString,this.placeholder,this.isPassword,this.inputController});

@override

Widget build(BuildContext context) {

return Container(

padding: EdgeInsets.fromLTRB(15.0,5,15.0,5),

child: Row(

children: <Widget>[

Image.asset(iconString,width: 25,color:Color(0xff2D4ED1)),

Expanded(

child: Container(

margin: EdgeInsets.only(left: 15),

decoration:BoxDecoration(

border:Border(bottom: BorderSide(width: 0.8,color: Color(0xff2D4ED1))), //底部border

),

padding: EdgeInsets.fromLTRB(0, 0, 5, 0),

child: TextField(

controller: inputController,

decoration: InputDecoration(

hintText: placeholder,

contentPadding: EdgeInsets.fromLTRB(0, 17, 15, 15), //输入框内容部分设置padding,跳转跟icon的对其位置

border:InputBorder.none,

),

obscureText: isPassword, //是否是以星号*显示密码

),

),

)

],

),

);

}

}

三、外部使用自定义组

import ‘../base_widgit/create_my_input.dart‘;

//手机号的控制器

TextEditingController phoneController = TextEditingController();

//密码的控制器

TextEditingController passwordController = TextEditingController();

CreateMyInput(iconString:‘images/login_icon_phone.png‘,placeholder:"请输入手机号",isPassword:false,inputController:phoneController),

注意使用的时候参数需要加类型

原文地址:https://www.cnblogs.com/ruoqiang/p/10783088.html

时间: 2024-10-16 20:38:09

flutter 输入框组件封装的相关文章

Linux组件封装之五:生产者消费者问题

生产者,消费者问题是有关互斥锁(MutexLock).条件变量(Condition).线程(Thread)的经典案例: 描述的问题可以叙述为 生产者往buffer中投放产品,而消费者则从buffer中消费产品. 生产着消费者问题的难点在于: 为了缓冲区数据的安全性,一次只允许一个线程进入缓冲区投放或者消费产品,这个buffer就是所谓的临界资源. 生产者往缓冲区中投放产品时,如果缓冲区已满,那么该线程需要等待,即进入阻塞状态,一直到消费者取走产品为止. 相应的,消费者欲取走产品,如果此时缓冲区为

第二百一十三节,jQuery EasyUI,NumberBox(数值输入框)组件

jQuery EasyUI,NumberBox(数值输入框)组件 功能:只能输入数值,和各种数值的计算 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 NumberBox(数值输入框)组件的使用方法,这个组件依赖 于 ValidateBox(验证框)组件. 一.加载方式 class 加载方式 <input type="text" class="easyui-numberbox" value="10

NumberBox( 数值输入框) 组件

本节课重点了解 EasyUI 中 NumberBox(数值输入框)组件的使用方法,这个组件依赖于 ValidateBox(验证框)组件.一. 加载方式//class 加载方式<input type="text" class="easyui-numberbox" value="100"data-options="min:0,precision:2">//JS 加载调用$('#box').numberbox({min

Linux组件封装(五)一个生产者消费者问题示例

生产者消费者问题是计算机中一类重要的模型,主要描述的是:生产者往缓冲区中放入产品.消费者取走产品.生产者和消费者指的可以是线程也可以是进程. 生产者消费者问题的难点在于: 为了缓冲区数据的安全性,一次只允许一个线程进入缓冲区,它就是所谓的临界资源. 生产者往缓冲区放物品时,如果缓冲区已满,那么需要等待,一直到消费者取走产品为止. 消费者取走产品时,如果没有物品,需要等待,一直到有生产者放入为止. 第一个问题属于互斥问题,我们需要使用一把互斥锁,来实现对缓冲区的安全访问. 后两个属于同步问题,两类

DateBox( 日期输入框) 组件

本节课重点了解 EasyUI 中 DateBox(日期输入框)组件的使用方法,这个组件依赖于 Combo(自定义下拉框)和 Calendar(日历). 一. 加载方式//class 加载方式<input id="box" type="text" class="easyui-datebox"required="required">//JS 加载调用$('#box').datebox({}); 二. 属性列表 //属性

Android Binder进程间通信---注册Service组件---封装进程间通信数据

本文参考<Android系统源代码情景分析>,作者罗升阳 一.测试代码: -/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp ----IFregService.h ~/Android/external/binder/client ----FregClient.cpp Binder库(libbinder)代码: ~/Android/fra

基于iView的列表组件封装

封装的好处多多,代码便于维护.减少代码量.减少BUG 前台封装以前没有尝试过,这回试试,哈哈 目录 1.列表组件封装 2.树组件封装 3.下拉框组件封装 4.上传组件封装 列表组件的API  属性 说明 类型 默认值  url 请求列表数据的地址 必填  String 无 pagingOption 列表底部是否显示分页信息及总数,有两个配置项 showPaging.showTotal Object 显示分页及总数信息 cols 列定义 必填 Array 无 height 列表高度 选填 Numb

vue + elementui 中的弹窗组件封装成公共组件

如果一个弹窗比较简单,可以直接放在页面中,通过visible属性的true,false控制显示隐藏就可以了,我们今天要说的是将个比较复杂的弹窗组件封装成全局组件,然后可以在项目中的任何一个页面引用~~下面走起 1.首先要注册个全局组件,用下面的全局API  Vue.component('my-component', { /* ... */ }) 在js文件中首先引入这个弹窗组件,组件名称是iesPersonRadioDialog,项目中会引入一个js文件,这个js文件中在分别引入其他的js,模块

【input】输入框组件说明

input输入框组件 原型: <input value="[String]" type="[text | number | idcard | digit]" password="[Boolean]" placeholder="[String]" placeholder-style="[String]" placeholder-class="[String]" disabled=&q