Flutter动画输入框边框插件animated_input_border的使用
Flutter动画输入框边框插件animated_input_border的使用
AnimatedInputBorder
是一个用于 Flutter 的包,可以为文本字段提供可自定义的动画边框。该插件通过用户交互(例如聚焦或输入变化)来实现平滑过渡效果,从而增强用户界面设计。
关键特性
- 当文本字段获得或失去焦点时,边框可以进行动画。
- 可以自定义边框半径、宽度和颜色。
- 支持间隙填充,以便适应浮动标签或缺口。
- 使用
AnimationController
实现平滑且视觉上吸引人的动画效果。 - 无缝集成到
TextFormField
和InputDecoration
中。
入门指南 🔥
首先,在你的项目中添加 animated_input_border
作为依赖项。
dependencies:
animated_input_border: <latest_version>
运行以下命令以获取依赖项:
$ flutter pub get
在 Dart 代码中导入它:
import 'package:animated_input_border/animated_input_border.dart';
接下来,你可以使用 AnimatedInputBorder
来创建具有动画效果的输入框边框。
TextFormField(
focusNode: focusNode,
decoration: InputDecoration(
label: const Text("Focused Border Animation"),
border: const OutlineInputBorder(),
focusedBorder: AnimatedInputBorder(
animationValue: _animationFocusedBorder.value, // 创建动画控制器
borderRadius: BorderRadius.circular(20.0),
borderSide: const BorderSide(
width: 2,
color: Colors.deepPurple,
)),
hintText: "Enter value"),
);
其他示例 🤯
你还可以尝试缩放动画。开发者可以自行尝试。以下是代码片段:
TextFormField(
focusNode: focusNode,
decoration: InputDecoration(
border: const OutlineInputBorder(),
focusedBorder: AnimatedInputBorder(
borderRadius: BorderRadius.circular(20.0),
borderSide: const BorderSide(
width: 3,
color: Colors.green,
)).scale(_animationFocusedBorder.value),
hintText: "Enter value"),
);
贡献
欢迎贡献、提出问题和功能请求!请查看 GitHub 仓库。
作者
由 Pranim S. Thakuri 用心开发。
示例代码
以下是完整的示例代码,展示了如何使用 AnimatedInputBorder
插件。
import 'package:animated_input_border/animated_input_border.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Animated TextField',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({
super.key,
});
[@override](/user/override)
Widget build(BuildContext context) {
return const Scaffold(
body: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
AnimatedInputBorderExample(),
AnimatedInputFocusedBorderExample(),
],
),
);
}
}
class AnimatedInputBorderExample extends StatefulWidget {
const AnimatedInputBorderExample({super.key});
[@override](/user/override)
State<AnimatedInputBorderExample> createState() => _AnimatedInputBorderExampleState();
}
class _AnimatedInputBorderExampleState extends State<AnimatedInputBorderExample> with SingleTickerProviderStateMixin {
late AnimationController _animationController;
[@override](/user/override)
void initState() {
super.initState();
_animationController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 800),
);
// 启动动画以响应小部件渲染
_animationController.forward();
}
[@override](/user/override)
void dispose() {
_animationController.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: AnimatedBuilder(
animation: _animationController,
builder: (context, child) {
return TextFormField(
decoration: InputDecoration(
hintText: "Simple Border animation",
border: AnimatedInputBorder(
animationValue: _animationController.value,
),
),
);
},
),
);
}
}
// 这个示例使用 AnimationController 动画文本字段的聚焦边框。
// 边框在输入字段获得或失去焦点时动态更改其样式(例如,半径、宽度)。
class AnimatedInputFocusedBorderExample extends StatefulWidget {
const AnimatedInputFocusedBorderExample({super.key});
[@override](/user/override)
State<AnimatedInputFocusedBorderExample> createState() => _AnimatedInputFocusedBorderExampleState();
}
class _AnimatedInputFocusedBorderExampleState extends State<AnimatedInputFocusedBorderExample> with SingleTickerProviderStateMixin {
late AnimationController _animationFocusedBorder;
late FocusNode focusNode;
[@override](/user/override)
void initState() {
super.initState();
// 为聚焦边框示例设置焦点节点
focusNode = FocusNode();
// 为聚焦边框示例创建动画控制器
_animationFocusedBorder = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 2000),
);
// 监听器函数,当边框聚焦时执行动画
_animateBorderOnFocusChange();
}
// 根据焦点状态的变化动画边框
void _animateBorderOnFocusChange() {
focusNode.addListener(() {
if (focusNode.hasFocus) {
_animationFocusedBorder.forward();
} else {
_animationFocusedBorder.value = 0.0;
}
});
}
[@override](/user/override)
void dispose() {
super.dispose();
_animationFocusedBorder.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: AnimatedBuilder(
animation: _animationFocusedBorder,
builder: (context, child) {
return TextFormField(
focusNode: focusNode,
decoration: InputDecoration(
border: const OutlineInputBorder(),
focusedBorder: AnimatedInputBorder(
borderRadius: BorderRadius.circular(20.0),
borderSide: const BorderSide(
width: 3,
color: Colors.green,
)).scale(_animationFocusedBorder.value),
hintText: "Enter value",
),
);
},
),
);
}
}
更多关于Flutter动画输入框边框插件animated_input_border的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动画输入框边框插件animated_input_border的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
animated_input_border
是一个用于 Flutter 的插件,它允许你为输入框(如 TextField
或 TextFormField
)添加动画边框效果。这个插件可以帮助你创建更加动态和吸引人的用户界面。
安装
首先,你需要在 pubspec.yaml
文件中添加 animated_input_border
插件的依赖:
dependencies:
flutter:
sdk: flutter
animated_input_border: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
基本使用
以下是一个简单的示例,展示了如何使用 animated_input_border
插件为 TextField
添加动画边框:
import 'package:flutter/material.dart';
import 'package:animated_input_border/animated_input_border.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Animated Input Border Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
AnimatedInputBorder(
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.blue, width: 2.0),
),
unfocusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0),
),
child: TextField(
decoration: InputDecoration(
labelText: 'Enter your text',
),
),
),
],
),
),
),
);
}
}
参数说明
focusedBorder
: 当输入框获得焦点时显示的边框样式。通常是一个OutlineInputBorder
,你可以自定义颜色和宽度。unfocusedBorder
: 当输入框失去焦点时显示的边框样式。同样,你可以自定义颜色和宽度。child
: 你要应用动画边框的输入框组件,通常是TextField
或TextFormField
。
自定义动画
你可以通过调整 focusedBorder
和 unfocusedBorder
的样式来自定义动画效果。例如,你可以更改边框的颜色、宽度、圆角等。
示例:自定义圆角边框
AnimatedInputBorder(
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.green, width: 2.0),
borderRadius: BorderRadius.circular(20.0),
),
unfocusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0),
borderRadius: BorderRadius.circular(10.0),
),
child: TextField(
decoration: InputDecoration(
labelText: 'Enter your text',
),
),
)