【问题标题】:Flutter: Enabling/Disabling Text forms, submitting default information if they're disabled (no user input)Flutter:启用/禁用文本表单,如果禁用则提交默认信息(无用户输入)
【发布时间】:2019-09-10 16:32:52
【问题描述】:

在颤振中,我有禁用的文本表单字段,如果没有用户输入(禁用字段),则发送预填充值。我想创建一个名为“过滤器”的按钮,当用户单击该按钮时,它会启用字段并允许用户选择自己的值来提交。

目前,我找到了一种使用 enabled:false 禁用文本字段的方法。我不确定当用户单击按钮时如何将所有 3 个表单域设置为启用:true。此外,目前我已经检查了空输入以提交这些默认值。但是,如果按下过滤器按钮并启用表单,我不想发送预填充值。

//would like to use these 3 values on submit if fields are disabled

double distance = 10.0;
  double length = 1.0;
  double results = 10.0;


Widget distanceFromUser() {
    return TextFormField(
      enabled: false,
      decoration: InputDecoration(
          labelText: "Distance From User: 10", hintText: '10 miles'),
      onSaved: (String value) {
        if(value.isEmpty){
         distance = 10.0;
        }
        else {
          distance = double.parse(value);
        }
      },
    );
  }

  Widget lengthOfTrail() {
    return TextFormField(
      enabled: false,
      decoration: InputDecoration(
          labelText: "Minimum Length of Trail: 1", hintText: '1 mile'),
      onSaved: (String value) {
        if(value.isEmpty){
          length = 1.0;
        }
        else {
          length = double.parse(value);
        }
      },
    );
  }

  Widget numOfResults() {
    return TextFormField(
      enabled: false,
      decoration: InputDecoration(
          labelText: "Number of results : 10", hintText: 'numOfResults'),
      onSaved: (String value) {
        if(value.isEmpty){
          results = 10.0;
        }
        else {
          results = double.parse(value);
        }
      },
    );
  }

  Widget submitButton() {
    return RaisedButton(
      color: Color.fromRGBO(58, 66, 86, 1.0),
      child: Text("Find trails near me", style: TextStyle(color: Colors.white)),
      onPressed: () async {
          formkey.currentState.save();
        final trails = await fetchData();
        Navigator.push(
          context,
          MaterialPageRoute(
              builder: (context) => MapScreen(trails, userLat, userLon)),
        );
      },
    );
  }
}
Widget Filter(){ 
//code to re-enable text forms would go here
}

任何帮助将不胜感激,谢谢

【问题讨论】:

    标签: forms dart flutter


    【解决方案1】:

    创建一个 bool 变量来处理所有 TextFormField 的禁用和启用,您可以使用此 bool 变量来决定您必须发送哪些数据是预填充的或新的。

    类似这样的:

    bool _isEnable = false;
    
    Widget distanceFromUser() {
      return TextFormField(
        enabled: _isEnable, // here use the variable in all the TextFormField
        decoration: InputDecoration(
            labelText: "Distance From User: 10", hintText: '10 miles'),
        onSaved: (String value) {
          if(value.isEmpty){
            distance = 10.0;
          }
          else {
            distance = double.parse(value);
          }
        },
      );
    }
    
    
    // onpress of filter button
    setState(() { _isEnable = true });
    
    // onpress of submit
    (){
      if(!_isEnable){
        //defualt data pass 
    }else{
        //new data you have to pass
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-04
      • 2020-04-18
      • 2020-03-31
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 2011-02-14
      相关资源
      最近更新 更多