You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在flutter_login: ^5.0.0登录表单中添加额外文本字段

在flutter_login: ^5.0.0中添加额外文本字段

注册页面添加额外字段

flutter_login自带additionalSignupFields参数,可直接添加注册所需的额外字段(比如用户名、手机号),无需自定义整个表单。修改你的代码如下:

FlutterLogin(
  logo: const AssetImage('assets/xxxxxx.png'),
  onLogin: _authUser,
  theme: LoginTheme(
    primaryColor: const Color(0xFFe69597)
  ),
  onSignup: (signupData) {
    // 从additionalSignupData中获取额外字段值,比如用户名、手机号
    String username = signupData.additionalSignupData['username'] ?? '';
    String phone = signupData.additionalSignupData['phone'] ?? '';
    return _signupUser(signupData, username, phone); // 传给你的注册逻辑
  },
  // 配置注册额外字段
  additionalSignupFields: [
    UserFormField(
      keyName: 'username',
      displayName: '用户名',
      icon: const Icon(Icons.person),
      fieldValidator: (value) {
        if (value == null || value.length < 3) {
          return '用户名至少3个字符';
        }
        return null;
      },
    ),
    UserFormField(
      keyName: 'phone',
      displayName: '手机号',
      icon: const Icon(Icons.phone),
      keyboardType: TextInputType.phone,
      fieldValidator: (value) {
        if (value == null || !RegExp(r'^1[3-9]\d{9}$').hasMatch(value)) {
          return '请输入有效的手机号';
        }
        return null;
      },
    ),
  ],
  onSubmitAnimationCompleted: () {
    Navigator.of(context).pushReplacement(MaterialPageRoute(
      builder: (context) => Home(),
    ));
  },
  onRecoverPassword: _recoverPassword,
);

在onSignup回调里,通过signupData.additionalSignupData[keyName]就能拿到对应字段的输入值,直接传入你的注册业务逻辑即可。

登录页面添加额外字段

如果需要在登录页面加额外字段(比如验证码、企业ID),需要用loginFormBuilder自定义整个登录表单:

FlutterLogin(
  logo: const AssetImage('assets/xxxxxx.png'),
  // 自定义登录表单结构
  loginFormBuilder: (loginData, errorMessages, updateError, updateLoading) {
    // 用控制器保存额外字段的值
    final captchaController = TextEditingController();
    
    return Column(
      children: [
        // 保留默认邮箱字段
        TextFormField(
          controller: loginData.email,
          decoration: InputDecoration(
            labelText: '邮箱',
            icon: const Icon(Icons.email),
            errorText: errorMessages.email,
          ),
          keyboardType: TextInputType.emailAddress,
          onChanged: (_) => updateError('email', null),
        ),
        // 保留默认密码字段
        TextFormField(
          controller: loginData.password,
          decoration: InputDecoration(
            labelText: '密码',
            icon: const Icon(Icons.lock),
            errorText: errorMessages.password,
          ),
          obscureText: true,
          onChanged: (_) => updateError('password', null),
        ),
        // 添加额外字段:验证码
        TextFormField(
          controller: captchaController,
          decoration: const InputDecoration(
            labelText: '验证码',
            icon: Icon(Icons.security),
          ),
          keyboardType: TextInputType.number,
        ),
        // 登录按钮
        ElevatedButton(
          onPressed: () {
            updateLoading(true);
            // 触发登录逻辑,把验证码传进去
            _authUser(loginData, captchaController.text).then((result) {
              updateLoading(false);
              if (result != null) {
                updateError('password', result);
              }
            });
          },
          child: const Text('登录'),
        ),
      ],
    );
  },
  theme: LoginTheme(
    primaryColor: const Color(0xFFe69597)
  ),
  onSignup: _signupUser,
  onSubmitAnimationCompleted: () {
    Navigator.of(context).pushReplacement(MaterialPageRoute(
      builder: (context) => Home(),
    ));
  },
  onRecoverPassword: _recoverPassword,
);

自定义表单时,你可以完全控制字段的布局、验证逻辑,登录按钮的点击事件里直接把额外字段的值传给你的登录逻辑即可。

内容的提问来源于stack exchange,提问作者titi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:53:16