使用动画抖动使 TextField 动态变大?
Making TextField dynamically bigger using animation flutter?
我正在尝试在焦点模式下使我的 TextField 动态变大。
我的 TextField 是这样的:
这张图片的代码是这样的:
Row(
children: [
Expanded(
child: Container(
padding: EdgeInsets.only(top: 12, right: 18, left: 8),
child: TextField(
autofocus: false,
style:
TextStyle(fontSize: 22.0, color: Color(0xFFbdc6cf)),
decoration: InputDecoration(
filled: true,
fillColor: Colors.white,
hintText: 'Ara',
contentPadding: const EdgeInsets.only(
left: 14.0, bottom: 8.0, top: 8.0),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(25.7),
),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(25.7),
),
),
),
),
),
Container(
padding: EdgeInsets.only(top: 10),
child: IconButton(
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return CustomDialogBox();
});
},
iconSize: 50,
icon: SvgPicture.asset(
"assets/images/addfolder.svg",
width: 45,
height: 45,
),
color: Colors.white),
),
Container(
padding: EdgeInsets.only(top: 10),
child: IconButton(
onPressed: () {
Navigator.of(context).pushNamed(Settings.routeName);
},
iconSize: 50,
icon: const Icon(Icons.settings),
color: Colors.white),
),
],
),
点击文本框后,我希望它是这样的:
如何在焦点模式下平滑地放大此文本字段?
我不确定,但看起来它可能有效 https://pub.dev/packages/fitted_text_field_container
要使其具有动画效果,您可以使用 AnimatedContainer,其中 TextField 是子项。使宽度可变,然后添加 FocusNode 并将其分配给 TextField,最后为 FocusNode 定义侦听器......瞧。
例如
class _TestX2State extends State<TestX2> {
FocusNode _focusNode = FocusNode();
double searchFieldSize = 100;
@override
void initState() {
_focusNode.addListener(() {
if (_focusNode.hasFocus) {
searchFieldSize = 500;
setState(() {});
}
});
super.initState();
}
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey,
body: Row(
children: [
AnimatedContainer(
duration: const Duration(milliseconds: 500),
width: searchFieldSize,
padding: EdgeInsets.only(top: 12, right: 18, left: 8),
child: TextField(
focusNode: _focusNode,
autofocus: false,
style: TextStyle(fontSize: 22.0, color: Color(0xFFbdc6cf)),
decoration: InputDecoration(
filled: true,
fillColor: Colors.white,
hintText: 'Ara',
contentPadding: const EdgeInsets.only(left: 14.0, bottom: 8.0, top: 8.0),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(25.7),
),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(25.7),
),
),
),
),
Container(
padding: EdgeInsets.only(top: 10),
child: IconButton(
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return SizedBox();
});
},
iconSize: 50,
icon: Icon(Icons.folder),
color: Colors.white),
),
Container(
padding: EdgeInsets.only(top: 10),
child: IconButton(
onPressed: () {
// Navigator.of(context).pushNamed(Settings.routeName);
},
iconSize: 50,
icon: const Icon(Icons.settings),
color: Colors.white),
),
],
),
);
}
}
我正在尝试在焦点模式下使我的 TextField 动态变大。
我的 TextField 是这样的:
这张图片的代码是这样的:
Row(
children: [
Expanded(
child: Container(
padding: EdgeInsets.only(top: 12, right: 18, left: 8),
child: TextField(
autofocus: false,
style:
TextStyle(fontSize: 22.0, color: Color(0xFFbdc6cf)),
decoration: InputDecoration(
filled: true,
fillColor: Colors.white,
hintText: 'Ara',
contentPadding: const EdgeInsets.only(
left: 14.0, bottom: 8.0, top: 8.0),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(25.7),
),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(25.7),
),
),
),
),
),
Container(
padding: EdgeInsets.only(top: 10),
child: IconButton(
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return CustomDialogBox();
});
},
iconSize: 50,
icon: SvgPicture.asset(
"assets/images/addfolder.svg",
width: 45,
height: 45,
),
color: Colors.white),
),
Container(
padding: EdgeInsets.only(top: 10),
child: IconButton(
onPressed: () {
Navigator.of(context).pushNamed(Settings.routeName);
},
iconSize: 50,
icon: const Icon(Icons.settings),
color: Colors.white),
),
],
),
点击文本框后,我希望它是这样的:
如何在焦点模式下平滑地放大此文本字段?
我不确定,但看起来它可能有效 https://pub.dev/packages/fitted_text_field_container
要使其具有动画效果,您可以使用 AnimatedContainer,其中 TextField 是子项。使宽度可变,然后添加 FocusNode 并将其分配给 TextField,最后为 FocusNode 定义侦听器......瞧。
例如
class _TestX2State extends State<TestX2> {
FocusNode _focusNode = FocusNode();
double searchFieldSize = 100;
@override
void initState() {
_focusNode.addListener(() {
if (_focusNode.hasFocus) {
searchFieldSize = 500;
setState(() {});
}
});
super.initState();
}
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey,
body: Row(
children: [
AnimatedContainer(
duration: const Duration(milliseconds: 500),
width: searchFieldSize,
padding: EdgeInsets.only(top: 12, right: 18, left: 8),
child: TextField(
focusNode: _focusNode,
autofocus: false,
style: TextStyle(fontSize: 22.0, color: Color(0xFFbdc6cf)),
decoration: InputDecoration(
filled: true,
fillColor: Colors.white,
hintText: 'Ara',
contentPadding: const EdgeInsets.only(left: 14.0, bottom: 8.0, top: 8.0),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(25.7),
),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(25.7),
),
),
),
),
Container(
padding: EdgeInsets.only(top: 10),
child: IconButton(
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return SizedBox();
});
},
iconSize: 50,
icon: Icon(Icons.folder),
color: Colors.white),
),
Container(
padding: EdgeInsets.only(top: 10),
child: IconButton(
onPressed: () {
// Navigator.of(context).pushNamed(Settings.routeName);
},
iconSize: 50,
icon: const Icon(Icons.settings),
color: Colors.white),
),
],
),
);
}
}