Flutter动画抽屉插件animated_drawer的使用
Flutter动画抽屉插件animated_drawer的使用
Animated Drawer
是一个为 Flutter 提供简单且完全可定制化动画抽屉的插件。它支持丰富的动画效果,并允许开发者自定义抽屉的打开和关闭行为。
效果图
特性
- 动画速度设置:可以调整动画的速度。
- 坐标设置:可以设置 X 轴和 Y 轴的坐标值,用于控制动画位置。
- 旋转角度设置:可以设置旋转角度。
- 图标设置:可以设置打开和关闭抽屉的图标。
- 支持渐变背景颜色:支持设置渐变背景。
- 全定制化支持:可以完全自定义抽屉内容。
- 任意类型的小部件:支持传递任意类型的小部件到主页和菜单页。
- 阴影效果:支持增强抽屉的视觉效果。
- 阴影可定制化:阴影效果也可以进行个性化配置。
使用方法
以下是一个完整的 animated_drawer
使用示例:
import 'package:animated_drawer/views/animated_drawer.dart';
import 'package:flutter/material.dart';
void main() {
runApp(DemoApp());
}
class DemoApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Home(),
);
}
}
class Home extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return AnimatedDrawer(
// 主页内容
homePageContent: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
color: Colors.blue[200],
child: Center(
child: Image.network(
"https://user-images.githubusercontent.com/38032118/105316779-2a480980-5be3-11eb-900e-18fcd599493d.png",
height: MediaQuery.of(context).size.height / 2,
),
),
),
// 抽屉内容
menuPageContent: Padding(
padding: const EdgeInsets.only(top: 100.0, left: 15),
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
FlutterLogo(
size: MediaQuery.of(context).size.width / 4,
),
Row(
children: [
Text(
"FLUTTER",
style: TextStyle(
fontSize: 17,
color: Colors.white,
fontWeight: FontWeight.bold),
),
Text(
"HOLIC",
style: TextStyle(
fontSize: 17,
color: Colors.blue[200],
fontWeight: FontWeight.bold),
)
],
),
Padding(
padding: EdgeInsets.only(bottom: 40),
),
Text(
"Home Screen",
style: TextStyle(
color: Colors.white,
),
),
Padding(
padding: EdgeInsets.only(bottom: 20),
),
Text(
"Screen 2",
style: TextStyle(
color: Colors.white,
),
),
Padding(
padding: EdgeInsets.only(bottom: 20),
),
Divider(
color: Color(0xFF5950a0),
thickness: 2,
),
Padding(
padding: EdgeInsets.only(bottom: 20),
),
Text(
"About",
style: TextStyle(
color: Colors.white,
),
),
],
),
),
),
// 动画参数配置
homePageXValue: 150,
homePageYValue: 80,
homePageAngle: -0.2,
homePageSpeed: 250,
shadowXValue: 122,
shadowYValue: 110,
shadowAngle: -0.275,
shadowSpeed: 550,
openIcon: Icon(Icons.menu_open, color: Color(0xFF1f186f)),
closeIcon: Icon(Icons.arrow_back_ios, color: Color(0xFF1f186f)),
shadowColor: Color(0xFF4c41a3),
backgroundGradient: LinearGradient(
colors: [Color(0xFF4c41a3), Color(0xFF1f186f)],
),
);
}
}
更多关于Flutter动画抽屉插件animated_drawer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter动画抽屉插件animated_drawer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
animated_drawer
是一个用于 Flutter 的插件,它可以帮助你创建一个带有动画效果的抽屉(Drawer)。这个插件可以让你轻松地实现一个带有滑动动画的侧边栏,提升用户体验。
安装
首先,你需要在 pubspec.yaml
文件中添加 animated_drawer
依赖:
dependencies:
flutter:
sdk: flutter
animated_drawer: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
以下是一个简单的示例,展示如何使用 animated_drawer
插件:
import 'package:flutter/material.dart';
import 'package:animated_drawer/animated_drawer.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Animated Drawer Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return AnimatedDrawer(
homePageXValue: 150, // 主页面在抽屉打开时的X轴偏移量
homePageYValue: 80, // 主页面在抽屉打开时的Y轴偏移量
homePageAngle: -0.2, // 主页面在抽屉打开时的旋转角度
homePageSpeed: 250, // 主页面的动画速度
shadowXValue: 122, // 阴影的X轴偏移量
shadowYValue: 110, // 阴影的Y轴偏移量
shadowAngle: -0.275, // 阴影的旋转角度
shadowSpeed: 550, // 阴影的动画速度
openIcon: Icons.menu, // 打开抽屉的图标
closeIcon: Icons.close, // 关闭抽屉的图标
child: Scaffold(
appBar: AppBar(
title: Text('Animated Drawer Demo'),
),
body: Center(
child: Text('Home Page Content'),
),
),
drawer: Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
DrawerHeader(
decoration: BoxDecoration(
color: Colors.blue,
),
child: Text(
'Drawer Header',
style: TextStyle(
color: Colors.white,
fontSize: 24,
),
),
),
ListTile(
leading: Icon(Icons.home),
title: Text('Home'),
onTap: () {
// 处理点击事件
},
),
ListTile(
leading: Icon(Icons.settings),
title: Text('Settings'),
onTap: () {
// 处理点击事件
},
),
],
),
),
);
}
}