Flutter - клавиатура не отображается после первого использования формы - PullRequest
0 голосов
/ 24 апреля 2020

Я работаю над небольшим проектом с Flutter. У меня есть экран с двумя состояниями: либо он отображает список объектов из базы данных SQLite, либо показывает форму для добавления нового объекта. Код работает хорошо, чтобы добавить один (и только один) объект. После вставки он возвращается к списку объектов, включая вставленный. Тем не менее, когда я go снова в форме для добавления объекта, клавиатура не отображается, когда я нацеливаю поле.

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

Вот мой код:

//Screen to display list of objects
class objectInventory extends StatefulWidget {
  _objectInventoryState createState() => _objectInventoryState();
}

class _objectInventoryState extends State<objectInventory> {
  String _state = "inventory"; // inventory, or add

  Widget build(BuildContext context) {
    if (_state == "add") {
      final _formKey = GlobalKey<FormState>();
      MyObject _insertedObject = new MyObject();
      return Scaffold(
        appBar: AppBar(title: Text("Add a new object")),
        body: Form(
            key: _formKey,
            child: Column(
              children: <Widget>[
                TextFormField(
                  decoration: InputDecoration(labelText: "Insert object name"),
                  keyboardType: TextInputType.text,
                  validator: (value) {
                    if (value.isEmpty) {
                      return 'Please insert a value';
                    }
                    return null;
                  },
                  onSaved: (value) => _insertedObject.objectName = value,
                ),
                RaisedButton(
                  child: Text("Add"),
                  onPressed: () {
                    if (_formKey.currentState.validate()) {
                      FocusScope.of(context).unfocus();
                      _formKey.currentState.save();

                      //Generate uuid of the object
                      _insertedObject.uuid = Uuid().v4();

                      insertObject(_insertedObject).then((value) {
                        setState(() {
                          _state = "inventory";
                        });
                      });

                      /* Navigator.popAndPushNamed(context, '/objectDetails',
                        arguments: {
                          'id': myObjectList.indexOf(_insertedObject)
                        }); */
                    }
                  },
                )
              ],
            )),
      );
    } else {
      //Affichage de l'inventaire
      return Scaffold(
        appBar: AppBar(title: Text('The Safe'), actions: <Widget>[
          IconButton(
              icon: Icon(Icons.list),
              onPressed: () {
                setState(() {});
              })
        ]),
        body: FutureBuilder(
            future: getObjects(),
            builder: (BuildContext context, AsyncSnapshot<List> snapshot) {
              debugPrint(snapshot.connectionState.toString());
              //Check the state of the data fetching
              if (snapshot.connectionState == "waiting") {
                return Center(
                    child: Container(
                        padding: EdgeInsets.all(100),
                        child: Align(
                            child: CircularProgressIndicator(),
                            alignment: Alignment.topCenter)));
              }
              if (!snapshot.hasData) {
                return Text("No data available");
              }
              myObjectList = snapshot.data;
              return _buildObjectList();
            }),
        floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
        floatingActionButton: FloatingActionButton.extended(
            onPressed: () {
              setState(() {
                _state = "add";
              });
            },
            label: Text('Add a new object'),
            icon: Icon(Icons.add)),
      );
    }
  }

  _buildObjectList() {
    return ListView.builder(
        itemCount: myObjectList.length,
        itemBuilder: (context, i) {
          return ListTile(
            title: Text(myObjectList[i].objectName),
            //subtitle: Text(myObjectList[i].category),
            trailing: IconButton(
                icon: Icon(Icons.more_horiz),
                onPressed: () {
                  Navigator.pushNamed(context, '/objectDetails',
                      arguments: {'id': i});
                }),
          );
        });
  }
} // End of _objectInventoryState

Спасибо

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