Flutter 中的表单

Flutter常用表单介绍

Flutter中常见的表单有TextField单行文本框,TextField多行文本框,CheckBox,Radis,Switch,CheckboxListTile,RadioListTile,SwitchListTile,Slide.

TextField文本框组件

TextField表单常见属性

属性描述
maxLines设置此参数可以吧文本框改为多行文本框
onChanged文本框改变的时候触发的事件
decoration

hintText     类似html中的placeholder

border       配置文本框边框 OutlineInputBorder配合使用

labelText   lable的名称

labelStyle  配置lable的样式

obscureText吧文本框框改为密码框
controllercontroller结合TextEditingController()可以配置表单默认显示的内容

普通输入框

class TextFieldTest extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        child: Column(
          children: [
            Container(
              margin: EdgeInsets.all(20),
              child: TextField(
                maxLines: 10,//可以吧文本框改为多行文本
                //obscureText: true, //设置密码框
                decoration: InputDecoration(
                    hintText: "输入框",
                    border: OutlineInputBorder()
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}

获取文本框内容

import 'package:flutter/material.dart';
import 'package:flutterappbarapp/TabPage/Tab.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Test',
      home: ScaffoldTest(),
    );
  }
}

class ScaffoldTest extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("表单测试"),
      ),
      body: TextFieldTest(),
    );
  }
}

class TextFieldTest extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return TextFieldStateTest();
  }
}

class TextFieldStateTest extends State<TextFieldTest>{
  TextEditingController _userName = TextEditingController();
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _userName.text = '这是文本框初始化';
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        child: Column(
          children: [
            Container(
              margin: EdgeInsets.all(20),
              child: TextField(
                controller: _userName,
                onChanged: (value){
                  setState(() {
                    this._userName.text = value;//当改变是重新设置进入
                  });
                },
                decoration: InputDecoration(
                    hintText: "请输入内容",
                ),
              ),
            ),
            RaisedButton(
              child: Text("获取文本框内容"),
              onPressed: (){
                setState(() {
                  print("getField Content = ${this._userName.text}");
                });
              },
            ),
            Text("Field Content = ${this._userName.text}")

          ],
        ),
      ),
    );
  }

}

Checkbox,CheckboxListTile多选框组件

checkbox常见属性

属性描述
valuetrue或者false
onChanged改变的时候触发的事件
activeColor选中的颜色,背景颜色
checkColor选中的颜色,Checkbox里面对号的颜色

class TextFieldTest extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return TextFieldStateTest();
  }
}

class TextFieldStateTest extends State<TextFieldTest>{
  bool _isSelectd = false;
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        child: Column(
          children: [
            Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Text("男"),
                Checkbox(
                  value: this._isSelectd,
                  onChanged: (v){
                    setState(() {
                      this._isSelectd = v;
                    });
                  },
                  activeColor: Colors.red,
                  checkColor: Colors.blue,
                )
              ],
            )
          ],
        ),
      ),
    );
  }
}

CheckboxListTile常见属性

属性描述
valuetrue或者false
onChanged改变的时候触发的事件
activeColor选中的颜色,背景颜色
title标题
subtitle二级标题
secondary配置图标或者图片
selected选中的时候文字颜色是否跟着改变

class TextFieldTest extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return TextFieldStateTest();
  }
}

class TextFieldStateTest extends State<TextFieldTest>{
  bool _isSelectd = false;
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        child: Column(
          children: [
            CheckboxListTile(
              value: this._isSelectd,
              title: Text("达帮主"),
              subtitle: Text("Flutter 开发CheckboxListTile"),
              onChanged: (v){
                setState(() {
                  this._isSelectd = v;
                });
              },
              activeColor: Colors.red,
              secondary: Image.network("https://www.itying.com/images/flutter/1.png"),
              selected: this._isSelectd,
            )
          ],
        ),
      ),
    );
  }
}

Radio,RadioListTile单选按钮组件

Radio 常用属性

属性描述
value单选的值
onChanged改变时触发
activeColor选中的颜色,背景颜色
groupValue选择组的值

Radio

效果:

class TextFieldTest extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return RadioStateTest();
  }
}

class RadioStateTest extends State<TextFieldTest>{
  int _groupValue = 1;
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        child: Column(
          children: [
            Row(
              children: [
                Text("男"),
                Radio(
                  value: 0,
                  onChanged: (v){
                    setState(() {
                      this._groupValue = v;
                    });
                  },
                  activeColor: Colors.red,
                  groupValue: this._groupValue,
                ),

                Text("女"),
                Radio(
                  value: 1,
                  onChanged: (v){
                    setState(() {
                      this._groupValue = v;
                    });
                  },
                  activeColor: Colors.red,
                  groupValue: this._groupValue,
                )
              ],
            )
          ],
        ),
      ),
    );
  }
}

RadioListTile

RadioListTile常用属性

