Я работаю над небольшим проектом с 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
Спасибо