An easy solution is to set `resizeToAvoidBottomInset` to false in your Scaffold a. It prevents the keyboard pushes bottom widgets up.import 'package:flutter/material.dart'; class KeyboardCoveredTextField extends StatefulWidget { @override _KeyboardCoveredTextFieldState createState() => _KeyboardCoveredTextFieldState(); } class _KeyboardCoveredTextFieldState extends State<KeyboardCoveredTextField> { final TextEditingController _textEditingController = TextEditingController(); final ScrollController _scrollController = ScrollController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Keyboard Covered TextField'), ), body: SingleChildScrollView( controller: _scrollController, child: Column( children: [ // Other content can be added here TextField( controller: _textEditingController, decoration: InputDecoration( labelText: 'Enter some text', ), ), // Other content can be added here ], ), ), ); } }final bool showFab = MediaQuery.of(context).viewInsets.bottom==0.0; //then use Visibility widget to wrap the FAB and set visible attribute to showFab buildAcitonButton(){ return Visibility( visible: _showFab, child: RaisedButton( child: ... ), ); }