我制作了自定义textformfield类,并将其用作小部件。我想获取已设置的textformfields颜色,字体大小,对齐等。如何使用控制器或通过其他方法获取设置为textformfield的所有属性?
我的自定义班级代码:
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文件中使用此密钥,则需要将其公开(将其重命名为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}");
},
),
),
),
);
}
}
我希望这会有所帮助,如有任何疑问,请发表评论。 如果此答案对您有帮助,请接受并投票。