10-Flutter移动电商实战-使用FlutterSwiper制作轮播效果

10-Flutter移动电商实战-使用FlutterSwiper制作轮播效果

1、引入flutter_swiper插件

flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配.

好牛X得介绍,一般敢用“最”的一般都是神级大神,看到这个介绍后我也是吃了碗贾玲代言的方便面(一桶半),压了压我激动的心情。

Flutter_swiper的GitHub地址:https://github.com/best-flutter/flutter_swiper

了解flutter_swiper后,需要作的第一件事就再pubspec.yaml文件中引入这个插件(录课时flutter_swiper插件的版本文v1.1.6,以后可能会有更新)。

flutter_swiper : ^1.1.6  (记得使用最新版)

引入后在右上角点击 Package get,会自动为我们下载包。

2、首页轮播效果的编写

我们新定义一个类,当然你甚至可以新起一个文件,完全独立出来。这样一个页面就可以分为多个类,然后写完后由项目组长统一整合起来。

当然作练习就没必要每一个模块都分一个dart文件了,要不太乱,自己反而降低编写效率。所以就写在同一个目录里了。

首先引入flutter_swiper插件,然后就可以编写自定义轮播类了。

新写了一个SwiperDiy的类,当然这个类用静态类就完全可以了,这个类是需要接受一个List参数的,所以我们定义了一个常量swiperDataList,然后返回一个组件,这个组件其实就是Swiper组件,不过我们在Swiper组件外边包裹了一个Container。

代码如下:

首页轮播组件编写
class SwiperDiy extends StatelessWidget {
  final List swiperDataList;
  SwiperDiy({Key key,this.swiperDataList}):super(key:key);

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 333.0,
      child: Swiper(
        itemBuilder: (BuildContext context,int index){
          return Image.network("${swiperDataList[index]['image']}",fit:BoxFit.fill);
        },
        itemCount: swiperDataList.length,
        pagination: new SwiperPagination(),
        autoplay: true,
      ),
    );
  }
}

3、FutureBuilder Widget

这是一个Flutter内置的组件,是用来等待异步请求的。现在可以使用FuturerBuilder来改造HomePage类里的build方法,具体代码细节在视频中进行讲解。

代码如下:

@override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(title: Text('百姓生活+'),),
      body:FutureBuilder(
        future:getHomePageContent(),
        builder: (context,snapshot){
          if(snapshot.hasData){
             var data=json.decode(snapshot.data.toString());
             List<Map> swiperDataList = (data['data']['slides'as List).cast(); // 顶部轮播组件数
             return Column(
               children: <Widget>[
                   SwiperDiy(swiperDataList:swiperDataList ),   //页面顶部轮播组件
               ],
             );
          }else{
            return Center(
              child: Text('加载中'),
            );
          }
        },
      )
    );

  }

有了这个方法,我们就没必要再用initState了,删除了就可以了。全体代码如下:

import 'dart:convert';

import 'package:flutter/material.dart';
import '../service/service_method.dart';
import 'package:flutter_swiper/flutter_swiper.dart';


class HomePage extends StatefulWidget {
  _HomePageState createState() => _HomePageState();

}

class _HomePageState extends State<HomePage{

  String homePageContent='正在获取数据';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('百姓生活+'),
        ),
        body:FutureBuilder(
            future: getHomePageContent(),
            builder: (context,snapshot){
              if(snapshot.hasData){
                var data = json.decode(snapshot.data.toString());
                List<Map> swiper = (data['data']['slides'as List).cast();
                return Column(
                  children: <Widget>[
                    SwiperDiy(swiperDataList: swiper,)
                  ],
                );
              }else{
                  return Center(
                    child: Text("加载中"),
                  );
              }
            },
        )
    );
  }
}

轮播组件
class SwiperDiy extends StatelessWidget {

  final List swiperDataList;

  SwiperDiy({Key key,this.swiperDataList}):super(key:key);

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 333.0,
      child: Swiper(
          itemCount: swiperDataList.length,
          itemBuilder: (BuildContext context,int index){
              return Image.network("${swiperDataList[index]['image']}",fit:BoxFit.fill);
          },
          pagination: SwiperPagination(),
          autoplay: true,
      ),
    );
  }
}

效果如下图所示:

4、课程总结:

  • flutter_Swiper:学习了flutter_swiper组件的简单使用方法,当然你还可以自己学习。
  • FutureBuilder: 这个布局可以很好的解决异步渲染的问,实战中我们讲了很多使用的技巧,注意反复学习。
  • 自定义类接受参数:我们复习了类接受参数的方法。学会了这个技巧就可以把我们的页面分成很多份,让很多人来进行编写,最后再整合到一起。
posted @ 2019-06-15 22:41 niceyoo 阅读(...) 评论(...) 编辑 收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作271:打开弹出框调用当前页面接口

<template><div><button-dialogopen"open"ref"dialog"width"1000px"title"内容关联"ok-button-text"确认关联":destroy-on-close"true"ok"confirmAssociation"><!----><cus…

