Flutter:carousel_slider 横向轮播图、垂直轮播公告栏实现

安装依赖

cpp 复制代码
carousel_slider: ^5.0.0

1、垂直滚动公告栏

js 复制代码
import 'package:carousel_slider/carousel_options.dart';

  // 垂直滚动公告栏
  Widget _buildNotice() {
    return <Widget>[
      <Widget>[
        TDImage(
          assetUrl: "assets/img/home11.png",
          width: 60.w,
          height: 60.w,
        ),
        SizedBox(width: 20.w,),
        // 可垂直滚动的公告内容
        SizedBox(
          width: 490.w,
          height: 80.w,
          child: CarouselSlider(
            items: controller.notices.map((notice) {
              return TextWidget.body(
                notice,
                size: 24.sp,
                maxLines: 1,
                overflow: TextOverflow.ellipsis,
              );
            }).toList(),
            options: CarouselOptions(
              scrollDirection: Axis.vertical,  // 垂直方向滚动
              height: 80.w,  // 设置高度为文字高度
              viewportFraction: 1.0,  // 每个item占满整个viewport
              autoPlay: true,  // 自动播放
              autoPlayInterval: const Duration(seconds: 3),  // 播放间隔
              autoPlayAnimationDuration: const Duration(milliseconds: 800),  // 动画时长
              autoPlayCurve: Curves.easeInOut,  // 动画曲线
              pauseAutoPlayOnTouch: true,  // 触摸时暂停自动播放
              enableInfiniteScroll: true,  // 无限滚动
            ),
          ),
        ),
        SizedBox(width: 40.w,),
        TDImage(
          assetUrl: "assets/img/home12.png",
          width: 28.w,
          height: 28.w,
        ).onTap(()=>Get.toNamed('/notice_list_page')),
      ].toRow(mainAxisAlignment: MainAxisAlignment.start)
      .paddingHorizontal(20.w)
      .card(color: const Color(0xffFFF9ED))
      .tight(width: 690.w,height: 80.w)
    ].toRow()
    .card(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0)))
    .height(80.w);
  }


  final List<String> notices = [
    '这是第一条公告信息',
    '这是第二条公告信息',
    '这是第三条公告信息',
  ];

2、横向轮播图

js 复制代码
  // 横向轮播图
  Widget _buildBanner() {
    return <Widget>[
      SizedBox(
        width: 750.w,
        height: 750.w,
        child: CarouselSlider(
          items: [
            TDImage(
              assetUrl: 'assets/img/goods.jpg',
              width: 750.w,
              height: 750.w,
              type: TDImageType.square,
            ),
            TDImage(
              assetUrl: 'assets/img/goods.jpg',
              width: 750.w,
              height: 750.w,
              type: TDImageType.square,
            ),
            TDImage(
              assetUrl: 'assets/img/goods.jpg',
              width: 750.w,
              height: 750.w,
              type: TDImageType.square,
            ),
          ],
          options: CarouselOptions(
            scrollDirection: Axis.horizontal,  // 垂直方向滚动
            height: 750.w,  // 设置高度为文字高度
            viewportFraction: 1.0,  // 每个item占满整个viewport
            autoPlay: true,  // 自动播放
            autoPlayInterval: const Duration(seconds: 3),  // 播放间隔
            autoPlayAnimationDuration: const Duration(milliseconds: 800),  // 动画时长
            autoPlayCurve: Curves.easeInOut,  // 动画曲线
            pauseAutoPlayOnTouch: true,  // 触摸时暂停自动播放
            enableInfiniteScroll: true,  // 无限滚动
            onPageChanged: controller.onPageChanged,
          ),
        ),
      ),
      SliderIndicatorWidget(length: 3, currentIndex: controller.currentIndex,color: AppTheme.colorfff,)
      .positioned(bottom: 30.w,left: 0,right: 0,),
    ].toStack().height(750.w);
  }
	
	
  // 页码
  int currentIndex = 0;

  // 切换页码
  void onPageChanged(int index, CarouselPageChangedReason reason) {
    currentIndex = index;
    update(["goods_detail"]);
  }
  

