Flutter Unfocus TextField and Submit

Viewed 140

I'm trying to unfocus a textfield using a gesture recognizer wrapping my scaffold but whenever my textfield loses focus and the keyboard closes, it doesn't trigger the onSubmitted action on my textfield.

Is there a way to whenever it loses focus it also triggers my onSubmitted: method on the textField?

Here's my code:

  final TextEditingController _txtController = TextEditingController();
  final FocusNode _focusNode = FocusNode();

  @override
  Widget build(BuildContext context) {
    var query = context.watch<QueryMakerModel>();
    return GestureDetector(
      onTap: () {
        // FocusManager.instance.primaryFocus?.unfocus();
        // FocusScope.of(context).unfocus();
        _focusNode.unfocus();
      },
      child: Scaffold(
          appBar: AppBar(title: const Center(child: Text("Contador de Prazo"))),
          body: ListView(
            children: [
              _countySelector(context, query.getCounty()?.name),
              const DateInputControl(),
              _daysInputControl(query.numberOfDays(), onChange: (value) {
                query.setDays(value);
              }),
              const ResultView()
            ],
          )),
    );
  }

This is my Widget containing the textfield

  Widget _daysInputControl(int currentDays, {Function(int)? onChange}) {
    _txtController.text = '$currentDays';
    return Container(
        padding: const EdgeInsets.all(50.0),
        child: Column(
          children: [
            const Text("Quantos dias uteis?"),
            TextField(
              focusNode: _focusNode,
              keyboardType: TextInputType.number,
              controller: _txtController,
              textAlign: TextAlign.center,
              inputFormatters: [FilteringTextInputFormatter.digitsOnly],
              obscureText: false,
              onSubmitted: (value) {
                debugPrint(value);
                if (onChange != null) {
                  try {
                    onChange(int.parse(value));
                  } catch (e) {
                    onChange(0);
                  }
                }
              },
              decoration: const InputDecoration(
                  border: OutlineInputBorder(), labelText: 'Dias'),
            )
          ],
        ));
  }
0 Answers
Related