在Flutter中实现引导页可以通过以下步骤完成:
1. 使用PageView实现滑动页面
创建多个页面,用户可以通过左右滑动切换。
PageController _controller = PageController();
List<Widget> pages = [
GuidePage1(),
GuidePage2(),
GuidePage3(),
];
@override
Widget build(BuildContext context) {
return PageView(
controller: _controller,
children: pages,
);
}
2. 添加指示器
使用DotIndicator或自定义指示器显示当前页位置。
// 在PageView下方添加
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: List.generate(pages.length, (index) {
return Container(
margin: EdgeInsets.symmetric(horizontal: 4),
width: 8,
height: 8,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: _currentPage == index ? Colors.blue : Colors.grey,
),
);
}),
)
3. 最后一页添加进入按钮
在最后一页显示"立即体验"按钮,点击后跳转主页面。
// 在最后一个引导页中添加
ElevatedButton(
onPressed: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => HomePage()),
);
},
child: Text('立即体验'),
)
4. 完整示例代码
class GuideScreen extends StatefulWidget {
@override
_GuideScreenState createState() => _GuideScreenState();
}
class _GuideScreenState extends State<GuideScreen> {
PageController _controller = PageController();
int _currentPage = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Expanded(
child: PageView(
controller: _controller,
onPageChanged: (int page) {
setState(() {
_currentPage = page;
});
},
children: [
GuidePage(image: 'assets/guide1.png', title: '功能1'),
GuidePage(image: 'assets/guide2.png', title: '功能2'),
LastGuidePage(), // 最后一页带按钮
],
),
),
// 指示器
Container(
padding: EdgeInsets.only(bottom: 50),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: List.generate(3, (index) {
return Container(
margin: EdgeInsets.symmetric(horizontal: 4),
width: 8,
height: 8,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: _currentPage == index ? Colors.blue : Colors.grey,
),
);
}),
),
),
],
),
);
}
}
5. 数据存储
使用shared_preferences记录是否首次启动:
// 启动时检查
bool showGuide = await prefs.getBool('showGuide') ?? true;
if (showGuide) {
// 显示引导页
await prefs.setBool('showGuide', false);
} else {
// 直接进入主页
}
实现要点:
- 使用PageView实现滑动效果
- 通过PageController控制页面切换
- 使用DotIndicator显示进度
- 最后一页提供进入主程序的入口
- 使用shared_preferences记录引导状态
这样就能创建一个完整的引导页功能,用户首次启动时显示引导,后续启动直接进入主界面。