1. flutter TextFormField的使用
TextFormField 就是输入框,支持不同的输入模式,比如邮箱,手机号,或者nunber
autofocus //是否对焦keyboardType //输入模式initialValue //默认值decoration InputDecoration TextFormField专门的输入边界
示例
import 'package:demoflutter/utils/utlis.dart';import 'package:flutter/material.dart';class Demo2 extends StatelessWidget {@overrideWidget build(BuildContext context) {// TODO: implement buildreturn Scaffold(appBar: AppBar(title: Text('输入弹窗'),),body: SingleChildScrollView(padding: EdgeInsets.symmetric(horizontal: 24),child: Column(children: <Widget>[SizedBox(height: 32,),TextFormField(//是否自动对焦autofocus: false,//输入模式,邮件keyboardType: TextInputType.emailAddress,//输入框,默认值initialValue: '1332232323@qq.com',decoration: InputDecoration(//输入框内边距contentPadding:EdgeInsets.symmetric(horizontal: 20, vertical: 10),//输入框内容提示hintText: '请输入弹窗',//输入框边距线border: OutlineInputBorder(borderRadius: BorderRadius.circular(32))),),SizedBox(height: 20,),TextFormField(//输入内容,隐藏obscureText:true,autofocus: false,decoration: InputDecoration(contentPadding: EdgeInsets.symmetric(horizontal: 20,vertical: 10),hintText: '请输入密码',border: OutlineInputBorder(borderRadius: BorderRadius.circular(32))),),SizedBox(height: 20,),FlatButton(onPressed: (){Utils.showToast(context,'啦啦啦啦啦啦啦');}, child: Text('忘记密码?',style: TextStyle(fontSize: 16,color: Colors.black),))],),),);}}
2. TextFormField
代码示例
import 'package:flutter/cupertino.dart';import 'package:flutter/material.dart';///整理//TextField 输入文本 decoration 配置边框样式以及提示文本分析篇class TextFeildHomePage5 extends StatefulWidget {@overrideState<StatefulWidget> createState() {return TextFeildHomePageState();}}class TextFeildHomePageState extends State {///用来控制 TextField 焦点的获取与关闭FocusNode focusNode = new FocusNode();///文本输入框是否可编辑bool isEnable = true;@overridevoid initState() {super.initState();///添加获取焦点与失去焦点的兼听focusNode.addListener((){///当前兼听的 TextFeild 是否获取了输入焦点bool hasFocus = focusNode.hasFocus;///当前 focusNode 是否添加了兼听bool hasListeners = focusNode.hasListeners;print("focusNode 兼听 hasFocus:$hasFocus hasListeners:$hasListeners");});/// WidgetsBinding 它能监听到第一帧绘制完成,第一帧绘制完成标志着已经Build完成WidgetsBinding.instance.addPostFrameCallback((_) {///获取输入框焦点FocusScope.of(context).requestFocus(focusNode);});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(actions: <Widget>[FlatButton(child: Text("获取焦点"),onPressed: (){FocusScope.of(context).requestFocus(focusNode);},),FlatButton(child: Text("失去焦点"),onPressed: (){focusNode.unfocus();},),FlatButton(child: Text("编辑"),onPressed: (){setState(() {isEnable = true;});},),FlatButton(child: Text("不可编辑"),onPressed: (){setState(() {isEnable = false;});},),],),body: Container(///SizedBox 用来限制一个固定 width height 的空间child: SizedBox(width: 400,height: 130,child: Container(color: Colors.white24,///距离顶部margin: EdgeInsets.only(top: 30),padding: EdgeInsets.all(10),///Alignment 用来对齐 Widgetalignment: Alignment(0, 0),///文本输入框child: TextField(///是否可编辑enabled: isEnable,///焦点获取focusNode: focusNode,///用来配置 TextField 的样式风格decoration: InputDecoration(///设置输入文本框的提示文字///输入框获取焦点时 并且没有输入文字时hintText: "请输入用户名",///设置输入文本框的提示文字的样式hintStyle: TextStyle(color: Colors.grey,textBaseline: TextBaseline.ideographic,),///输入框内的提示 输入框没有获取焦点时显示labelText: "用户名",labelStyle: TextStyle(color: Colors.blue),///显示在输入框下面的文字helperText: "这里是帮助提示语",helperStyle: TextStyle(color: Colors.green),///显示在输入框下面的文字///会覆盖了 helperText 内容errorText: "这里是错误文本提示",errorStyle: TextStyle(color: Colors.red),///输入框获取焦点时才会显示出来 输入文本的前面prefixText: "prefix",prefixStyle: TextStyle(color: Colors.deepPurple),///输入框获取焦点时才会显示出来 输入文本的后面suffixText: "suf ",suffixStyle: TextStyle(color: Colors.black),///文本输入框右下角显示的文本///文字计数器默认使用counterText: "count",counterStyle:TextStyle(color: Colors.deepPurple[800]),///输入文字前的小图标prefixIcon: Icon(Icons.phone),///输入文字后面的小图标suffixIcon: Icon(Icons.close),///与 prefixText 不能同时设置// prefix: Text("A") ,/// 与 suffixText 不能同时设置// suffix: Text("B") ,///设置边框/// InputBorder.none 无下划线/// OutlineInputBorder 上下左右 都有边框/// UnderlineInputBorder 只有下边框 默认使用的就是下边框border: OutlineInputBorder(///设置边框四个角的弧度borderRadius: BorderRadius.all(Radius.circular(10)),///用来配置边框的样式borderSide: BorderSide(///设置边框的颜色color: Colors.red,///设置边框的粗细width: 2.0,),),///设置输入框可编辑时的边框样式enabledBorder: OutlineInputBorder(///设置边框四个角的弧度borderRadius: BorderRadius.all(Radius.circular(10)),///用来配置边框的样式borderSide: BorderSide(///设置边框的颜色color: Colors.blue,///设置边框的粗细width: 2.0,),),disabledBorder: OutlineInputBorder(///设置边框四个角的弧度borderRadius: BorderRadius.all(Radius.circular(10)),///用来配置边框的样式borderSide: BorderSide(///设置边框的颜色color: Colors.red,///设置边框的粗细width: 2.0,),),///用来配置输入框获取焦点时的颜色focusedBorder: OutlineInputBorder(///设置边框四个角的弧度borderRadius: BorderRadius.all(Radius.circular(20)),///用来配置边框的样式borderSide: BorderSide(///设置边框的颜色color: Colors.green,///设置边框的粗细width: 2.0,),),),),),),),);}}
3. flutter中的RaisedButton设置宽度
flutter中可以通过ButtonTheme为RaisedButton设置最小宽度,示例代码如下:
ButtonTheme(minWidth: 200.0,//设置最小宽度height: 100.0,child: RaisedButton(onPressed: () {},child: Text("test"),),);
如果要让宽度跟父控件保持一致,可以使用下面的示例代码:
SizedBox(width: double.infinity, // 宽度无限,跟父控件保持一致child: RaisedButton(...))
4. Flutter 限制TextFormField输入类型
Container(height: 40,child: Row(textBaseline: TextBaseline.ideographic,mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[MyText('新密码'),Expanded(child: TextFormField(maxLines: 1,textAlign: TextAlign.right,inputFormatters: [WhitelistingTextInputFormatter(RegExp("[a-z,A-Z,0-9]")), //限制只允许输入字母和数字// WhitelistingTextInputFormatter.digitsOnly, //限制只允许输入数字// LengthLimitingTextInputFormatter(8), //限制输入长度不超过8位],style: TextStyle(color: Color(0xff333333),fontSize: 12.0,),decoration: InputDecoration(hintText: '字母+数字',contentPadding: EdgeInsets.symmetric(vertical: 1),hintStyle: TextStyle(fontSize: 12.0, color: Colors.grey),border: OutlineInputBorder(borderSide: BorderSide.none)),)),],),
5. Flutter-Text设置边距
new Text('Text style',textAlign: TextAlign.center,style: new TextStyle(fontSize: 12.0,fontWeight: FontWeight.bold,color: Colors.black,),overflow: TextOverflow.ellipsis,),
其中textAlign是用来控制文本对齐方式,style控制文本包括字体,颜色,字体大小等样式。
Text文本是没有边距的设置参数,我们使用Container、Padding与Text嵌套使用。
**
new Container( child: new Text("Container text"),color: Colors.blue,margin: const EdgeInsets.all(5.0),padding: const EdgeInsets.all(5.0),),
