【问题标题】:Multiple items in one slide. Flutter - Dart一张幻灯片中有多个项目。颤振 - 飞镖
【发布时间】:2020-11-06 14:37:25
【问题描述】:

我想使用carousel_sliderflutter 包创建一个轮播滑块。

当我想在一张幻灯片中显示多个项目时,只要列表长度为偶数,一切正常,但如果列表长度为奇数,则最后一张幻灯片会出错。

这是我的代码

import 'package:carousel_slider/carousel_controller.dart';
import 'package:carousel_slider/carousel_options.dart';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/material.dart';

final List<String> imgList = [
  'https://images.unsplash.com/photo-1520342868574-5fa3804e551c?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=6ff92caffcdd63681a35134a6770ed3b&auto=format&fit=crop&w=1951&q=80',
  'https://images.unsplash.com/photo-1522205408450-add114ad53fe?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=368f45b0888aeb0b7b08e3a1084d3ede&auto=format&fit=crop&w=1950&q=80',
  'https://images.unsplash.com/photo-1519125323398-675f0ddb6308?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=94a1e718d89ca60a6337a6008341ca50&auto=format&fit=crop&w=1950&q=80',
  'https://images.unsplash.com/photo-1523205771623-e0faa4d2813d?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=89719a0d55dd05e2deae4120227e6efc&auto=format&fit=crop&w=1953&q=80',
  'https://images.unsplash.com/photo-1508704019882-f9cf40e475b4?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=8c6e5e3aba713b17aa1fe71ab4f0ae5b&auto=format&fit=crop&w=1352&q=80',
  'https://images.unsplash.com/photo-1519985176271-adb1088fa94c?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=a0c8d632e977f94e5d312d9893258f59&auto=format&fit=crop&w=1355&q=80'
];    
class MultipleItemDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text('Multiple item in one slide demo')),
          body: Container(
            child: CarouselSlider.builder(
              options: CarouselOptions(
                aspectRatio: 2.0,
                enlargeCenterPage: false,
                viewportFraction: 1,
              ),
              itemCount: (imgList.length / 2).round(),
              itemBuilder: (context, index) {
                final int first = index * 2;
                final int second = first + 1;
                return Row(
                  children: [first, second].map((idx) {
                    return Expanded(
                      flex: 1,
                      child: Container(
                        margin: EdgeInsets.symmetric(horizontal: 10),
                        child: Image.network(imgList[idx], fit: BoxFit.cover),
                      ),
                    );
                  }).toList(),
                );
              },
            )
          ),
        );
      }
    }

【问题讨论】:

    标签: flutter dart slider


    【解决方案1】:

    这是因为您计算将哪个图像放入Row 的索引的方式。目前,您始终为Row 声明并使用 first 和 second ,如果图像数量为奇数,则从那时起就没有第二张图像,这将不起作用。我修改了您的解决方案以使其正常工作。您仍然需要调整 Row 的大小,以便您的单张图片与配对的图片大小相同:

    class MultipleItemDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        int imageCount = (imgList.length / 2).round();
        return Scaffold(
          appBar: AppBar(title: Text('Multiple item in one slide demo')),
          body: Container(
              child: CarouselSlider.builder(
            options: CarouselOptions(
              aspectRatio: 2.0,
              enlargeCenterPage: false,
              viewportFraction: 1,
            ),
            itemCount: imageCount,
            itemBuilder: (context, index) {
              final int first = index;
              final int second = index < imageCount - 1 ? first + 1 : null;
              return Row(
                children: [first, second].map((idx) {
                  return idx != null
                      ? Expanded(
                          flex: 1,
                          child: Container(
                            margin: EdgeInsets.symmetric(horizontal: 10),
                            child: Image.network(imgList[idx], fit: BoxFit.cover),
                          ),
                        )
                      : Container();
                }).toList(),
              );
            },
          )),
        );
      }
    }
    

    【讨论】:

    • 谢谢,我这样做是为了调整最后一张图片的大小:` : Expanded( flex: 1, child: Container(), ); }).toList(), ); `
    • 我猜kounex已经错过了计算索引final int first = index * 2; final int second = index * 2
    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2014-11-30
    • 2020-08-12
    • 2020-12-25
    相关资源
    最近更新 更多