#flutter #flutter-layout
#flutter #flutter-макет
Вопрос:
Как вы можете видеть, высота отличается.
На картинке слева показано приложение, запущенное, когда клавиатура не всплывала. А на картинке справа показано, что приложение запускается, когда появляется клавиатура и нажимается «Горячая перезагрузка Flutter» (Android Studio).
Я хочу, чтобы текстовое поле было похоже на картинку справа без всплывающего окна клавиатуры.
Как я могу это исправить?
Панель приложений
class CustomAppbar extends StatelessWidget with PreferredSizeWidget{
@override
final Size preferredSize;
@override
static double height = AppBar().preferredSize.height;
CustomAppbar() : preferredSize = Size.fromHeight(height);
@override
Widget build(BuildContext context) {
@override
final double statusbarHeight = MediaQuery.of(context).padding.top;
return Container(
child: Stack(
children: <Widget>[
AppBar(
backgroundColor: Colors.white,
elevation: 0,
iconTheme: IconThemeData(color: Colors.black,),
),
Container(
decoration: BoxDecoration(
color: Colors.grey,
borderRadius: BorderRadius.all(Radius.circular(10))
),
margin: EdgeInsets.only(left: 60, top: statusbarHeight 5, bottom: 5, right: 5),
child: InputBox(),
)
],
),
);
}
}
Поле ввода
class InputBox extends StatefulWidget {
@override
_InputBoxState createState() => _InputBoxState();
}
class _InputBoxState extends State<InputBox> {
TextEditingController _SearchController = TextEditingController();
FocusNode _focusNode = FocusNode();
String _SearchText = "";
_InputBoxState(){
_SearchController.addListener(() {
setState((){
_SearchText = _SearchController.text;
});
});
}
@override
Widget build(BuildContext context) {
return TextField(
focusNode: _focusNode,
style: TextStyle(fontSize: 19),
controller: _SearchController,
decoration: InputDecoration(
hintText: "Search",
border: InputBorder.none,
prefixIcon: Icon(Icons.search, color: Colors.white,),
suffixIcon: _focusNode.hasFocus ? IconButton(
icon: Icon(Icons.cancel, color: Colors.white,),
onPressed: (){
setState((){
_SearchController.clear();
_SearchText = "";
_focusNode.unfocus();
});
},
) : Container()
)
);
}
}
Ответ №1:
style:TextStyle(height: 20), //custome height
decoration: InputDecoration(
isDense: true) // remove padding inside textfield
вы можете использовать ContentPadding, если хотите добавить отступы внутри текстового поля