ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Flutter 文字上下滚动切换 用于公告消息提示

2022-08-02 14:04:35  阅读:341  来源: 互联网

标签:count widget 滚动 itemBuilder controller 切换 override return Flutter


效果预览

image

1 基本使用代码

void main() {
  ///启动根目录
  runApp(MaterialApp(
    home: TestTipsPage(),
  ));
}

class TestTipsPage extends StatefulWidget {
  @override
  _TestTipsPageState createState() => _TestTipsPageState();
}

class _TestTipsPageState extends State<TestTipsPage> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: Center(
        child: Container(
          alignment: Alignment.center,
          width: double.infinity,
          height: 24,
          child: buildMarqueeWidget(),
        ),
      ),
    );
  }
 }

2 核心使用代码

  MarqueeWidget buildMarqueeWidget(List<String> loopList) {
    ///上下轮播 安全提示
    return MarqueeWidget(
      //子Item构建器
      itemBuilder: (BuildContext context, int index) {
        String itemStr = loopList[index];
        //通常可以是一个 Text文本
        return Text(itemStr);
      },
      //循环的提示消息数量
      count: loopList.length,
    );
  }

3 核心实现代码

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

// 上下滚动的消息轮播
class MarqueeWidget extends StatefulWidget {
  /// 子视图数量
  final int count; 
  ///子视图构建器
  final IndexedWidgetBuilder itemBuilder;
  ///轮播的时间间隔
  final int loopSeconds;

  const MarqueeWidget({
    Key? key,
    required this.count,
    required this.itemBuilder,
    this.loopSeconds = 5,
  }) : super(key: key); 

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

class _MarqueeWidgetState extends State<MarqueeWidget> {
  late PageController _controller;
  late Timer _timer;

  @override
  void initState() {
    super.initState();
    _controller = PageController();
    _timer = Timer.periodic(Duration(seconds: widget.loopSeconds), (timer) {
      if (_controller.page != null) {
        // 如果当前位于最后一页,则直接跳转到第一页,两者内容相同,跳转时视觉上无感知
        if (_controller.page!.round() >= widget.count) {
          _controller.jumpToPage(0);
        }
        _controller.nextPage(
            duration: const Duration(seconds: 1), curve: Curves.linear);
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return PageView.builder(
      scrollDirection: Axis.vertical,
      controller: _controller,
      itemBuilder: (buildContext, index) {
        if (index < widget.count) {
          return widget.itemBuilder(buildContext, index);
        } else {
          return widget.itemBuilder(buildContext, 0);
        }
      },
      itemCount: widget.count + 1, 
    );
  }

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

文章来源
Flutter 文字上下滚动切换 用于公告消息提示

标签:count,widget,滚动,itemBuilder,controller,切换,override,return,Flutter
来源: https://www.cnblogs.com/sishuiliuyun/p/16543471.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有