栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Flutter走马灯

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flutter走马灯

一、预览

二、代码 1. 封装方法

参考:

  1. Flutter走马灯
  2. Flutter生命周期
import 'dart:async';
import 'package:flutter/material.dart';

class NotablePage extends StatefulWidget {
  Widget child;  // 轮播的内容
  Duration duration;  // 轮播时间
  double stepOffset;  // 偏移量
  double paddingLeft;  // 内容之间的间距

  NotablePage(this.child, this.paddingLeft, this.duration, this.stepOffset);

  @override
  _NotablePageState createState() => _NotablePageState();
}

class _NotablePageState extends State {

  late ScrollController _controller;  // 执行动画的controller
  late Timer _timer;  // 定时器timer
  double _offset = 0.0;  // 执行动画的偏移量

  @override
  void initState() {
    super.initState();
    _controller = ScrollController(initialScrollOffset: _offset);

    WidgetsBinding widgetsBinding = WidgetsBinding.instance!;
    widgetsBinding.addPostframeCallback((timeStamp) {
      _controller.animateTo(widget.stepOffset, duration:  widget.duration, curve: Curves.linear);
    });

    _timer = Timer.periodic(widget.duration, (timer) {
      double newOffset = _controller.offset + widget.stepOffset;
      if (newOffset != _offset) {
        _offset = newOffset;
        _controller.animateTo(
          _offset,
          duration: widget.duration, curve: Curves.linear
        );  // 线性曲线动画
      }
    });
  }

  @override
  void dispose() {
    _timer.cancel();
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      physics: NeverScrollableScrollPhysics(),
      scrollDirection: Axis.horizontal,
      controller: _controller,
      itemBuilder: (context, index){
        List items = [];
        for (var i = 0; i<=2; i++) {
          Container item = new Container(
            margin: new EdgeInsets.only(right: i != 0 ? 0.0 : widget.paddingLeft),
            child: i != 0 ? null : widget.child,
          );
          items.add(item);
        }
        return Row(children: items,);
      }
    );
  }
}

2. 使用
NotablePage(
  new Text("大家好"),
  200.0,
  new Duration(seconds: 2),
  230.0
)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696644.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号