Невозможно сфокусироваться на недавно добавленном флаттере текстового поля - PullRequest
0 голосов
/ 10 июля 2020
import 'package:flutter/material.dart';

class Demo {
  int no;
  String value;
  Demo({this.value, this.no});
}

class Control {
  TextEditingController controller;
  FocusNode node;
  Control({this.controller, this.node});
}

class DemoPage extends StatefulWidget {
  static const routeName = '/Demo';
  DemoPage({Key key}) : super(key: key);

  @override
  _DemoPageState createState() => _DemoPageState();
}

class _DemoPageState extends State<DemoPage> {
  List<Demo> txtfield;
  List<Control> control;

  @override
  void initState() {
    txtfield = [];
    control = [];
    // no = 0;
    add();
    super.initState();
  }

  int no;
  void add() {
    no = (no ?? 0) + 1;
    setState(() {});
    txtfield.add(Demo(no: no));
    control.add(Control(
      controller: TextEditingController(),
      node: FocusNode(),
    ));
    // no = no +1;
  }

  @override
  Widget build(BuildContext context) {
    // print(txtfield[0].no);
    // FocusScope.of(context).requestFocus(control[control.length - 1].node);
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Card(
          child: Container(
            child: Column(
              children: txtfield
                  .map((f) => TextField(
                        controller: control[f.no - 1].controller,
                        focusNode: control[f.no - 1].node,
                        autofocus: true,
                      ))
                  .toList(),
            ),
            width: 400,
            padding: EdgeInsets.all(20),
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          add();
          print(no);
          FocusScope.of(context).requestFocus(control[control.length - 1].node);
        },
      ),
    );
  }
}

Я использовал код выше. но я не могу сосредоточиться на только что добавленном текстовом поле. когда я проверяю, имеет ли это новое добавленное текстовое поле фокус, он показывает true, но я не могу ничего написать в этом текстовом поле.

Я не знаю, в чем заключается ошибка в этом коде. Ищу это решение более 4 дней. но я не могу найти решение.

1 Ответ

0 голосов
/ 10 июля 2020

В onPressed вашего элемента FloatingActionButton измените эту строку:

FocusScope.of(context).requestFocus(control[control.length - 1].node);

на это

control[control.length - 1].node.requestFocus();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...