[英]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.