Как изменить цвет текста метки, когда текстовый файл сфокусирован, когда в flutter используется более одного текстового поля

#flutter #flutter-layout

#трепетать #флаттер-макет

Вопрос:

Мое требование состоит в том, что у меня есть 2 виджета текстового поля, когда я нажимаю на первый виджет текстового поля, мне нужно изменить цвет текста метки, соответствующий цвету курсора и границы. Точно так же, когда я нажимаю на 2-е текстовое поле, ожидается то же поведение. Как этого добиться.

Ниже приведен мой код, который я пробовал до сих пор:

 Padding(  padding: const EdgeInsets.only(left: 32.0, right: 32.0),  child: TextField(  cursorColor: Color(0xFFD9A506),  decoration: new InputDecoration(  labelText: 'Username',  focusedBorder: UnderlineInputBorder(  borderSide: BorderSide(  color: Color(0xFFD9A506), style: BorderStyle.solid)),  enabledBorder: const UnderlineInputBorder(  borderSide: BorderSide(color: Color(0xFF919191)),  ),  labelStyle: new TextStyle(color: Color(0xFF919191)),  ),  onChanged: (value) {  userName = value;  setState(() {  if (!userName.isEmpty amp;amp; !password.isEmpty) {  isTextFiledFocus = true;  } else {  isTextFiledFocus = false;  }  });  },  ),  ),  Padding(  padding:  const EdgeInsets.only(top: 38.0, left: 32.0, right: 32.0),  child: TextField(  cursorColor: Color(0xFFD9A506),  obscureText: isHidePassword,  enableSuggestions: false,  autocorrect: false,  decoration: new InputDecoration(  focusedBorder: UnderlineInputBorder(  borderSide: BorderSide(  color: Color(0xFFD9A506),  style: BorderStyle.solid)),  labelText: 'Password',  suffixIcon: IconButton(  //eye icon  color: Color(0xFF919191),  onPressed: () {  //for keyboard to hide  FocusScopeNode currentFocus = FocusScope.of(context);  if (!currentFocus.hasPrimaryFocus) {  currentFocus.unfocus();  }  //for keyboard to hide  setState(() {  isHidePassword = !isHidePassword;  });  },  icon: Icon(isHidePassword  ? Icons.visibility  : Icons.visibility_off)), //eye icon  enabledBorder: const UnderlineInputBorder(  borderSide: BorderSide(color: Color(0xFF919191)),  ),  labelStyle: new TextStyle(color: Color(0xFF919191)),  ),  onChanged: (value) {  password = value;  setState(() {  if (!userName.isEmpty amp;amp; !password.isEmpty) {  isTextFiledFocus = true;  } else {  isTextFiledFocus = false;  }  });  }),  ),   

Ответ №1:

Вы можете использовать FocusNode со слушателем, чтобы изменить цвет метки. Нам просто нужно обновить пользовательский интерфейс при изменении фокуса. Вы также можете изменить текст метки таким же образом.

 final FocusNode focusNode1 = FocusNode();  final FocusNode focusNode2 = FocusNode();   @override  void initState() {  super.initState();  focusNode1.addListener(() {  setState(() {});  });   focusNode2.addListener(() {  setState(() {});  });  }  

И назначьте узел фокусировки на TextFiled

 TextField(  cursorColor: Color(0xFFD9A506),  focusNode: focusNode1,  decoration: InputDecoration(  labelStyle: TextStyle(  color: focusNode1.hasFocus  ? Color(0xFFD9A506)  : Color(0xFF919191)),  labelText: "UserName",  

Сделайте то же самое для следующего TextFiled .