1. flutter TextFormField的使用

TextFormField 就是输入框,支持不同的输入模式,比如邮箱,手机号,或者nunber

  1. autofocus //是否对焦
  2. keyboardType //输入模式
  3. initialValue //默认值
  4. decoration InputDecoration TextFormField专门的输入边界

示例

  1. import 'package:demoflutter/utils/utlis.dart';
  2. import 'package:flutter/material.dart';
  3. class Demo2 extends StatelessWidget {
  4. @override
  5. Widget build(BuildContext context) {
  6. // TODO: implement build
  7. return Scaffold(
  8. appBar: AppBar(
  9. title: Text('输入弹窗'),
  10. ),
  11. body: SingleChildScrollView(
  12. padding: EdgeInsets.symmetric(horizontal: 24),
  13. child: Column(
  14. children: <Widget>[
  15. SizedBox(
  16. height: 32,
  17. ),
  18. TextFormField(
  19. //是否自动对焦
  20. autofocus: false,
  21. //输入模式,邮件
  22. keyboardType: TextInputType.emailAddress,
  23. //输入框,默认值
  24. initialValue: '1332232323@qq.com',
  25. decoration: InputDecoration(
  26. //输入框内边距
  27. contentPadding:
  28. EdgeInsets.symmetric(horizontal: 20, vertical: 10),
  29. //输入框内容提示
  30. hintText: '请输入弹窗',
  31. //输入框边距线
  32. border: OutlineInputBorder(
  33. borderRadius: BorderRadius.circular(32))),
  34. ),
  35. SizedBox(height: 20,),
  36. TextFormField(
  37. //输入内容,隐藏
  38. obscureText:true,
  39. autofocus: false,
  40. decoration: InputDecoration(
  41. contentPadding: EdgeInsets.symmetric(horizontal: 20,vertical: 10),
  42. hintText: '请输入密码',
  43. border: OutlineInputBorder(
  44. borderRadius: BorderRadius.circular(32)
  45. )
  46. ),
  47. ),
  48. SizedBox(height: 20,),
  49. FlatButton(onPressed: (){
  50. Utils.showToast(context,'啦啦啦啦啦啦啦');
  51. }, child: Text('忘记密码?',style: TextStyle(fontSize: 16,color: Colors.black),))
  52. ],
  53. ),
  54. ),
  55. );
  56. }
  57. }

2. TextFormField

代码示例

原2

  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. ///整理
  4. //TextField 输入文本 decoration 配置边框样式以及提示文本分析篇
  5. class TextFeildHomePage5 extends StatefulWidget {
  6. @override
  7. State<StatefulWidget> createState() {
  8. return TextFeildHomePageState();
  9. }
  10. }
  11. class TextFeildHomePageState extends State {
  12. ///用来控制 TextField 焦点的获取与关闭
  13. FocusNode focusNode = new FocusNode();
  14. ///文本输入框是否可编辑
  15. bool isEnable = true;
  16. @override
  17. void initState() {
  18. super.initState();
  19. ///添加获取焦点与失去焦点的兼听
  20. focusNode.addListener((){
  21. ///当前兼听的 TextFeild 是否获取了输入焦点
  22. bool hasFocus = focusNode.hasFocus;
  23. ///当前 focusNode 是否添加了兼听
  24. bool hasListeners = focusNode.hasListeners;
  25. print("focusNode 兼听 hasFocus:$hasFocus hasListeners:$hasListeners");
  26. });
  27. /// WidgetsBinding 它能监听到第一帧绘制完成,第一帧绘制完成标志着已经Build完成
  28. WidgetsBinding.instance.addPostFrameCallback((_) {
  29. ///获取输入框焦点
  30. FocusScope.of(context).requestFocus(focusNode);
  31. });
  32. }
  33. @override
  34. Widget build(BuildContext context) {
  35. return Scaffold(
  36. appBar: AppBar(
  37. actions: <Widget>[
  38. FlatButton(child: Text("获取焦点"),onPressed: (){
  39. FocusScope.of(context).requestFocus(focusNode);
  40. },),
  41. FlatButton(child: Text("失去焦点"),onPressed: (){
  42. focusNode.unfocus();
  43. },),
  44. FlatButton(child: Text("编辑"),onPressed: (){
  45. setState(() {
  46. isEnable = true;
  47. });
  48. },),
  49. FlatButton(child: Text("不可编辑"),onPressed: (){
  50. setState(() {
  51. isEnable = false;
  52. });
  53. },),
  54. ],
  55. ),
  56. body: Container(
  57. ///SizedBox 用来限制一个固定 width height 的空间
  58. child: SizedBox(
  59. width: 400,
  60. height: 130,
  61. child: Container(
  62. color: Colors.white24,
  63. ///距离顶部
  64. margin: EdgeInsets.only(top: 30),
  65. padding: EdgeInsets.all(10),
  66. ///Alignment 用来对齐 Widget
  67. alignment: Alignment(0, 0),
  68. ///文本输入框
  69. child: TextField(
  70. ///是否可编辑
  71. enabled: isEnable,
  72. ///焦点获取
  73. focusNode: focusNode,
  74. ///用来配置 TextField 的样式风格
  75. decoration: InputDecoration(
  76. ///设置输入文本框的提示文字
  77. ///输入框获取焦点时 并且没有输入文字时
  78. hintText: "请输入用户名",
  79. ///设置输入文本框的提示文字的样式
  80. hintStyle: TextStyle(color: Colors.grey,textBaseline: TextBaseline.ideographic,),
  81. ///输入框内的提示 输入框没有获取焦点时显示
  82. labelText: "用户名",
  83. labelStyle: TextStyle(color: Colors.blue),
  84. ///显示在输入框下面的文字
  85. helperText: "这里是帮助提示语",
  86. helperStyle: TextStyle(color: Colors.green),
  87. ///显示在输入框下面的文字
  88. ///会覆盖了 helperText 内容
  89. errorText: "这里是错误文本提示",
  90. errorStyle: TextStyle(color: Colors.red),
  91. ///输入框获取焦点时才会显示出来 输入文本的前面
  92. prefixText: "prefix",
  93. prefixStyle: TextStyle(color: Colors.deepPurple),
  94. ///输入框获取焦点时才会显示出来 输入文本的后面
  95. suffixText: "suf ",
  96. suffixStyle: TextStyle(color: Colors.black),
  97. ///文本输入框右下角显示的文本
  98. ///文字计数器默认使用
  99. counterText: "count",
  100. counterStyle:TextStyle(color: Colors.deepPurple[800]),
  101. ///输入文字前的小图标
  102. prefixIcon: Icon(Icons.phone),
  103. ///输入文字后面的小图标
  104. suffixIcon: Icon(Icons.close),
  105. ///与 prefixText 不能同时设置
  106. // prefix: Text("A") ,
  107. /// 与 suffixText 不能同时设置
  108. // suffix: Text("B") ,
  109. ///设置边框
  110. /// InputBorder.none 无下划线
  111. /// OutlineInputBorder 上下左右 都有边框
  112. /// UnderlineInputBorder 只有下边框 默认使用的就是下边框
  113. border: OutlineInputBorder(
  114. ///设置边框四个角的弧度
  115. borderRadius: BorderRadius.all(Radius.circular(10)),
  116. ///用来配置边框的样式
  117. borderSide: BorderSide(
  118. ///设置边框的颜色
  119. color: Colors.red,
  120. ///设置边框的粗细
  121. width: 2.0,
  122. ),
  123. ),
  124. ///设置输入框可编辑时的边框样式
  125. enabledBorder: OutlineInputBorder(
  126. ///设置边框四个角的弧度
  127. borderRadius: BorderRadius.all(Radius.circular(10)),
  128. ///用来配置边框的样式
  129. borderSide: BorderSide(
  130. ///设置边框的颜色
  131. color: Colors.blue,
  132. ///设置边框的粗细
  133. width: 2.0,
  134. ),
  135. ),
  136. disabledBorder: OutlineInputBorder(
  137. ///设置边框四个角的弧度
  138. borderRadius: BorderRadius.all(Radius.circular(10)),
  139. ///用来配置边框的样式
  140. borderSide: BorderSide(
  141. ///设置边框的颜色
  142. color: Colors.red,
  143. ///设置边框的粗细
  144. width: 2.0,
  145. ),
  146. ),
  147. ///用来配置输入框获取焦点时的颜色
  148. focusedBorder: OutlineInputBorder(
  149. ///设置边框四个角的弧度
  150. borderRadius: BorderRadius.all(Radius.circular(20)),
  151. ///用来配置边框的样式
  152. borderSide: BorderSide(
  153. ///设置边框的颜色
  154. color: Colors.green,
  155. ///设置边框的粗细
  156. width: 2.0,
  157. ),
  158. ),
  159. ),
  160. ),
  161. ),
  162. ),
  163. ),
  164. );
  165. }
  166. }

