Flutter动画效果插件shimmer的使用
Flutter动画效果插件shimmer的使用
Shimmer
shimmer
包为Flutter项目提供了一种简单的方法来添加闪亮的效果。
如何使用
首先,确保你已经在pubspec.yaml
文件中添加了shimmer
依赖:
dependencies:
flutter:
sdk: flutter
shimmer: ^latest_version # 替换为最新版本号
然后,在你的Dart代码中导入shimmer
:
import 'package:shimmer/shimmer.dart';
接下来,你可以通过以下方式创建一个带有闪亮效果的组件:
SizedBox(
width: 200.0,
height: 100.0,
child: Shimmer.fromColors(
baseColor: Colors.red,
highlightColor: Colors.yellow,
child: Text(
'Shimmer',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 40.0,
fontWeight: FontWeight.bold,
),
),
),
);
示例Demo
下面是一个完整的示例demo,展示了如何在应用中使用shimmer
插件。此示例包含两个页面:一个是加载列表页,另一个是滑动解锁页。
main.dart
import 'package:flutter/material.dart';
import 'package:shimmer/shimmer.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Shimmer',
routes: <String, WidgetBuilder>{
'loading': (_) => const LoadingListPage(),
'slide': (_) => SlideToUnlockPage(),
},
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Shimmer'),
),
body: Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: Column(
children: <Widget>[
ListTile(
title: const Text('Loading List'),
onTap: () => Navigator.of(context).pushNamed('loading'),
),
ListTile(
title: const Text('Slide To Unlock'),
onTap: () => Navigator.of(context).pushNamed('slide'),
)
],
),
),
);
}
}
LoadingListPage
class LoadingListPage extends StatefulWidget {
const LoadingListPage({super.key});
@override
State<LoadingListPage> createState() => _LoadingListPageState();
}
class _LoadingListPageState extends State<LoadingListPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Loading List'),
),
body: Shimmer.fromColors(
baseColor: Colors.grey.shade300,
highlightColor: Colors.grey.shade100,
enabled: true,
child: const SingleChildScrollView(
physics: NeverScrollableScrollPhysics(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
BannerPlaceholder(),
TitlePlaceholder(width: double.infinity),
SizedBox(height: 16.0),
ContentPlaceholder(
lineType: ContentLineType.threeLines,
),
SizedBox(height: 16.0),
TitlePlaceholder(width: 200.0),
SizedBox(height: 16.0),
ContentPlaceholder(
lineType: ContentLineType.twoLines,
),
SizedBox(height: 16.0),
TitlePlaceholder(width: 200.0),
SizedBox(height: 16.0),
ContentPlaceholder(
lineType: ContentLineType.twoLines,
),
],
),
)),
);
}
}
SlideToUnlockPage
class SlideToUnlockPage extends StatelessWidget {
final List<String> days = <String>[
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
];
final List<String> months = <String>[
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
];
SlideToUnlockPage({super.key});
@override
Widget build(BuildContext context) {
final DateTime time = DateTime.now();
final int hour = time.hour;
final int minute = time.minute;
final int day = time.weekday;
final int month = time.month;
final int dayInMonth = time.day;
return Scaffold(
appBar: AppBar(
title: const Text('Slide To Unlock'),
),
body: Stack(
fit: StackFit.expand,
children: <Widget>[
Image.asset(
'assets/images/background.jpg',
fit: BoxFit.cover,
),
Positioned(
top: 48.0,
right: 0.0,
left: 0.0,
child: Center(
child: Column(
children: <Widget>[
Text(
'${hour < 10 ? '0$hour' : '$hour'}:${minute < 10 ? '0$minute' : '$minute'}',
style: const TextStyle(
fontSize: 60.0,
color: Colors.white,
),
),
const Padding(
padding: EdgeInsets.symmetric(vertical: 4.0),
),
Text(
'${days[day - 1]}, ${months[month - 1]} $dayInMonth',
style: const TextStyle(fontSize: 24.0, color: Colors.white),
)
],
),
),
),
Positioned(
bottom: 32.0,
left: 0.0,
right: 0.0,
child: Center(
child: Opacity(
opacity: 0.8,
child: Shimmer.fromColors(
baseColor: Colors.black12,
highlightColor: Colors.white,
child: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Image.asset(
'assets/images/chevron_right.png',
height: 20.0,
),
const Padding(
padding: EdgeInsets.symmetric(horizontal: 4.0),
),
const Text(
'Slide to unlock',
style: TextStyle(
fontSize: 28.0,
),
)
],
),
),
),
))
],
),
);
}
}
以上代码展示了如何在Flutter应用中使用shimmer
插件创建具有闪亮效果的界面。你可以根据需要调整颜色、大小和其他属性,以适应你的应用设计。
更多关于Flutter动画效果插件shimmer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动画效果插件shimmer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,关于在Flutter中使用shimmer
动画效果插件,这里有一个简单的代码案例来展示如何使用它。shimmer
动画效果通常用于在内容加载时显示占位符,以提供视觉反馈,让用户知道内容正在加载。
首先,你需要在你的pubspec.yaml
文件中添加shimmer
包的依赖:
dependencies:
flutter:
sdk: flutter
shimmer: ^2.0.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,下面是一个简单的示例代码,展示如何在Flutter中使用shimmer
效果:
import 'package:flutter/material.dart';
import 'package:shimmer/shimmer.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Shimmer Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Shimmer Animation Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(
height: 200,
child: Shimmer.fromColors(
baseColor: Colors.grey[300]!,
highlightColor: Colors.grey[100]!,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
width: double.infinity,
height: 20,
color: Colors.transparent,
margin: EdgeInsets.only(bottom: 10),
),
Container(
width: 150,
height: 20,
color: Colors.transparent,
margin: EdgeInsets.only(bottom: 10),
),
Container(
width: double.infinity,
height: 20,
color: Colors.transparent,
),
],
),
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {},
child: Text('Load Data'),
),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个Shimmer
动画效果作为占位符。Shimmer.fromColors
方法允许我们指定基础颜色和高亮颜色,以创建闪烁效果。在这个例子中,我们模拟了一个列表项的加载动画,其中包含三个不同宽度的透明容器,以模拟真实数据的占位符。
当真实数据加载完成后,你可以简单地用真实数据替换这个Shimmer
组件。通常,你可能会在数据加载完成时通过条件渲染来切换显示的内容。
希望这个示例能帮助你理解如何在Flutter中使用shimmer
动画效果插件!