gpt4 book ai didi

Flutter - 子类小部件与包装它

转载 作者:IT王子 更新时间:2023-10-29 07:00:26 28 4
gpt4 key购买 nike

<分区>

我有一些 flutter 代码,看起来像这样:

class InputWithValidation extends StatelessWidget {
InputWithValidation({this.fieldName, this.accessor});

final String fieldName;
final ModelAccessor accessor;

Widget build(context) {

var elem = FooDataDictionary.of(context).dataElement(fieldName);

return Container(
margin: EdgeInsets.all(inputMargin),
child: TextFormField(
keyboardType: elem.keyboardType,
initialValue: elem.getAsString(accessor),
autovalidate: true,
validator: elem.validate,
onSaved: (val) {
elem.setFromString(accessor, val);
},
decoration: InputDecoration(
hintText: FooLocalizations.of(context).hint(fieldName),
labelText: FooLocalizations.of(context).label(fieldName)),
));
}
}

我想重构它以提取 TextFormField,这样我就可以在别处重新使用它,而无需对边距的使用进行硬编码。

我的第一次尝试是写:

class DataElementTextFormField extends TextFormField
{
final DataElement dataElement;
final ModelAccessor accessor;

DataElementTextFormField(this.dataElement, this.accessor) :
super(
keyboardType: dataElement.keyboardType,
initialValue: dataElement.getAsString(accessor),
autovalidate: true,
validator: dataElement.validate,
onSaved: (val) {
dataElement.setFromString(accessor, val);
},
decoration: InputDecoration(
hintText: FooLocalizations.of(context).hint(fieldName),
labelText: FooLocalizations.of(context).label(fieldName)),
);
}

但是 hintText/labelText 行不再有效,因为它们需要 BuildContext 来获取正确的本地化实例。这让我暂时感到难过,因为我不确定将这样的小部件子类化的正确方法。

所以我的问题有点双重:

  1. 子类化 StatefulWidget 并允许访问 BuildContext 的正确方法是什么?
  2. 考虑到我正在为第 1 点而苦苦挣扎,简单包装小部件以添加额外功能与子类化它们哪个更好?什么是“最佳实践”?

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com