如何解决Flutter getter / setter不起作用?即使我调用了方法来更改值,仍然会返回相同的值
嗨,我想做的是制作一个单独的textUtilities,它返回EdgeInset,因此取决于是否单击文本字段,可以升高或降低我的小部件。我想在单击文本字段时尝试做的事情应该更改纹理之一的值。
您可以在ontap上看到它更改了我的TextUtilities类的值。现在随着更改,我使用该值返回保存所有内容的父窗口小部件。
GestureDetector(
onDoubleTap: () {
FocusScope.of(context).unfocus();
myTextUtility.textFocus = false;
},child: Container(
height: mediaSize.height * .06,decoration: Boxdecoration(
color: Colors.transparent,borderRadius: BorderRadius.all(Radius.circular(13)),BoxShadow: <BoxShadow>[
BoxShadow(
color: Colors.black54.withOpacity(0.45),spreadRadius: 1,blurRadius: 4,offset: Offset(3.5,4))
]),child: TextFormField(
onFieldSubmitted: (String value) {
myTextUtility.textFocus = false;
},onTap: () {
myTextUtility.textFocus = true;
},decoration: Inputdecoration(
focusedBorder: OutlineInputBorder(
borderSide:
BorderSide(color: Colors.transparent),borderRadius:
BorderRadius.all(Radius.circular(13))),enabledBorder: OutlineInputBorder(
borderSide:
BorderSide(color: Colors.transparent),hintStyle: TextStyle(color: Colors.black87),prefixIcon: Icon(
Icons.person,color: Colors.black54,),labelText: "Complete name",filled: true,fillColor: myColorLightOrange),keyboardType: TextInputType.text,style: TextStyle(color: Colors.black,fontSize: 20),
这是具有EdgeInset的父窗口小部件,具体取决于TextUtilities textfocus。
Container(
width: mediaSize.width * .8,height: mediaSize.height * .8,margin: myTextUtility.getMarginEdgeInsetRegardTextFocus(),child:MyBody())
这是我的TextUtilities中发生的事情
import 'package:Flutter/material.dart';
class TextUtilities {
bool _textFocus = false;
bool get textFocus => _textFocus;
void set textFocus(bool value) {
_textFocus = value;
}
bool _keyboardOpen = false;
void disposeAllValues(){
_textFocus = false;
_keyboardOpen = false;
}
EdgeInsets getMarginEdgeInsetRegardTextFocus(Size mediaSize,String viewState) {
switch (viewState) {
case "LoginView":
if (_textFocus == false) {
return EdgeInsets.fromLTRB(
mediaSize.width * .1,mediaSize.height * .23,mediaSize.width * .1,mediaSize.height * .1);
}
else {
return EdgeInsets.fromLTRB(
mediaSize.width * .1,mediaSize.height * .1,mediaSize.height * .23);
}
break;
case "RegisterView":
if (_textFocus == false) {
return EdgeInsets.fromLTRB(
mediaSize.width * .1,mediaSize.height * .15,mediaSize.height * .2);
} else {
return EdgeInsets.fromLTRB(
mediaSize.width * .1,mediaSize.height * .0,mediaSize.height * .35);
}
break;
default:
break;
}
}
void checkIfKeyboardVisible(bool boolValue) {
_textFocus = boolValue;
}
}
我的问题是,当我尝试在OnTap方法中打印(textfocus)时,它返回true。如果我尝试在小部件的最顶部打印,它只会返回false?
如何使getter setter明智地工作,如您所见,它不适用于我。虽然,我必须告诉您,在My Main()中,getter setter似乎工作正常?
Widget getRegisterUI() {
print(textfocus);
//returns false
return Container(
width: mediaSize.width * .8,margin:
myTextUtility.getMarginEdgeInsetRegardTextFocus(),child:MyBody())
// this acts as the very parent
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。