Flutter实战视频-移动电商-10.首页_FlutterSwiper轮播效果制作

10.首页_FlutterSwiper轮播效果制作

 博客地址:

https://jspang.com/post/FlutterShop.html#toc-5c2

 flutter_swiper

https://github.com/best-flutter/flutter_swiper

 

pubspec.yaml内配置插件的引用。配置好以后进行保存。最好开启科学上网工具 防止下载很慢的情况

这里还是和视频里面用一个版本的吧 1.1.4因为我在本机设置为1.1.6的时候,保存了文件没有自动去下载包文件。后来又修改为1.1.4版本以后才真正的去下载了对应的文件

 

 

自定义swiperDiy的类

这个类是静态的

构造函数这里写的key是什么意思呢?可不可以不写呢?

这是官方希望你这么写。这里有一个Key。官方解释,这里是一个无名无参的它的父类。我们要调用父类,传递一个key

1.0版本出来以后可以不用传key了。形成一个构造函数就可以了。它就可以用了。技术胖建议还是用传递key的那种形式。官方案例都是那么写的

在页面内引入flutter_swiper

import 'package:flutter_swiper/flutter_swiper.dart';

然后我们就可以使用swiper这个widget了

它有点像我们list,它有构造函数itemBilder

 

这样我们的swiper轮播组件就写好了。

然后再改造上一节课的代码

FutureBuild组件完美解决异步渲染,不用setState就可以渲染的很好。

builder:就是我们的方法在异步进行的时候怎么操作。

builder接收两个值

 

删除的代码

  @override
  void initState() {
    getHomePageContent().then((val){
      setState(() {
       homePageContent=val.toString(); 
      });
    });
    super.initState();
  }
View Code

 

 

 

展示效果

自动滚动的轮播效果就出来了

 

这里我们加上图片的填充属性:

再次查看效果:

下节课在学习怎么适配屏幕的轮播图:

 

 

 

最终代码:

 

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

class HomePage extends StatefulWidget {
  @override
  _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(swiperDateList: swiper)
              ],
            );
          }else{
            return Center(child: Text('加载中....'));
          }
        },
      ),
    );
  }
}
//首页轮播插件
class SwiperDiy extends StatelessWidget {
  final List swiperDateList;
  //构造函数
  SwiperDiy({this.swiperDateList});

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

 

posted @ 2019-04-03 00:01  高山-景行  阅读(801)  评论(0编辑  收藏  举报