11-Flutter移动电商实战-首页_屏幕适配方案和制作

11-Flutter移动电商实战-首页_屏幕适配方案和制作 1、flutter_ScreenUtil插件简介 flutter_ScreenUtil屏幕适配方案&#xff0c;让你的UI在不同尺寸的屏幕上都能显示合理的布局。 插件会让你先设置一个UI稿的尺寸&#xff0c;他会根据这个尺寸&#xff0c;根据不同屏幕进行缩…

12-Flutter移动电商实战-首页导航区域编写

12-Flutter移动电商实战-首页导航区域编写 1、导航单元素的编写 从外部看&#xff0c;导航是一个GridView部件&#xff0c;但是每一个导航又是一个上下关系的Column。小伙伴们都知道Flutter有多层嵌套的问题&#xff0c;如果我们都写在一个组件里&#xff0c;那势必造成嵌套严…

Day3_操作记录

python基础&#xff1a; 回顾 1. 条件判断 if &#xff1a; x else&#xff1a; xx 循环 while for for i in range(5): 2. 数据类型&#xff1a; int 类型 float 小数类…

Android 全局悬浮按钮,悬浮按钮点击事件

实现效果&#xff1a; 实现方法&#xff1a; 在自定义baseActivity里面添加viwe即可。在子activity里刷新悬浮View即可 public abstract class BaseActivity extends BaseCommonActivity {LinearLayout saoli,ewmli;ImageView imageView;private QrCodeDialog mMQrCodeDialog;p…

13-Flutter移动电商实战-ADBanner组件的编写

1、AdBanner组件的编写 我们还是把这部分单独出来&#xff0c;需要说明的是&#xff0c;这个Class你也是可以完全独立成一个dart文件的。代码如下&#xff1a; 广告图片class AdBanner extends StatelessWidget { final String advertesPicture; AdBanner({Key key, this.adv…

android远程调试工具,android投屏工具

远程调试工具 说明&#xff1a;远程对方电脑需下载安装两个软件&#xff1a;Android studio 和向日葵 android投屏工具 说明&#xff1a;涉及硬件开发时&#xff0c;有的硬件没有安卓屏&#xff0c;可以使用 两个工具exe文件下载连接&#xff1a; https://download.csdn.net/…

14-Flutter移动电商实战-ADBanner组件的编写

拨打电话的功能在app里也很常见&#xff0c;比如一般的外卖app都会有这个才做。其实Flutter本身是没给我们提供拨打电话的能力的&#xff0c;那我们如何来拨打电话那? 1、编写店长电话模块 这个小伙伴们一定轻车熟路了&#xff0c;我也就不再多介绍吧。直接看代码&#xff0c;…

Android 捕获异常,上报异常日志,捕获奔溃日志,bugly使用实例

1、登录腾讯bugly平台创建应用 腾讯Bugly - 一种愉悦的开发方式 _android anr_android anr分析_iOS崩溃日志分析平台 2、1加载依赖 /*崩溃处理 */ implementation com.tonystark.android:defense_crash:2.0.0 //bugly implementation com.tencent.bugly:crashreport_upgrade:1.…

Android 获取天气数据

/** * 天气API * param cityname * return */ private String getUrl(String cityname){ return "http://wthrcdn.etouch.cn/weather_mini?city"cityname; } 传入城市&#xff0c;即可返回天气数据

windows下dos窗口实现持续ping显示时间保存至日志

效果图 右击新建 ping.bat 文件&#xff08;ping为文件名称&#xff0c;随便起&#xff09;&#xff0c;内容如下&#xff1a; cscript ping.vbs 127.0.0.1 -t >log.txt127.0.0.1 修改为你自己的ip地址&#xff0c;log 为记录日志的文件名 右击新建 ping.vbs 文件&#x…

AndroidStudio中Flutter打包APK

1、生成签名文件 在打包之前我们需要一个签名文件&#xff0c;证明文件的唯一性。 keytool -genkey -v -keystore F:\APP\sign.jks -keyalg RSA -keysize 2048 -validity 10000 -alias signF:\APP\sign.jks为签名问价存放目录&#xff0c;sign 为密钥名。 后面都有用&#x…

Codeforces #471

C(分段) 题意&#xff1a; 分析&#xff1a; 我们分别考虑p2和p>3的情况  当p2的时候&#xff0c;个数明显是[L,R]内完全平方数的个数 当p>3的时候&#xff0c;我们注意到这样的数字个数是1e6级别的&#xff0c;且a最多也不超过1e6 我们可以对于每个a去枚举对应的p&…

Thinkpad Access Connections实现快速的在各种网络间进行切换

Thinkpad Access Connections快速的在各种网络间进行切换因为工作的原因要经常在多个无线或有线之间切换&#xff0c;每次要切换到不同的固定IP地址的网络更是一种折磨&#xff0c;换一次就要从新输入一次IP地址&#xff0c;Windows下有没有像Linux的NetworkManage那样的网络管…