功能说明:

本文介绍如何实现以下场景的快速应用实现:

  1. App 启动后展示的全屏轮播图(常见用于介绍App新版功能),左右滑动切换图片;
  2. 基于 swiper 的Banner 轮播图(也叫轮播头图);

使用 apifm 插件,快速实现云开发:

  1. 登录开发者后台,添加 / 管理你的 Banner 图片;
  2. 使用 apifm 插件读取后台的配置内容;

后台配置

免费开通开发者后台

《使用 apifm 插件进行 Flutter 云开发——安装篇》

开启 “App Banner管理接口” 模块

  1. 登录 “第一步” 注册的后台,左侧菜单 —> 工厂设置 —> 模块管理
  2. 找到 “App Banner管理接口” 模块,点击 “启用模块” ,然后 F5 刷新一下后台界面

apifm 使用说明

读取 Banner 列表

  1. Apifm.banners([Map<String, String> params])

读取后台设置的Banner数据,可用于展示App启动图、轮播图等

Flutter 源码

  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_swiper/flutter_swiper.dart';
  3. import 'package:apifm/apifm.dart' as Apifm;
  4. import 'package:loading/loading.dart';
  5. import 'package:loading/indicator/ball_pulse_indicator.dart';
  6. import './auth/index.dart';
  7. void main() => runApp(new StartPage());
  8. class StartPage extends StatelessWidget {
  9. @override
  10. Widget build(BuildContext context) {
  11. return new MaterialApp(
  12. title: 'Apifm HelloWorld',
  13. theme: new ThemeData(
  14. primarySwatch: Colors.blue,
  15. ),
  16. home: new MyHomePage(),
  17. );
  18. }
  19. }
  20. class MyHomePage extends StatefulWidget {
  21. @override
  22. _MyHomePageState createState() => new _MyHomePageState();
  23. }
  24. class _MyHomePageState extends State<MyHomePage> {
  25. List<String> imagesList = [];
  26. @override
  27. void initState () {
  28. super.initState();
  29. // 初始化 apifm 插件
  30. Apifm.init("gooking");
  31. // 读取启动图片数据
  32. banners();
  33. }
  34. banners () async {
  35. var res = await Apifm.banners();
  36. if (res['code'] == 0) {
  37. List<String> _imagesList = [];
  38. res['data'].forEach((pic) {
  39. _imagesList.add(pic['picUrl']);
  40. });
  41. setState(() {
  42. imagesList = _imagesList;
  43. });
  44. }
  45. }
  46. @override
  47. Widget build(BuildContext context) {
  48. if (imagesList.length == 0) {
  49. return new Scaffold(
  50. body: Container(
  51. color: Colors.grey,
  52. child: Center(
  53. child: Loading(indicator: BallPulseIndicator(), size: 100.0),
  54. ),
  55. ),
  56. );
  57. } else {
  58. return new Scaffold(
  59. body: new Swiper(
  60. itemBuilder: (BuildContext context,int index){
  61. return new Image.network(imagesList[index],fit: BoxFit.cover,);
  62. },
  63. itemCount: imagesList.length,
  64. loop: false,
  65. pagination: new SwiperPagination(),
  66. onTap: (index) {
  67. print(index); // 可以根据是否是最后一张图片,来跳转至主界面,一般会在最后一张图片上面设置一个按钮元素,引导用户去点击
  68. Navigator.pushReplacement(
  69. context,
  70. MaterialPageRoute(builder: (context) => IndexPage()),
  71. );
  72. },
  73. ),
  74. );
  75. }
  76. }
  77. }

本例 Flutter 源码:

https://github.com/gooking/apifm-flutter-demo