首页 > 其他分享 >Flutter 表单

Flutter 表单

时间:2024-01-18 21:34:43浏览次数:22  
标签:username const height decoration InputDecoration TextField 表单 Flutter

Flutter中常见的表单有TextField单行文本框,TextField多行文本框、CheckBox(多选按钮)、Radio(单选按钮)、Switch CheckboxListTile、RadioListTile、SwitchListTile、Slide。

TextField表单的基本用法

TextField表单常见属性:

示例

class TextFieldPage extends StatefulWidget {
  const TextFieldPage({super.key});
  @override
  State<TextFieldPage> createState() => _TextFieldPageState();
}

class _TextFieldPageState extends State<TextFieldPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('TextField'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(10),
          child: ListView(
            children: [
              const TextField(), //单文本框
              const SizedBox(
                height: 20,
              ),
              const TextField(
                  decoration: InputDecoration(hintText: "用户名") //提示文字
                  ),
              const SizedBox(
                height: 20,
              ),
              const TextField(
                  decoration: InputDecoration(
                      hintText: "用户名", border: OutlineInputBorder() //带边框
                      )),
              const SizedBox(
                height: 10,
              ),

              TextField(
                  obscureText: true, //密码框
                  decoration: InputDecoration(
                      hintText: "密码",
                      border: OutlineInputBorder(
                        borderRadius: BorderRadius.circular(20), //圆角
                      ),
                      suffixIcon: Icon(Icons.visibility) //
                      )),

              const SizedBox(height: 40),
              TextField(
                  decoration: InputDecoration(
                      hintText: "搜索",
                      border: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(20), //圆角
                          borderSide:
                              const BorderSide(width: 5, color: Colors.yellow)),
                      suffixIcon: const Icon(Icons.close) //框里面的后面图标
                      )),
              const SizedBox(height: 40),

              const TextField(
                  decoration: InputDecoration(
                      icon: Icon(Icons.add), //框前图标
                      prefixIcon: Icon(Icons.lock), //框里面的前面图标
                      prefixText: "http://")),
              const SizedBox(height: 40),

              const TextField(
                  maxLength: 10, //多文本框最多输入10个
                  maxLines: 4, //4行
                  decoration: InputDecoration(
                      hintText: "用户名", border: OutlineInputBorder() //带边框
                      ) //提示文字
                  ),
            ],
          ),
        ),
      ),
    );
  }
}

获取TextField表单输入的内容 

class TextFieldPage extends StatefulWidget {
  const TextFieldPage({super.key});
  @override
  State<TextFieldPage> createState() => _TextFieldPageState();
}

class _TextFieldPageState extends State<TextFieldPage> {
  late String username;
  late String password;
  late bool bools = true;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('TextField'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(10),
          child: ListView(
            children: [
              TextField(
                decoration: const InputDecoration(
                    hintText: "用户名", border: OutlineInputBorder()),
                onChanged: (value) => setState(() {
                  username = value;
                }),
              ),
              const SizedBox(
                height: 10,
              ),
              TextField(
                obscureText: bools,
                decoration: InputDecoration(
                  hintText: "密码",
                  border: OutlineInputBorder(),
                  suffixIcon: ElevatedButton(
                    onPressed: () {
                      setState(() {
                        bools = false;
                      });
                      Timer(Duration(seconds: 3), () {
                        // 3秒后执行这里的代码
                        setState(() {
                          bools = true;
                        });
                      });
                    },
                    child: Icon(Icons.visibility),
                  ),
                ),
                onChanged: (value) {
                  //获取表单的内容
                  print("-----------------$value");
                  password = value;
                },
              ),
              const SizedBox(height: 40),
              ElevatedButton(
                  onPressed: () {
                    print(username);
                    print(password);
                  },
                  child: const Text("获取信息"))
            ],
          ),
        ),
      ),
    );
  }
}

TextEditingController 配置初始化值

核心代码
  late TextEditingController _usernameController;
  String username = "zhangsan";
  String password = "";
  @override
  void initState() {
    super.initState();
    _usernameController = TextEditingController.fromValue(TextEditingValue(
        text: username,
        selection: TextSelection.fromPosition(TextPosition(
            affinity: TextAffinity.downstream, offset: username.length))));
  }
完整代码 
class TextFieldPage extends StatefulWidget {
  const TextFieldPage({super.key});
  @override
  State<TextFieldPage> createState() => _TextFieldPageState();
}

class _TextFieldPageState extends State<TextFieldPage> {
  late TextEditingController _usernameController;
  String username = "zhangsan";
  String password = "";
  @override
  void initState() {
    super.initState();
    _usernameController = TextEditingController.fromValue(TextEditingValue(
        text: username, //赋值默认值
        selection: TextSelection.fromPosition(TextPosition(
            //固定写法
            affinity: TextAffinity.downstream,
            offset: username.length))));
  }