SliderIndicatorWidget 页码组件

js 复制代码
import 'package:chenyanzhenxuan/common/index.dart';
import 'package:flutter/material.dart';

/// slider indicator 指示器
class SliderIndicatorWidget extends StatelessWidget {
  /// 个数
  final int length;

  /// 当前位置
  final int currentIndex;

  /// 颜色
  final Color? color;

  /// 是否原型
  final bool isCircle;

  /// 对齐方式
  final MainAxisAlignment alignment;

  const SliderIndicatorWidget({
    super.key,
    required this.length,
    required this.currentIndex,
    this.color,
    this.isCircle = false,
    this.alignment = MainAxisAlignment.center,
  });

  @override
  Widget build(BuildContext context) {
    Color boxColor = color ?? AppTheme.error;

    return Row(
      mainAxisAlignment: alignment,

      // 采用 list.generate 方式生成 item 项
      children: List.generate(length, (index) {
        return Container(
          margin: const EdgeInsets.symmetric(horizontal: 3),
          // 圆型宽度 6 , 否则当前位置 15 , 其他位置 8
          width: !isCircle
              ? currentIndex == index
                  ? 15.0
                  : 8
              : 6,
          // 圆型高度 6 , 否则 4
          height: !isCircle ? 4 : 6,
          decoration: BoxDecoration(
            // 圆角 4
            borderRadius: const BorderRadius.all(Radius.circular(4)),
            // 非当前位置透明度 0.3
            color: currentIndex == index ? boxColor : boxColor.withOpacity(0.3),
          ),
        );
      }),
    );
  }
}
相关推荐
i-阿松!12 分钟前
PCB板子+ flutter前端 + go后端
物联网·flutter·pcb工艺·go1.19
恋猫de小郭26 分钟前
Flutter 3.41.6 版本很重要,你大概率需要更新一下
android·前端·flutter
亚历克斯神12 小时前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
钛态12 小时前
Flutter 三方库 smartstruct 鸿蒙化字段映射适配指南:介入静态预编译引擎扫除视图及数据模型双向强转类型错乱隐患,筑稳如磐石的企业级模型治理防线-适配鸿蒙 HarmonyOS ohos
flutter·华为·harmonyos
键盘鼓手苏苏12 小时前
Flutter 组件 csv2json 适配鸿蒙 HarmonyOS 实战:高性能异构数据转换,构建 CSV 流式解析与全栈式数据映射架构
flutter·harmonyos·鸿蒙·openharmony
左手厨刀右手茼蒿12 小时前
Flutter 组件 http_requests 适配鸿蒙 HarmonyOS 实战:极简网络请求,构建边缘端轻量级 RESTful 通讯架构
网络·flutter·http
雷帝木木12 小时前
Flutter 三方库 hrk_logging 的鸿蒙化适配指南 - 实现标准化分层日志记录、支持多目的地输出与日志分级过滤
flutter·harmonyos·鸿蒙·openharmony·hrk_logging
左手厨刀右手茼蒿12 小时前
Flutter 三方库 dio_compatibility_layer 的鸿蒙化适配指南 - 实现 Dio 跨主版本的平滑迁移、支持遗留拦截器兼容与网络请求架构稳定升级
flutter·harmonyos·鸿蒙·openharmony·dio_compatibility_layer
雷帝木木12 小时前
Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私-适配鸿蒙 HarmonyOS ohos
安全·flutter·harmonyos
王码码203515 小时前
Flutter 组件 inappwebview_cookie_manager 适配 鸿蒙Harmony 实战 - 驾驭核心大 Web 容器缓存隧道、构建金融级政企应用绝对防串号跨域大隔离基座
flutter·harmonyos·鸿蒙·openharmony·inappwebview_cookie_manager