Я хотел бы проверить форму внутри bottomSheet, который включен в Scaffold.
Проблема в том, что когда я закрываю bottomSheet и нажимаю «SAVE» (в AppBar).
Кажется, окончательная форма = _formAddPlayerKey.currentState; вернуть ноль, когда нижний лист закрыт.
Когда нижний лист открыт, я могу проверить форму.
Мой код, скаффолд с нижним листом внутри:
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(
title: Text('MyTitle'),
actions: <Widget>[
//--- Form validation
FlatButton(
onPressed: () {
final form = _formAddPlayerKey.currentState;
if (form.validate()) {
form.save();
print('SAV OK!!!');
}
},
child: Text(
'SAVE',
style: Theme.of(context)
.textTheme
.subhead
.copyWith(color: Colors.white),
),
)
],
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
floatingActionButton:
showFab
? FloatingActionButton(
child: const Icon(Icons.comment, color: Colors.white),
onPressed: () {
var bottomSheetController =
_scaffoldKey.currentState.showBottomSheet(
(context) => Container(
color: Colors.pink.withOpacity(
0.2), //Theme.of(context).accentColor.withOpacity(0.5),
//backgroundColor: Theme.of(context).accentColor.withOpacity(0.5),
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: Form(
key: _formAddPlayerKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
SizedBox(
height: 10,
),
Container(
color: Colors.white.withOpacity(0.5),
//Colors.white,
margin: EdgeInsets.all(16.0),
child: TextFormField(
maxLines: 4,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 30,
),
decoration: InputDecoration(
hoverColor: Colors.white,
fillColor: Colors.white,
labelText: 'Observation',
border: OutlineInputBorder(),
prefixIcon: Icon(Icons.note),
),
keyboardType: TextInputType.text,
initialValue:
'My observation....',
validator: (value) {
return validateMyValue(value);
},
onSaved: (value) =>
_MyValue = value,
),
),
],
),
),
),
);
showFoatingActionButton(false);
/// close ?
bottomSheetController.closed.then((value) {
showFoatingActionButton(true);
});
})
: Container(),
bottomNavigationBar: _buildBottomNavigationBar(context),
body: _buildBody(context),
);
}
void showFoatingActionButton(bool value) {
setState(() {
showFab = value;
});
}