zoukankan      html  css  js  c++  java
  • Flutter 仿iOS自定义UIPageControl组件

     

    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';

    class DWPageView extends StatefulWidget {
    DWPageView({
    // 宽度 必传
    this.width,
    // 高度 必传
    this.height,
    // 总页数 必传
    this.numberOfPages,
    // 当前页数
    this.currentPage = 0,
    // 未选颜色 默认灰色
    this.pageColor = Colors.grey,
    // 选中颜色 默认白色
    this.tintColor = Colors.white,
    // 间隔 默认5
    this.space = 5,
    // 指示器宽度 默认5
    this.pageWidth = 5,
    // 指示器高度 默认5
    this.pageHeight = 5,
    // 选中指示器宽度 默认5
    this.currentPageWidth = 5,
    // 选中指示器高度 默认5
    this.currentPageHeight = 5,
    // 指示器圆角度 默认2
    this.radius = 2,
    // 排序的方向 默认横着排序
    this.scrollDirection = Axis.horizontal,

    Key key,
    }) : super( key: key);

    final int numberOfPages;
    final int currentPage;
    final Color pageColor;
    final Color tintColor;
    final double space;
    final double width;
    final double height;
    final double pageWidth;
    final double pageHeight;
    final double currentPageWidth;
    final double currentPageHeight;
    final double radius;
    final Axis scrollDirection;

    @override
    DWPageViewState createState() {
    return DWPageViewState();
    }

    }

    class DWPageViewState extends State<DWPageView> {
    ScrollController _scrollController = new ScrollController();
    int _currentPage;

    @override
    void initState() {
    // TODO: implement initState
    super.initState();
    setState(() {
    _currentPage = widget.currentPage;
    });
    }

    void selectedIndex(int index) {
    setState(() {
    _currentPage = index;
    });
    }

    @override
    Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
    widget.width,
    height: widget.height,
    child: ListView.builder(
    controller: _scrollController,
    scrollDirection: widget.scrollDirection,
    itemCount: widget.numberOfPages,
    itemBuilder: ((context, index) {
    if (index == _currentPage) {
    return Center(
    child: Container(
    margin: new EdgeInsets.fromLTRB(0, 0, widget.scrollDirection == Axis.horizontal ? widget.space : 0, widget.scrollDirection != Axis.horizontal ? widget.space : 0),
    widget.currentPageWidth,
    height: widget.currentPageHeight,
    decoration: BoxDecoration(
    borderRadius: BorderRadius.all(Radius.circular(widget.radius)),
    color: widget.tintColor,
    ),
    ),
    );
    }
    return Center(
    child: Container(
    margin: new EdgeInsets.fromLTRB(0, 0, widget.scrollDirection == Axis.horizontal ? widget.space : 0, widget.scrollDirection != Axis.horizontal ? widget.space : 0),
    widget.pageWidth,
    height: widget.pageHeight,
    decoration: BoxDecoration(
    color: widget.pageColor,
    borderRadius: BorderRadius.all(Radius.circular(widget.radius)),
    ),
    ),
    );
    }),
    ),
    );
    }
    }
  • 相关阅读:
    Fixed数据类型
    unity3d游戏物体跟着鼠标方向移动
    unity gl 画线
    Unity3D研究院之游戏对象的访问绘制线与绘制面详解(十七)
    像素填充率,纹理填充率,显存带宽
    GPU渲染管线与shader
    Unity协程(Coroutine)原理深入剖析
    C#基本线程同步
    C#多线程编程
    详解C#中的反射
  • 原文地址:https://www.cnblogs.com/diweinan/p/13534952.html
Copyright © 2011-2022 走看看