如何使用copyWith更改嵌套多个级别的单个属性

时间:2019-07-07 04:20:27

标签: flutter

我正在为登录/注册页面制作电子邮件/密码输入框。

我将InputDecoration提取为一个常量,因为有很多重叠的样式(边框,填充等)。

const kTextFieldDeco = InputDecoration(
  hintText: '',
  contentPadding: ... ,
  border: ...
  enabledBorder: OutlineInputBorder(
    borderSide: BorderSide(color: Colors.Red, width: 1.0),
    borderRadius: BorderRadius.all(Radius.circular(15.0)),
  ),
  focusedBorder: <same as above except for width being 2.0>
);

问题是,我想将“电子邮件” inputBox边框设为“红色”,将“密码” inputBox边框设为“蓝色”。

TextField(
  onChanged: (val) {}
  decoration: kTextfieldDeco.copyWith(
    hintText: 'Enter password',
    enabledBorder: OutlineInputBorder(
      borderSide: BorderSide(color: Colors.Blue, width: 1.0),
    ),
    focusedBorder: <same as above except for width being 2.0>
  ),
),

但是copyWith()只是用新的OutlineInputBorder覆盖了kTextfieldDeco的enableBorder,因此borderRadius消失了。

有没有一种方法可以使Flutter提供我可以更改嵌套多个级别的单个字段的方法?还是只需要将整个OutlineInputBorder复制并粘贴到“ enabledBorder和focusedBorder”中,即可保持以kTextFieldDecoration编写的样式?

提前谢谢

0 个答案:

没有答案