dart 改变州

7jmck4yq  于 2023-10-13  发布在  其他
关注(0)|答案(2)|浏览(114)

我有一个函数checkAvailability,如果条件匹配,它会将变量isTaken的状态更改为true。

checkAvailabiltiy(String text){
      for(var snapshot in allData){
        var name = snapshot['username'].toString().toLowerCase();
        if(text.toLowerCase() == name){
          setState(() {
            isTaken =true;
          });
        } else{
            
    }
      }}

一旦条件匹配,变量就会改变其状态。但是在那之后,即使条件不匹配,变量仍然是一样的。我怎么能把它改回假的呢?

TextFormField(

                                
                                
                                onChanged: (value) {
                                  // print("${value}hola");

                                  checkAvailabiltiy(value);
                                  print(isTaken);
                                },)

我尝试在else情况下使用setState,但它不起作用。

rxztt3cl

rxztt3cl1#

你也应该使用setState。下面是代码的更新版本:

checkAvailability(String text) {
  bool isMatched = false; // Add a boolean flag to track if a match is found

  for (var snapshot in allData) {
    var name = snapshot['username'].toString().toLowerCase();
    if (text.toLowerCase() == name) {
      setState(() {
        isTaken = true;
      });
      isMatched = true; // Set the flag to true if a match is found
      break; // Exit the loop when a match is found
    }
  }

  // Reset isTaken if no match is found
  if (!isMatched) {
    setState(() {
      isTaken = false;
    });
  }
}

使用此代码,当找到匹配项时,isTaken将被设置为true,如果在循环中没有找到匹配项,则将被设置为false。这样,当条件不匹配时,它将正确地将状态重置为false。

wlwcrazw

wlwcrazw2#

要解决这个问题,您需要在else语句中将isTaken变量设置为false。您可以按如下方式执行此操作:

checkAvailabiltiy(String text) {
  for (var snapshot in allData) {
    var name = snapshot['username'].toString().toLowerCase();
    if (text.toLowerCase() == name) {
      setState(() {
        isTaken = true;
      });
    } else {
      setState(() {
        isTaken = false;
      });
    }
  }
}

TextFormField(
  onChanged: (value) {
    checkAvailability(value);
    print(isTaken);
  },
)

这段代码将在TextFormField的onChanged()回调中检查用户名的可用性。如果用户名可用,isTaken变量将被设置为false。否则,isTaken变量将被设置为true。

相关问题