属性描述
valuetrue或者false
onChanged改变的时候触发的事件
activeColor选中的颜色,背景颜色
title标题
subtitle二级标题
secondary配置图标或者图片
groupValue选择组的值

效果图:

coding

class ScaffoldTest extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("表单测试"),
      ),
      body: TextFieldTest(),
    );
  }
}

class TextFieldTest extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return RadioStateTest();
  }
}

class RadioStateTest extends State<TextFieldTest>{
  int _groupValue = 1;
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        child: Column(
          children: [
            RadioListTile(
              value: 0,
              title: Text("达帮主"),
              subtitle: Text("主要介绍Android 基础 Modem Flutter"),
              secondary: Image.network("https://www.itying.com/images/flutter/1.png"),
              groupValue: _groupValue,//选择组的值
              onChanged: (value){
                setState(() {
                  print("0  _groupValue = ${this._groupValue}  value = ${value}");
                  this._groupValue = value;
                });
              },
            ),
            Divider(),//行线
            RadioListTile(
              value: 1,
              title: Container(
                height: 60,
                child: Text("通过Container包装Text"),
                color: Colors.red,
              ),
              secondary: Image.network("https://www.itying.com/images/flutter/2.png"),
              groupValue: _groupValue,
              onChanged: (value){
                setState(() {
                  print("1 _groupValue = ${this._groupValue}  value = ${value}");
                  this._groupValue = value;
                });
              },
            )

          ],
        ),
      ),
    );
  }
}

开关Switch

属性描述
value单选值
onChanged改变时触发
activeColor选中的颜色,背景颜色

效果:

coding:

class TextFieldTest extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return RadioStateTest();
  }
}

class RadioStateTest extends State<TextFieldTest>{
  bool sw_change = false;
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                  Switch(
                    value: sw_change,
                    onChanged: (value){
                      setState(() {
                        print("onChanged value = ${value}");
                        this.sw_change = value;
                      });
                    },
                    activeColor: Colors.blue,
                  )
              ],
            )
          ],
        ),
      ),
    );
  }
}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Flutter动态表单实现的一般步骤如下: 1. 定义表单字段数据模型:定义一个类来表示每个表单字段,包括字段类型、名称、值、是否必填等属性。 2. 构建表单UI:使用Flutter提供的表单控件,如TextFormField、Checkbox、Radio等来构建表单的UI。 3. 根据字段数据模型动态生成表单控件:根据表单字段数据模型动态生成相应的表单控件,可以使用Flutter的Widget库的工厂方法来实现。 4. 收集表单数据:根据表单字段数据模型收集用户填写的表单数据,并进行校验处理。 5. 提交表单数据:将收集到的表单数据提交到服务器进行处理。 下面是一个简单的Flutter动态表单实现的示例代码: ```dart class FormField { final String label; final String type; final bool required; String value; FormField({ required this.label, required this.type, this.required = false, this.value = '', }); } class DynamicFormScreen extends StatefulWidget { @override _DynamicFormScreenState createState() => _DynamicFormScreenState(); } class _DynamicFormScreenState extends State<DynamicFormScreen> { final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); List<FormField> _fields = [ FormField(label: 'Name', type: 'text', required: true), FormField(label: 'Email', type: 'email', required: true), FormField(label: 'Phone', type: 'tel', required: true), FormField(label: 'Message', type: 'textarea', required: false), ]; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Dynamic Form'), ), body: Form( key: _formKey, child: ListView.builder( itemCount: _fields.length, itemBuilder: (BuildContext context, int index) { FormField field = _fields[index]; Widget widget; switch (field.type) { case 'text': case 'email': case 'tel': widget = TextFormField( decoration: InputDecoration( labelText: field.label, ), keyboardType: TextInputType.text, validator: (value) { if (field.required && value!.isEmpty) { return 'This field is required'; } return null; }, onSaved: (value) { field.value = value!; }, ); break; case 'textarea': widget = TextFormField( decoration: InputDecoration( labelText: field.label, ), keyboardType: TextInputType.multiline, maxLines: 4, validator: (value) { if (field.required && value!.isEmpty) { return 'This field is required'; } return null; }, onSaved: (value) { field.value = value!; }, ); break; default: widget = Container(); } return widget; }, ), ), floatingActionButton: FloatingActionButton( onPressed: () { if (_formKey.currentState!.validate()) { _formKey.currentState!.save(); // Submit form data } }, child: Icon(Icons.send), ), ); } } ``` 在上面的示例代码,我们定义了一个FormField类来表示表单字段,包括字段名称、类型、是否必填以及字段值等属性。然后我们在StatefulWidget的状态类定义了一个_fields列表来存储表单字段数据模型。在build方法,我们使用ListView.builder来构建表单UI,根据表单字段数据模型动态生成相应的表单控件。最后,在提交按钮的点击事件,我们根据表单字段数据模型收集用户填写的表单数据,并进行校验处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达帮主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值