  @override
  void dispose() {
    _usernameController.dispose(); //进行销毁
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('TextField'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(10),
          child: ListView(
            children: [
              TextField(
                controller: _usernameController, //绑定初始化参数
                decoration: const InputDecoration(
                    hintText: "用户名", border: OutlineInputBorder()),
                onChanged: (value) => setState(() {
                  username = value;
                }),
              ),
              const SizedBox(
                height: 10,
              ),
              TextField(
                obscureText: true,
                decoration: const InputDecoration(
                    hintText: "密码",
                    border: OutlineInputBorder(),
                    suffixIcon: Icon(Icons.visibility)),
                onChanged: (value) {
                  password = value;
                },
              ),
              const SizedBox(height: 40),
              ElevatedButton(
                  onPressed: () {
                    print(username);
                    print(password);
                  },
                  child: const Text("登录"))
            ],
          ),
        ),
      ),
    );
  }
}

 

标签:username,const,height,decoration,InputDecoration,TextField,表单,Flutter
From: https://www.cnblogs.com/xbinbin/p/17973361

相关文章

  • 运行新建Flutter项目, 报错Exception in thread “main“ java.net.ConnectException:
    新建项目后,直接使用demo进行安卓真机运行时报错Exceptioninthread"main"java.net.ConnectException:Connectiontimedout:connect atjava.base/sun.nio.ch.Net.connect0(NativeMethod) atjava.base/sun.nio.ch.Net.connect(Net.java:579) atjava.base/sun.nio.ch.N......
  • 利用JVS低代码引擎实现列表页和表单按钮的显隐控制
    在开发中,控制页面的元素(如按钮)的可见性是很常见的需求。特别是在需要根据特定字段的值来隐藏或显示某些元素时,例如在列表页和表单中。这样的需求在许多应用程序中都有出现,无论是电子商务平台、管理系统还是其他类型的软件。本文将深入探讨JVS低代码列表引擎中如何根据字段的值来控......
  • 自定义表单开发工具的优点是什么?
    什么是自定义表单开发工具?它的优势特点是什么?在社会化发展程度越来越高的今天,拥有功能多、性能优的自定义表单开发工具,可以助力企业提高办公协作效率,提升内部数据资源利用率,从而实现流程化办公。哪家服务商拥有丰富的低代码研发经验?流辰信息是一家专业研发低代码技术平台的服务商......
  • Flutter计算文本高度
    在开发中我们需要去计算文本的高度,从来去设置控件的高度,在flutter中我们可以使用TextPainter来计算文本高度//获取文字高度text:文字内容fontSize:字体大小fontWeight:字重height:行高maxWidth:最大宽度,maxLines:最大行数staticdoublegetTextContextSizeHeight(String......
  • 紫色登录表单
    <!DOCTYPEHTML><html><head><title>动漫网登录页</title><linkhref="css/style.css"rel="stylesheet"type="text/css"media="all"/><metahttp-equiv="Content-Type"content......
  • 03-表单标签和表单项标签
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>HTML表单标签</title></head><body><!--form表单属性:action:指定表单提交的地址method:指定表单提交的方式(g......
  • SpringSecurity表单认证(二)
    用户名+密码系统默认登录用户名:user密码每次服务启动后随机生成密码用户信息获取原理(数据库获取)实现该接口,security默认自动生成密码关闭。框架源码:packageorg.springframework.security.core.userdetails;publicinterfaceUserDetailsService{UserDetailsloa......
  • 处理HTTP请求中的表单数据
    处理HTTP请求中的表单数据是Web开发中常见的任务。在Go语言中,可以使用net/http包来解析HTTP请求中的表单数据。首先,确保你已经创建了一个HTTP服务器,并且能够接收和处理POST请求。然后,你可以使用r.ParseForm()函数来解析请求中的表单数据。以下是一个简单的示例,演示了如何处理HTTP请......
  • flutter 生命周期
    Stateless无状态组件//Stateless无状态组件比较简单就是一个build函数,每次外部新状态压入,进行调用//当Widget不再需要时,比如在页面切换或者被移除时,Flutter会销毁这些Widget。//对于StatelessWidget来说,它没有内部状态(即无可变的变量)classLeftPageextendsStatelessWidg......
  • 安装android Studio 以及flutter
    开发装备的环境配置java环境系统变量里面添加JAVA_HOME软后在path中添加java环境配置查看java是否安装成功 然后安装 系统变量添加 ANDROID_HOME  在path中添加 然后在path中添加flutter环境变量win+r/cmd ---flutterdoctor打开网址 https://......