Flutter新用户引导插件flutter_onboard的使用
Flutter新用户引导插件flutter_onboard的使用
flutter_onboard
是一个用于Flutter应用的新用户引导插件,支持Android和iOS平台。它可以帮助开发者快速实现美观的新手引导页。
安装
在您的 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter_onboard: ^2.0.0
然后运行 flutter pub get
来安装该插件。
基本用法
首先,导入 flutter_onboard
包:
import 'package:flutter_onboard/flutter_onboard.dart';
接下来,在您的应用中使用 OnBoard
组件:
OnBoard(
onBoardData: onBoardData,
pageController: pageController,
// Either Provide onSkip Callback or skipButton Widget to handle skip state
onSkip: () {
print('skipped');
},
// Either Provide onDone Callback or nextButton Widget to handle done state
onDone: () {
print('done tapped');
},
)
OnBoardModel 示例
定义您的引导页面数据:
final List<OnBoardModel> onBoardData = [
const OnBoardModel(
title: "Set your own goals and get better",
description: "Goal support your motivation and inspire you to work harder",
imgUrl: "assets/images/weight.png",
),
const OnBoardModel(
title: "Track your progress with statistics",
description: "Analyse personal result with detailed chart and numerical values",
imgUrl: 'assets/images/graph.png',
),
const OnBoardModel(
title: "Create photo comparisons and share your results",
description: "Take before and after photos to visualize progress and get the shape that you dream about",
imgUrl: 'assets/images/phone.png',
),
];
自定义用法
您可以根据需要自定义 OnBoard
组件的各种属性。以下是部分可配置的属性列表:
属性 | 是否必需 | 描述 |
---|---|---|
onBoardData |
是 | [List<OnBoardModel>] 引导页的数据 |
onSkip |
否 | [VoidCallback] 跳过操作的回调 |
onDone |
否 | [VoidCallback] 完成操作的回调 |
titleStyles |
否 | [TextStyles] 标题文本样式 |
descriptionStyles |
否 | [TextStyles] 描述文本样式 |
imageWidth |
否 | [double] 图片宽度 |
imageHeight |
否 | [double] 图片高度 |
skipButton |
否 | [Widget] 自定义跳过按钮 |
nextButton |
否 | [Widget] 自定义下一步/完成按钮 |
pageController |
是 | [PageController] PageView 控制器 |
duration |
否 | [Duration] 页面切换动画时长 |
curve |
否 | [Curve] 页面切换动画曲线 |
pageIndicatorStyle |
否 | [PageIndicatorStyle] 页面指示器样式 |
自定义用法示例
下面是一个更复杂的自定义用法示例,其中使用了 provider
包来访问 OnBoardState
:
import 'package:flutter/material.dart';
import 'package:flutter_onboard/flutter_onboard.dart';
void main() {
runApp(App());
}
class App extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
final PageController _pageController = PageController();
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: OnBoard(
pageController: _pageController,
onSkip: () {
// print('skipped');
},
onDone: () {
// print('done tapped');
},
onBoardData: onBoardData,
titleStyles: const TextStyle(
color: Colors.deepOrange,
fontSize: 18,
fontWeight: FontWeight.w900,
letterSpacing: 0.15,
),
descriptionStyles: TextStyle(
fontSize: 16,
color: Colors.brown.shade300,
),
pageIndicatorStyle: const PageIndicatorStyle(
width: 100,
inactiveColor: Colors.deepOrangeAccent,
activeColor: Colors.deepOrange,
inactiveSize: Size(8, 8),
activeSize: Size(12, 12),
),
skipButton: TextButton(
onPressed: () {
// print('skipButton pressed');
},
child: const Text(
"Skip",
style: TextStyle(color: Colors.deepOrangeAccent),
),
),
nextButton: OnBoardConsumer(
builder: (context, ref, child) {
final state = ref.watch(onBoardStateProvider);
return InkWell(
onTap: () => _onNextTap(state),
child: Container(
width: 230,
height: 50,
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
gradient: const LinearGradient(
colors: [Colors.redAccent, Colors.deepOrangeAccent],
),
),
child: Text(
state.isLastPage ? "Done" : "Next",
style: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
),
);
},
),
),
);
}
void _onNextTap(OnBoardState onBoardState) {
if (!onBoardState.isLastPage) {
_pageController.animateToPage(
onBoardState.page + 1,
duration: const Duration(milliseconds: 250),
curve: Curves.easeInOutSine,
);
} else {
//print("nextButton pressed");
}
}
}
final List<OnBoardModel> onBoardData = [
const OnBoardModel(
title: "Set your own goals and get better",
description: "Goal support your motivation and inspire you to work harder",
imgUrl: "assets/images/weight.png",
),
const OnBoardModel(
title: "Track your progress with statistics",
description: "Analyse personal result with detailed chart and numerical values",
imgUrl: 'assets/images/graph.png',
),
const OnBoardModel(
title: "Create photo comparisons and share your results",
description: "Take before and after photos to visualize progress and get the shape that you dream about",
imgUrl: 'assets/images/phone.png',
),
];
更多关于Flutter新用户引导插件flutter_onboard的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter新用户引导插件flutter_onboard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,flutter_onboard
是一个用于在 Flutter 应用中实现新用户引导(onboarding)屏幕的流行插件。下面是一个简单的代码示例,展示如何在 Flutter 应用中使用 flutter_onboard
插件来实现新用户引导屏幕。
首先,确保你已经在 pubspec.yaml
文件中添加了 flutter_onboard
依赖:
dependencies:
flutter:
sdk: flutter
flutter_onboard: ^2.0.0 # 请检查最新版本号
然后,运行 flutter pub get
来安装依赖。
接下来,在你的 Flutter 应用中创建一个新用户引导屏幕。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:flutter_onboard/flutter_onboard.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Onboarding Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: OnboardingScreen(),
);
}
}
class OnboardingScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Onboarding(
pages: [
OnboardingPage(
title: "Welcome!",
description: "This is the first screen of the onboarding process.",
image: Image.asset("assets/images/onboarding_1.png"), // 请确保你有这张图片资源
),
OnboardingPage(
title: "Get Started",
description: "This is the second screen of the onboarding process.",
image: Image.asset("assets/images/onboarding_2.png"), // 请确保你有这张图片资源
),
OnboardingPage(
title: "Enjoy!",
description: "This is the third screen of the onboarding process.",
image: Image.asset("assets/images/onboarding_3.png"), // 请确保你有这张图片资源
),
],
dotsIndicatorColor: Colors.white,
completeButton: TextButton(
onPressed: () {
// 完成引导后的逻辑,比如跳转到主屏幕
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => HomeScreen()),
);
},
child: Text("Get Started"),
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.blue),
foregroundColor: MaterialStateProperty.all(Colors.white),
textStyle: MaterialStateProperty.all(
TextStyle(fontSize: 18),
),
),
),
skipButton: TextButton(
onPressed: () {
// 跳过引导后的逻辑,比如跳转到主屏幕
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => HomeScreen()),
);
},
child: Text("Skip"),
style: ButtonStyle(
foregroundColor: MaterialStateProperty.all(Colors.white),
),
),
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Home Screen"),
),
body: Center(
child: Text("Welcome to the Home Screen!"),
),
);
}
}
在这个示例中:
Onboarding
小部件接受一个pages
列表,每个页面都是一个OnboardingPage
小部件。- 每个
OnboardingPage
小部件包含标题、描述和一张图片。 dotsIndicatorColor
用于设置底部指示器的颜色。completeButton
和skipButton
分别定义了完成和跳过按钮的样式和行为。当用户点击这些按钮时,将导航到主屏幕 (HomeScreen
)。
确保你已经在项目的 assets
文件夹中添加了相应的图片资源,并在 pubspec.yaml
文件中声明它们。例如:
flutter:
assets:
- assets/images/onboarding_1.png
- assets/images/onboarding_2.png
- assets/images/onboarding_3.png
这样,你就可以在 Flutter 应用中使用 flutter_onboard
插件来创建新用户引导屏幕了。