问题描述
嗨,我想做的是制作一个单独的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 (将#修改为@)