一、组件分析

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;
 //接收参数写法:1:
// const CreateMyInput(
// {Key key,
// this.iconString,
// this.placeholder,
// this.isPassword,
// @required this.inputController})
// : super(key: key);
//接收参数写法2:。。这种写法更简洁一点
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),

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

获取输入框的值

void _mylogin() async{

    print({'手机号': phoneController, '密码': passwordController.text});
if(phoneController.text == ''){
showToast("请输入手机号码");
return;
}
if(passwordController.text == ''){
showToast("请输入密码");
return;
}
var data= {
'Identifier': phoneController.text,
'Credential': passwordController.text
};
SharedPreferences _prefs = await SharedPreferences.getInstance();
await post('Login/UserLogin',formData:params).then((val){
print('dddddd:>>>>>>>>>>>>>-----------------------------------$val');
_prefs.setString('mobile',phoneController.text);
});
}

注意一些创建布局的方法以及逻辑方法要与Widget build并列

Widget build(BuildContext context) {//..}
void _mylogin() async{//...} Widget _createLogo() {//...}

  

flutter 自定义输入框组件的更多相关文章

  1. Flutter 中的常见的按钮组件 以及自定义按钮组件

    Flutter 里有很多的 Button 组件很多,常见的按钮组件有:RaisedButton.FlatButton. IconButton.OutlineButton.ButtonBar.Float ...

  2. 移动端自定义输入框的vue组件 ----input

    <style scoped lang="less"> .keyboard { font-family: -apple-system, BlinkMacSystemFon ...

  3. DateBox( 日期输入框) 组件

    本节课重点了解 EasyUI 中 DateBox(日期输入框)组件的使用方法,这个组件依赖于 Combo(自定义下拉框)和 Calendar(日历). 一. 加载方式//class 加载方式<i ...

  4. 基于JQ的自定义弹窗组件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 基于Vue的数字输入框组件开发

    1.概述 Vue组件开发的API:props.events和slots 2.组件代码 github地址:https://github.com/MengFangui/VueInputNumber 效果: ...

  6. 第二百一十五节,jQuery EasyUI,DateBox(日期输入框)组件

    jQuery EasyUI,DateBox(日期输入框)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 DateBox(日期输入框)组件的使 ...

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

    jQuery EasyUI,NumberBox(数值输入框)组件 功能:只能输入数值,和各种数值的计算 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI ...

  8. vue自定义select组件

    1.目的 看了很多element-ui的源码,决定自己实现一个简单的select组件,遇到的几个难点,便记录下来. 2.难点一 element-ui中的select组件通过v-model可以绑定数据, ...

  9. [Input-number]数字输入框组件

    需求 加.减按钮 初始值 最大.最小值 数值改变时,触发一个自定义事件来通知父组件 目录文件 index.html 入口页 input-number.js 数字输入框组件 index.js 根实例 实 ...

随机推荐

  1. pytorch multi-gpu train

    记录一下pytorch如何进行单机多卡训练: 官网例程:https://pytorch.org/tutorials/beginner/blitz/data_parallel_tutorial.html ...

  2. POST 请求中 multipart/form-data、 application/x-www-form-urlencoded 的区别

    以 Postman 为工具来看一下这两个编码类型的数据格式,假设我们需要传输的数据为 { "name": "test", "age": 18 ...

  3. setInterval动态时间处理

  4. Token令牌管理权限

    什么是token HTTP是一种无状态的协议,也就是HTTP没法保存客户端的信息,没办法区分每次请求的不同. Token是服务器生成的一串字符,作为客户端请求的令牌.当第一次登陆后,服务器会分发Ton ...

  5. 进入js

    JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECM ...

  6. Javascript—DOM

    1.什么是DOM? DOM 是 W3C(万维网联盟)的标准.DOM 定义了访问 HTML 和 XML 文档的标准: "W3C 文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本 ...

  7. Apache:SSLCertificateFile:文件不存在或为空(操作系统RHEL7)

    配置参数及报错信息(配置了TLS加密后httpd服务无法启动) 我在httpd.conf文件中引用了上面创建的文件.但在那之后,当我尝试RESTART Apache时,我遇到以下错误: 错误:SSLC ...

  8. tensorflow例子-【老鱼学tensorflow】

    本节主要用一个例子来讲述一下基本的tensorflow用法. 在这个例子中,我们首先伪造一些线性数据点,其实这些数据中本身就隐藏了一些规律,但我们假装不知道是什么规律,然后想通过神经网络来揭示这个规律 ...

  9. Codeforces 1110D. Jongmah 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF1110D.html 题意 给定 n 个数,每一个数都是在 [1,m] 里的整数. 从中取出形如 {x,x,x ...

  10. CLR Via 第一 章 知识点整理(2)程序集和CLR的启动

    这一节先简单的讨论一下程序集以及CLR的初始化 虽然对应的编译器会生成托管模块,但实际上CLR不与托管模块工作,编译器除了编译还有将生成的托管模块转换为程序集的功能,微软还提供了工具AL.exe(程序 ...