当前位置: 首页 > 知识库问答 >
问题:

如何扩展颤振小部件并设置其内部值的默认值?

锺离边浩
2023-03-14

我对颤动和飞镖不熟悉,而且和继承有点关系。在创建了一些表单之后,事情变得多余,因为我们在所有文本字段上使用轮廓边框,如下所示:

TextFormField(
    decoration: InputDecoration(
        labelText: 'Email',
        hintText: 'Your corporate email address',
        border: OutlineInputBorder()
    ),
)

我想创建的是一个OutlinedTextFormField,我可以简单地用作:

OutlinedTextFormField(
    labelText: 'Email',
    hintText: 'Your corporate email address',
)

我想要的是一个元素在textformfieldlabeltext和hintText中拥有所有可用的构造函数。在构造器中或其他地方,我会根据我们的内部标准构建输入装饰等。

共有1个答案

翟昊明
2023-03-14

欢迎来到颤振:)这绝对是可能的,下面是一个例子:


class OutlinedTextFormField extends StatelessWidget {
    final String labelText;
    final String hintText;

    OutlinedTextFormField({this.labelText, this.hintText});

    build(BuildContext context) {
        return TextFormField(
            decoration: InputDecoration(
                labelText: this.labelText,
                hintText: this.hintText,
                border: OutlineInputBorder()
            ));
    }
}

为了给这里发生的事情提供一些背景:

OutlineTextFormField扩展了无状态小部件。无状态widget来自flatterwidgets库(或material或cupertino库)。无状态Widget类有一个抽象构建方法,其实现者必须重写该方法。构建方法包含小部件的UI。

OutlineTextFormField是一个完整的类,因此您可以为它定义实例变量和方法。因此,要传入labelText和hintText,只需在类上定义这些变量,然后在构造函数中传入这些变量。在构建方法中,可以引用这些变量来实现所描述的效果。

同样值得注意的是构造函数的语法。Dart有几种不同的方法来指定构造函数参数。最常见的两个参数是位置参数和命名参数。位置参数是必需的参数,缺省情况下,命名参数是可选的。

在我们的示例中,我们使用两个命名的参数,labelText和hintText。命名参数放在大括号内。Dart允许从构造函数参数直接赋值到类变量,因此使用{this.labelText,this.hintText}语法。你实际上是在说,我有两个参数,一个名为labelText,一个名为hintText,我想继续把它们分配给同名的类变量。

相反,在调用构造函数时,位置参数不需要您拼写它们的名称。采用位置参数的最常见颤振小部件是Text。通过传入一个必需的位置参数和各种可选的命名参数,可以创建文本对象。例如:Text('Im是必需的位置参数',style:newtextstyle())

为了使用这个示例小部件,您将使用以下代码:

new OutlinedTextFormField(labelText: 'Foo', hintText: 'Bar');

 类似资料:
  • 我很熟悉flutter中的无状态和有状态小部件,但我很好奇为什么我们不将有状态小部件定义为无状态小部件?为什么我们需要声明两个不同的类,一个用于createstate方法,一个用于实际的状态实现?

  • 我试图添加一些填充的顶部和底部的一些文字和图标在一个卡片小部件。我发现flutter为容器提供了一种简单的方法,但似乎找不到其他小部件的方法(除了将它们包装在容器中)。这是我目前得到的代码: 因此,在我的子列中,我想在顶部和底部添加一些填充,而不必插入新的容器。这可能吗?

  • 我向上看了看这里和酒吧。dev和flatter文档,但找不到(或者找不到我的查询)这个简单任务的任何解决方案。 我想显示一个,其字母从上到下排列,同时保持字母方向的默认值。因此,旋转的将不起作用。 我期望的结果是: 此外,我还需要将包装到下一行(本例中为列),需要一个高度参数来限制每列从上到下的字母数。 如果最后一部分太难实现,我愿意接受单列解决方案的想法。

  • 在Flatter引入空安全特性之前,我能够有条件地在列表中添加小部件,如下所示: 是一个自制的过滤器,可以过滤掉空对象... 现在使用空安全性是不可能的,因为小部件列表严格来说必须是非空的。什么是更好的方法?

  • 问题内容: 我的UIPickerView有问题。我在欧盟AP和NA中有3个值。当我启动该应用程序时,似乎选择了EU,但是当我做出选择时,我只会返回,现在当我触摸UIPickerView时,EU值被选中,然后从NSLog中返回。 我的问题是: 当用户仅启动应用程序并且什么都不触摸时,如何定义默认值(不仅是标签),该值将被选中。 编辑: 这是我的代码来获取所选项目: 问题答案: TL:DR版本: 您没

  • 问题内容: 我需要在活动开始时为ListPreference设置默认值。我试过了,但它使列表的firts条目成为默认条目。我需要它,因为我必须检查一个条件并将满足该条件的值设置为默认值,因此我认为无法从xml文件(带有)中完成此操作 例如,假设我在arrays.xml中具有以下值数组: 在PreferenceScreen xml中: 在活动中,我想做这样的事情: 但这是行不通的,因为它将默认设置为