zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    thinkphp3.2v
    ng-select 下拉的两种方式
    angular的时间指令 以及防止闪烁问题
    angularjs中的几种工具方法
    运用正则+replace+substring将一段英语的字母大写 angurlar运用自定义指令filter完成首字母大写
    angularjs bind与model配合双向绑定 表达式方法输出
    ajax跨域问题
    团队作业一
    校外实习报告(四)
    校外实习报告(三)
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/10646320.html
Copyright © 2011-2022 走看看