3. flutter中的RaisedButton设置宽度

flutter中可以通过ButtonTheme为RaisedButton设置最小宽度,示例代码如下:

  1. ButtonTheme(
  2. minWidth: 200.0,//设置最小宽度
  3. height: 100.0,
  4. child: RaisedButton(
  5. onPressed: () {},
  6. child: Text("test"),
  7. ),
  8. );

如果要让宽度跟父控件保持一致,可以使用下面的示例代码:

  1. SizedBox(
  2. width: double.infinity, // 宽度无限,跟父控件保持一致
  3. child: RaisedButton(...)
  4. )

4. Flutter 限制TextFormField输入类型

  1. Container(
  2. height: 40,
  3. child: Row(
  4. textBaseline: TextBaseline.ideographic,
  5. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  6. children: <Widget>[
  7. MyText('新密码'),
  8. Expanded(
  9. child: TextFormField(
  10. maxLines: 1,
  11. textAlign: TextAlign.right,
  12. inputFormatters: [
  13. WhitelistingTextInputFormatter(RegExp("[a-z,A-Z,0-9]")), //限制只允许输入字母和数字
  14. // WhitelistingTextInputFormatter.digitsOnly, //限制只允许输入数字
  15. // LengthLimitingTextInputFormatter(8), //限制输入长度不超过8位
  16. ],
  17. style: TextStyle(
  18. color: Color(0xff333333),
  19. fontSize: 12.0,
  20. ),
  21. decoration: InputDecoration(
  22. hintText: '字母+数字',
  23. contentPadding: EdgeInsets.symmetric(vertical: 1),
  24. hintStyle: TextStyle(fontSize: 12.0, color: Colors.grey),
  25. border: OutlineInputBorder(borderSide: BorderSide.none)),
  26. )),
  27. ],
  28. ),

5. Flutter-Text设置边距

  1. new Text('Text style',
  2. textAlign: TextAlign.center,
  3. style: new TextStyle(
  4. fontSize: 12.0,
  5. fontWeight: FontWeight.bold,
  6. color: Colors.black,),
  7. overflow: TextOverflow.ellipsis,
  8. ),

其中textAlign是用来控制文本对齐方式,style控制文本包括字体,颜色,字体大小等样式。
Text文本是没有边距的设置参数,我们使用ContainerPaddingText嵌套使用。
**

  1. new Container( child: new Text("Container text"),
  2. color: Colors.blue,
  3. margin: const EdgeInsets.all(5.0),
  4. padding: const EdgeInsets.all(5.0),),