Flutter Form Builder:以编程方式设置字段值无效。

7

我正在尝试使用 flutter_form_builder 以编程方式设置字段的值,但似乎文档中没有相关内容。

控制器:

class LoggedOutNicknameController extends GetxController {
  AnimationController animateController;
  bool formValid;

  final GlobalKey<FormBuilderState> formKey = GlobalKey<FormBuilderState>();

  @override
  void onInit() {}

  @override
  void onReady() {
    final box = GetStorage();
    box.erase();
    if (box.read<dynamic>('nickname') != null &&
        box.read<dynamic>('nickname') != '') {
      print(box.read<dynamic>('nickname')); // prints the value eg 'James'
      final fff = box.read<String>('nickname');
      formKey.currentState.setAttributeValue('nickname', fff);
    }
  }

  @override
  void onClose() {}

  void onFormChange() {
    formValid = formKey.currentState.validate();
  }
}

在那段代码被执行后,该变量的值并没有在我的文本输入框中显示。
视图层:
Expanded(
              flex: 4,
              child: FormBuilder(
                  key: controller.formKey,
                  autovalidateMode: AutovalidateMode.onUserInteraction,
                  child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                        VpSubtitle1(
                            context,
                            'So nice to meet you! What do your friends call you?',
                            TextAlign.center),
                        FormBuilderTextField(
                          attribute: 'nickname',
                          textAlign: TextAlign.center,
                          decoration:
                              const InputDecoration(hintText: 'Nickname...'),
                          validators: [FormBuilderValidators.required()],
                        )
                      ]))),

为什么这个值没有出现在文本输入框中?
1个回答

10
非常简单,官方文档中有明确说明。
您可以像这样逐个更改字段的值:
_formKey.currentState.fields['color_picker'].didChange(Colors.black);

或者像这样多个字段的值:

_formKey.currentState.patchValue({
  'age': '50',
  'slider': 6.7,
  'filter_chip': ['Test 1'],
  'choice_chip': 'Test 2',
  'rate': 4,
  'chips_test': [
    Contact('Andrew', 'stock@man.com', 'https://d2gg9evh47fn9z.cloudfront.net/800px_COLOURBOX4057996.jpg'),
  ],
});

请参考文档中的这一部分:flutter_form_builder: 编程方式更改字段值


我应该在哪里更改_formKey.currentState.fields['color_picker'].didChange(Colors.black);在initState中,它是null。 - Alex Aung
为什么你想在 initState() 事件中改变一个字段的值呢?因为在 initState 运行时,这些字段还没有被构建,所以你不能改变它们的值。我认为你是想为该字段设置一个初始值,如果是这种情况,那么请使用 initialValue 属性。 - Moaz El-sawaf
是的,我想展示数据库中的数据以编辑表单。我怎么会错过initialValue呢?谢谢。 - Alex Aung
没问题,这种事情很正常,你随时都受欢迎。 - Moaz El-sawaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接