flutter 如何从另一个文件(TextEditingController、ElevatedButton)获取函数的结果

blmhpbnm  于 2022-12-30  发布在  Flutter
关注(0)|答案(2)|浏览(113)

我有两个文件,第一个是一些文本表单域,第二个是按钮。我想在其中一个文本表单域为空时禁用按钮。
文件一:

class FormTextState extends State<FormText>{

final TextEditingController inputController1 = TextEditingController();
final TextEditingController inputController2 = TextEditingController();
final TextEditingController inputController3 = TextEditingController();
bool submit1 = false;
bool submit2 = false;
bool submit3 = false;

@override
void initState(){
  super.initState();
  inputController1.addListener(() { setState(() {
    submit1 = inputController1.text.isNotEmpty;
  });
  });

  inputController2.addListener(() { setState(() {
    submit2 = inputController2.text.isNotEmpty;
  });
  });

  inputController3.addListener(() { setState(() {
    submit3 = inputController3.text.isNotEmpty;
  });
  });
}

@override
void dispose(){
  inputController1.dispose();
  inputController2.dispose();
  inputController3.dispose();
  super.dispose();

[...]

}

对于每个TextFormField,控制器定义如下:

TextFormField(
controller: inputController1,

如果我直接在这个文件中创建这个按钮,一切都可以正常工作,如下所示:

ElevatedButton(
    onPressed: submit1 && submit2 && submit3 ? () => doSomething() : null,

我怎样才能从其他有按钮的文件中得到这个结果呢?提交值是无法得到的。当然,我在开始的时候导入了这个文件。

fruv7luv

fruv7luv1#

您可以向类中添加一个函数,如下所示:

class FormTextState extends State<FormText>{
final Function(String str) stringHandler;

...

在创建类时

FormTextState(stringHandler: _handler);

Future<void> _handler(String str) async {
print(str);
}
0dxa2lsx

0dxa2lsx2#

你需要使用以下属性

autovalidateMode: AutovalidateMode.onUserInteraction

onChanged: (val) {
                if (formKey.currentState?.validate() == true) {
                  BlocProvider.of<MyDataBloc>(context)
                      .add(ActivateButtonEvent());
                } else {
                  BlocProvider.of<MyDataBloc>(context)
                      .add(DeActivateButtonEvent());
                }
              },

这将工作为formtextfield在这情况你是使用块

相关问题