如何在 flutter 中使用控制器获取 TextFormField 文本颜色、字体大小等?
How to get the TextFormField text color,fontsize, etc using controller in flutter?
我制作了自定义 textformfield class 并将其用作小部件。我想获得我拥有的 textformfields 颜色、字体大小、对齐方式等 set.How 我可以使用控制器或任何方式获得我设置到 textformfield 的所有属性吗?
我的自定义 class 代码:
class CustomTextNIconWidget extends StatefulWidget {
final Color fontColor;
final GestureTapCallback onSingleTapWidget;
final GestureTapCallback onDoubleTapWidget;
final FontWeight fontWeight;
final TextEditingController controller;
final double fontSize;
CustomTextNIconWidget(
{Key key,
@required this.hint,
this.controller,
this.fontSize,
this.fontColor,
this.fontWeight,
this.textAlign,
this.onSingleTapWidget,
this.onDoubleTapWidget})
: super(key: key);
@override
_CustomTextNIconWidgetState createState() => _CustomTextNIconWidgetState();
}
class _CustomTextNIconWidgetState extends State<CustomTextNIconWidget> {
@override
Widget build(BuildContext context) {
return InkWell(
onTap: widget.onSingleTapWidget,
onDoubleTap: widget.onDoubleTapWidget,
child: Container(
child: TextFormField(
controller: widget.controller,
style: TextStyle(
color: widget.fontColor,
fontSize:
widget.fontSize == null ? getFontSize() : widget.fontSize,
fontWeight: widget.fontWeight == null
? getFontWeight()
: widget.fontWeight),
decoration: InputDecoration(
hintText: widget.hint,
hintStyle: TextStyle(color:white)),
),
),
);
}
我曾用作:
CustomTextNIconWidget(
controller: myController,
hint: getAddress(),
fontColor: Colors.amber,
fontSize: 18,
fontWeight: FontWeight.bold,
onSingleTapWidget: (){
print("Text color,fontsize:{HowToGetAboveSetProperties}");
},
),
为此您需要使用 GlobalKey
。创建一个 GlobalKey<_CustomTextNIconWidgetState>
如下:
GlobalKey<_CustomTextNIconWidgetState> _customTextNIconWidgetStateKey = GlobalKey<_CustomTextNIconWidgetState>();
将此密钥作为参数提供给您的自定义小部件:
CustomTextNIconWidget(
key: _customTextNIconWidgetStateKey, // <-- key
controller: myController,
hint: getAddress(),
fontColor: Colors.amber,
fontSize: 18,
fontWeight: FontWeight.bold,
onSingleTapWidget: (){
print("Text color,fontsize:{HowToGetAboveSetProperties}");
},
),
将小部件推送到小部件树后,您可以通过以下方式访问参数:
_customTextNIconWidgetStateKey.currentState.widget
例如,要访问 fontColor,您可以这样做:
Color _fontColor = _customTextNIconWidgetStateKey.currentState.widget.fontColor;
要等待小部件被推入小部件树并获得回调,您可以使用WidgetsBinding.instance.addPostFrameCallback((_){})
在您的初始状态或构建方法中使用它。
WidgetsBinding.instance.addPostFrameCallback((_){
Color _fontColor = _customTextNIconWidgetStateKey.currentState.widget.fontColor;
});
要在声明 _CustomTextNIconWidgetState
的不同 dart 文件中使用此密钥,您需要将其设为 public(通过将其重命名为 CustomTextNIconWidgetState
)。
完成上述所有更改后,您将获得类似于以下内容的代码:
class MyApp extends StatelessWidget {
GlobalKey<CustomTextNIconWidgetState> _customTextNIconWidgetStateKey = GlobalKey<CustomTextNIconWidgetState>();
@override
Widget build(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback((_){
Color _fontColor = _customTextNIconWidgetStateKey.currentState.widget.fontColor;
});
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
body: Center(
child: CustomTextNIconWidget(
key: _customTextNIconWidgetStateKey, // <-- key
controller: myController,
hint: getAddress(),
fontColor: Colors.amber,
fontSize: 18,
fontWeight: FontWeight.bold,
onSingleTapWidget: (){
print("Text color,fontsize:{HowToGetAboveSetProperties}");
},
),
),
),
);
}
}
希望对您有所帮助,如有疑问请评论。 如果这个回答对您有帮助,请采纳并点赞。
我制作了自定义 textformfield class 并将其用作小部件。我想获得我拥有的 textformfields 颜色、字体大小、对齐方式等 set.How 我可以使用控制器或任何方式获得我设置到 textformfield 的所有属性吗?
我的自定义 class 代码:
class CustomTextNIconWidget extends StatefulWidget {
final Color fontColor;
final GestureTapCallback onSingleTapWidget;
final GestureTapCallback onDoubleTapWidget;
final FontWeight fontWeight;
final TextEditingController controller;
final double fontSize;
CustomTextNIconWidget(
{Key key,
@required this.hint,
this.controller,
this.fontSize,
this.fontColor,
this.fontWeight,
this.textAlign,
this.onSingleTapWidget,
this.onDoubleTapWidget})
: super(key: key);
@override
_CustomTextNIconWidgetState createState() => _CustomTextNIconWidgetState();
}
class _CustomTextNIconWidgetState extends State<CustomTextNIconWidget> {
@override
Widget build(BuildContext context) {
return InkWell(
onTap: widget.onSingleTapWidget,
onDoubleTap: widget.onDoubleTapWidget,
child: Container(
child: TextFormField(
controller: widget.controller,
style: TextStyle(
color: widget.fontColor,
fontSize:
widget.fontSize == null ? getFontSize() : widget.fontSize,
fontWeight: widget.fontWeight == null
? getFontWeight()
: widget.fontWeight),
decoration: InputDecoration(
hintText: widget.hint,
hintStyle: TextStyle(color:white)),
),
),
);
}
我曾用作:
CustomTextNIconWidget(
controller: myController,
hint: getAddress(),
fontColor: Colors.amber,
fontSize: 18,
fontWeight: FontWeight.bold,
onSingleTapWidget: (){
print("Text color,fontsize:{HowToGetAboveSetProperties}");
},
),
为此您需要使用 GlobalKey
。创建一个 GlobalKey<_CustomTextNIconWidgetState>
如下:
GlobalKey<_CustomTextNIconWidgetState> _customTextNIconWidgetStateKey = GlobalKey<_CustomTextNIconWidgetState>();
将此密钥作为参数提供给您的自定义小部件:
CustomTextNIconWidget(
key: _customTextNIconWidgetStateKey, // <-- key
controller: myController,
hint: getAddress(),
fontColor: Colors.amber,
fontSize: 18,
fontWeight: FontWeight.bold,
onSingleTapWidget: (){
print("Text color,fontsize:{HowToGetAboveSetProperties}");
},
),
将小部件推送到小部件树后,您可以通过以下方式访问参数:
_customTextNIconWidgetStateKey.currentState.widget
例如,要访问 fontColor,您可以这样做:
Color _fontColor = _customTextNIconWidgetStateKey.currentState.widget.fontColor;
要等待小部件被推入小部件树并获得回调,您可以使用WidgetsBinding.instance.addPostFrameCallback((_){})
在您的初始状态或构建方法中使用它。
WidgetsBinding.instance.addPostFrameCallback((_){
Color _fontColor = _customTextNIconWidgetStateKey.currentState.widget.fontColor;
});
要在声明 _CustomTextNIconWidgetState
的不同 dart 文件中使用此密钥,您需要将其设为 public(通过将其重命名为 CustomTextNIconWidgetState
)。
完成上述所有更改后,您将获得类似于以下内容的代码:
class MyApp extends StatelessWidget {
GlobalKey<CustomTextNIconWidgetState> _customTextNIconWidgetStateKey = GlobalKey<CustomTextNIconWidgetState>();
@override
Widget build(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback((_){
Color _fontColor = _customTextNIconWidgetStateKey.currentState.widget.fontColor;
});
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
body: Center(
child: CustomTextNIconWidget(
key: _customTextNIconWidgetStateKey, // <-- key
controller: myController,
hint: getAddress(),
fontColor: Colors.amber,
fontSize: 18,
fontWeight: FontWeight.bold,
onSingleTapWidget: (){
print("Text color,fontsize:{HowToGetAboveSetProperties}");
},
),
),
),
);
}
}
希望对您有所帮助,如有疑问请评论。 如果这个回答对您有帮助,请采纳并点赞。