Flutter引导页插件introduction_story的使用
Flutter引导页插件introduction_story的使用
插件介绍
introduction_story
是一个受社交媒体故事启发的屏幕,可以用来作为新用户引导或功能介绍。以下是该插件的一个示例动画:
开始使用
- 在
pubspec.yaml
文件中添加introduction_story
依赖:
dependencies:
introduction_story: ^0.1.0
使用方法
- 在你的 Dart 文件中添加以下导入语句:
import 'package:flutter/material.dart';
import 'package:introduction_story/introduction_story.dart';
- 声明引导页面应该是什么样子,并通过
Navigator
推送该页面:
Navigator.push(
context,
MaterialPageRoute(
builder: (_) {
return IntroductionStoryScreen(
stories: [
Story(
imagePath: 'assets/image_1.png', // 图片路径
featureName: 'Here you can write the story name', // 故事名称
title: 'Here you can write the title', // 标题
description: 'Here you can write the description', // 描述
),
Story(
imagePath: 'assets/image_2.png',
featureName: 'Here you can write the story name',
title: 'Here you can write the title',
description: 'Here you can write the description',
),
],
);
},
),
);
文档说明
Story 类
Dart 属性 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
name | String | 故事名称 | 空字符串 |
title | String | 故事标题 | 空字符串 |
description | String | 故事描述 | 空字符串 |
imagePath | String | 故事背景图片路径 | Null |
decoration | StoryDecoration | 故事自定义设置(例如前景色、文本样式) | StoryDecoration() |
StoryDecoration 类
Dart 属性 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
lightMode | bool | 指定故事亮度模式(亮/暗),应用于状态栏图标(仅限 iOS)和所有前景组件颜色 | True |
foregroundColor | Color | 设置前景部件颜色 | Null |
backgroundColor | Color | 故事背景颜色 | Null |
titleTextStyle | TextStyle | 设置标题文本样式 | Null |
descriptionTextStyle | TextStyle | 设置描述文本样式 | Null |
nameTextStyle | TextStyle | 设置名称文本样式 | Null |
完整示例代码
以下是一个完整的示例,展示如何在应用程序中使用 introduction_story
插件:
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:introduction_story/introduction_story.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Introduction Story',
theme: ThemeData.dark(),
debugShowCheckedModeBanner: false,
home: const HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Story Introduction'),
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.all(14),
child: Text.rich(
TextSpan(
text:
'我们假设这是新提供的功能的简要说明。请查看下面的CTA。\n',
children: [
TextSpan(
text: '点击以获取关于 $_featureName 的更多信息。 🍇',
style: const TextStyle(
decoration: TextDecoration.underline,
color: Colors.lightBlueAccent,
),
recognizer: TapGestureRecognizer()
..onTap = () => _pushIntroductionStoriesScreen(context),
)
],
),
),
),
Expanded(
child: ListView.separated(
padding: const EdgeInsets.all(12),
separatorBuilder: (_, __) => const SizedBox(height: 12),
itemBuilder: (BuildContext context, int index) {
return Container(
height: 200,
decoration: BoxDecoration(
color: Colors.grey[200]?.withOpacity(.1),
borderRadius: BorderRadius.circular(20),
image: const DecorationImage(
image: AssetImage('assets/placeholder.png'),
),
),
);
},
itemCount: 5,
),
),
],
),
),
);
}
String get _featureName => 'Grocery Store'; // 功能名称
void _pushIntroductionStoriesScreen(BuildContext context) {
Navigator.push<void>(
context,
PageRouteBuilder(
opaque: false,
pageBuilder: (_, __, ___) => IntroductionStoryScreen(
isDismissible: true,
stories: [
Story(
imagePath: 'assets/image_1.png', // 图片路径
name: _featureName, // 故事名称
title: '在线杂货购物', // 标题
description:
'购买您喜欢的杂货以及即食产品,由新鲜食材制成,每天为您准备。', // 描述
),
Story(
imagePath: 'assets/image_2.png',
title: '我们的目标是优质品质',
name: _featureName,
description:
'类别:新鲜水果、蔬菜和草药、面包和糕点、奶酪、乳制品和熟食、甜点和糖果。',
decoration: const StoryDecoration(lightMode: false), // 自定义装饰
),
Story(
imagePath: 'assets/image_3.png',
title: '我们快速送货上门',
name: _featureName,
description:
'您的美食杂货只需点击一下即可!选择您喜欢的杂货并在15分钟内收到您的订单。',
decoration: const StoryDecoration(lightMode: false), // 自定义装饰
),
],
),
),
);
}
}
更多关于Flutter引导页插件introduction_story的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter引导页插件introduction_story的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用introduction_story
插件来创建引导页的示例代码。introduction_story
是一个流行的Flutter插件,用于创建精美的引导页体验。
首先,你需要在你的pubspec.yaml
文件中添加introduction_story
依赖:
dependencies:
flutter:
sdk: flutter
introduction_story: ^0.8.0 # 请检查最新版本号
然后,运行flutter pub get
来获取依赖。
接下来,你可以在你的主文件中(通常是main.dart
)使用IntroductionScreen
组件来创建引导页。以下是一个完整的示例:
import 'package:flutter/material.dart';
import 'package:introduction_story/introduction_story.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Introduction Story Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: IntroductionScreenPage(),
);
}
}
class IntroductionScreenPage extends StatefulWidget {
@override
_IntroductionScreenPageState createState() => _IntroductionScreenPageState();
}
class _IntroductionScreenPageState extends State<IntroductionScreenPage> {
final List<PageViewModel> pages = [
PageViewModel(
title: "Welcome!",
body: "This is the first page of the introduction.",
image: Center(
child: Image.asset('assets/images/page1.png'), // 请确保你有这个图片资源
),
footer: Footer(
skipButton: SkipButton(
onPressed: () => Navigator.pushReplacementNamed(context, '/home'),
),
nextButton: NextButton(),
),
),
PageViewModel(
title: "Features",
body: "Discover our amazing features!",
image: Center(
child: Image.asset('assets/images/page2.png'), // 请确保你有这个图片资源
),
footer: Footer(
skipButton: SkipButton(
onPressed: () => Navigator.pushReplacementNamed(context, '/home'),
),
nextButton: NextButton(),
),
),
PageViewModel(
title: "Get Started",
body: "Ready to get started?",
image: Center(
child: Image.asset('assets/images/page3.png'), // 请确保你有这个图片资源
),
footer: Footer(
skipButton: SkipButton(
onPressed: () => Navigator.pushReplacementNamed(context, '/home'),
),
doneButton: DoneButton(
onPressed: () => Navigator.pushReplacementNamed(context, '/home'),
),
),
),
];
@override
Widget build(BuildContext context) {
return IntroductionScreen(
pages: pages,
onDone: () => Navigator.pushReplacementNamed(context, '/home'),
onSkip: () => Navigator.pushReplacementNamed(context, '/home'),
showSkipButton: true,
skipFlex: 0,
nextFlex: 0,
doneFlex: 1,
skip: const Text('Skip'),
next: const Text('Next'),
done: const Text('Done'),
dotsDecorator: DotsDecorator(
size: Size(10.0, 10.0),
activeSize: Size(20.0, 10.0),
activeColor: Colors.deepOrange,
color: Colors.grey,
spacing: 8.0,
),
);
}
}
在这个示例中,我们定义了一个包含三个引导页的列表pages
,每个页面都有一个标题、正文、图片和页脚。页脚包含一个跳过按钮和一个下一步/完成按钮。
请确保你有assets/images/page1.png
、assets/images/page2.png
和assets/images/page3.png
这些图片资源,或者你可以替换为你自己的图片资源。
此外,你需要在你的pubspec.yaml
文件中声明这些图片资源:
flutter:
assets:
- assets/images/page1.png
- assets/images/page2.png
- assets/images/page3.png
这个示例展示了如何使用introduction_story
插件创建一个简单的引导页流程。你可以根据需要进一步自定义和扩展它。