簡體   English   中英

從另一個小部件 Flutter 更改文本字段的 textSize

[英]Change textSize of textfield from another widget Flutter

我需要通過單擊另一個小部件中的圖標來更改 textField 的 fontSize。 所以我在這里有我的自定義文本字段小部件。

class StateTextField extends StatefulWidget {
  final FocusNode focusNode = FocusNode();
  final Function(bool,Widget) callback;
  final String fontFamily = FontFamily.Arial.toString().split('.')[1];
  double fontSize = 18;
  final Function(bool) selected;
  final bool highlighted = false;
  bool hasFocus() {
    return focusNode.hasFocus;
  }

   increaseFontSize() {
    fontSize += 2;
  }

  decreasefontSize() {

    if (fontSize > 0) fontSize -= 2;
  }

  StateTextField({@required this.callback,@required this.selected});
  @override
  _StateTextFieldState createState() => _StateTextFieldState();
}

在第二個小部件中,我使用了 function increaseFontSize 和 reductionFontSize 來改變大小

 onTap: () {
                setState(() {
                  print(widget.textField.fontSize);
                  widget.textField.increaseFontSize();

                  print(widget.textField.fontSize);
                });
              }

單擊按鈕時大小會增加,但不會反映。 我意識到這是因為 setState 不會更改 textField 的 state。 那我應該遵循什么方法?

創建一個變量文件並將其導入您的 main.dart 或任何您需要的地方。

double fontSize = 12;

變量.dart

Column(
  children: <Widget>[
    TextField(
      style: TextStyle(
        fontSize: fontSize
      )
    ),
    Container(
      width: double.infinity,
      height: 70,
      child: RaisedButton(
        onPressed: (){
          setState((){
            fontSize = fontSize +1; //or fontSize+=1;
          });
        },
        child: Center(
          child: Text("+")
        )
      )
    ),
    Container(
      width: double.infinity,
      height: 70,
      child: RaisedButton(
        onPressed: (){
          setState((){
            fontSize = fontSize -1; //or fontSize-=1;
          });
        },
        child: Center(
          child: Text("-")
        )
      )
    )
  ]
)

main.dart

有這種方法可以以某種方式幫助您。

STEP 1:不要在 StatefulWidget 中使用增減方法

第 2 步:將值存儲在變量中並在同一個小部件本身中進行更改

class StateTextField extends StatefulWidget {
  final FocusNode focusNode = FocusNode();
  final Function(bool,Widget) callback;
  final String fontFamily = FontFamily.Arial.toString().split('.')[1];
  double fontSize = 18;
  final Function(bool) selected;
  final bool highlighted = false;
  bool hasFocus() {
    return focusNode.hasFocus;
  }

  StateTextField({@required this.callback,@required this.selected});
  @override
  _StateTextFieldState createState() => _StateTextFieldState();
}

StateTextFieldState extends State<StateTextField>{
   double _fontSize;

   @override
   void initState(){
      super.initState();

      // setting the value from the widget in initialization of the widget to the local variable which will be used to do the increase-decrease operation
      _fontSize = widget.fontSize;
   }

   void increaseFontSize() {
    setState(() => _fontSize += 2);
   }

   void decreasefontSize() {
     if (_fontSize > 0){
       setState(() => _fontSize -= 2);
     }
   }

   //in your widget method, you can perform your operation now in `onTap`
   onTap: () {
     print(_fontSize);
     //call your increase method here to increase
     _increaseFontSize()
  }
}

讓我知道這是否對您有所幫助。 謝謝:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM