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 (将#修改为@)