Здравствуйте. Я пытался создать меню Mpin, используя "pin_code_text_field: ^ 1.5.1". Я уже создал файл dart для плагина pin_code_text_field и сейчас работаю, и моей следующей целью было активировать кнопку Готово, если они уже состоят из 6 цифр. на контакте, но когда я использую setState для переменной, значение меняется, но пользовательский интерфейс или кнопка не обновляются, вот код ниже. Можете ли вы предложить, что пошло не так, и какие-либо рекомендации для такого рода.
Неактивная кнопка, когда не завершен или не завершен вывод
Активная кнопка, когда завершен вывод
class _setMPin extends State<setMPin>{
TextEditingController initialPincontroller = TextEditingController(text: "");
bool initPinButtonInActive = true;
@override
void initState(){
super.initState();
initPinButtonInActive = true;
hasError = true;
}
void nextPinVerification(){
print("done success");
controller.clear();
}
@override
Widget build(BuildContext context) {
Widget initialPin = Container(
width: 400,
child: Column(
children: <Widget>[
GestureDetector(
child: new PinCodeTextField(
autofocus: true,
controller: initialPincontroller,
hideCharacter: true,
highlight: true,
highlightColor: Colors.blue,
defaultBorderColor: Colors.black,
pinBoxWidth: 60,
pinBoxHeight: 50,
hasTextBorderColor: Colors.green,
maxLength: pinLength,
hasError: hasError,
maskCharacter: "*",
onTextChanged: (text) {
setState(() {
hasError = false;
initPinButtonInActive = true;
});
},
onDone: (text){
print(text.length);
if(text.length == 6){
setState(() {
print(text.length);
hasError = true;
initPinButtonInActive = false;
});
}
},
),
),
Visibility(
child: Text(
'Incorrect Pin Format',
style: TextStyle(color: Colors.red),
),
visible: hasError,
),
Row(
children: <Widget>[ Expanded(
child:Padding(
padding: EdgeInsets.only(left: 5,top: 20),
child: ButtonTheme(
minWidth: 190,
height: 50,
child: new FlatButton(
shape: RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(10.0),
side: BorderSide(color: Colors.white)
),
child: new Text("Done",style: TextStyle(color: Colors.white),),
color: Colors.blue,
disabledColor: Colors.blue[200],
onPressed: initPinButtonInActive ? null : nextPinVerification
),
)
)
)],
)
],
)
);
return WillPopScope(
child: MaterialApp(
home: Scaffold(
body: ListView(
children: <Widget>[
Column(
children: <Widget>[
initialPin,
],
),
],
),
),
),
onWillPop: (){
Navigator.pop(context);
return Future.value(false);
}
);
}
}