我有一个使用旋转滑轨创建如此简单的可滑动视图pager :

return Scaffold(
    body: CarouselSlider(
  options: CarouselOptions(
    viewportFraction: 1,
    // aspectRatio: 1,
    height: double.maxFinite,
    // enlargeCenterPage: true,
  ),
  items: List.generate(
      10,
      (i) => Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Expanded(
                child: Container(
                  color: (i % 2 == 0) ? Colors.red : Colors.green,
                ),
              ),
              Text('text $i', style: TextStyle(fontSize: 16.0)),
            ],
          )),
));

其结果如下:

enter image description here

但正如您所看到的,下一个容器连接到第一个小部件,我希望当第一个小部件被交换到左侧时,下一个小部件出现在第一个小部件下,而不是它旁边.看起来下面的小部件已经修复,我们删除了顶部的小部件.

推荐答案

我终于找到了创建堆栈页面视图的方法,这是一个完整的代码:

import 'package:flutter/src/foundation/key.dart';
import 'package:flutter/src/widgets/framework.dart';

import 'package:flutter/material.dart';

import 'dummy_data.dart';
import 'page_view_item.dart';
class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {

  /// The current page of the page view
   double _page = 0;

  /// The index of the leftmost element of the list to be displayed
  int get _firstItemIndex => _page.toInt();

  /// Controller to get the current position of the page view
  final _controller = PageController(
    viewportFraction: 0.5,
  );

  /// The width of a single item
  late final _itemWidth =
      MediaQuery.of(context).size.width * _controller.viewportFraction;

@override
  void initState() {
    super.initState();
    _controller.addListener(() => setState(() {
          _page = _controller.page!;
        }));
  }
   @override
  void dispose() {
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("LV Scroll"),
      
      ),
      body: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          
          Stack(
          children: [
            Positioned.fill(
              child: Align(
                alignment: Alignment.centerLeft,
                child: SizedBox(
                  width: _itemWidth,
                  child: FractionallySizedBox(

                    child: PageViewItem(
                      index: _firstItemIndex,
                      width: _itemWidth,
                      url: model[_firstItemIndex],

                    ),
                  ),
                ),
              ),
            ),
            SizedBox(
              height: 250,
              child: PageView.builder(
                padEnds: false,
                controller: _controller,
                itemBuilder: (context, index) {
                  return Opacity(
                    opacity: index <= _firstItemIndex ? 0 : 1,
                    child: PageViewItem(
                      index: index,

                      width: _itemWidth,
                      url: model[index],

                    ),
                  );
                },
                itemCount: model.length,
              ),
            ),
          ],
    ),
        ],
      ),
    );
  }

}

结果是:

enter image description here

及其reference

Flutter相关问答推荐

Riverpod生成器和生成util类

想更新ListView上的索引点击块Flutter

来自FutureProvider的数据只打印两个不同的变量,它们对一个实例只有一次相同的值,为什么?

如何使页面浏览量达到活动页面所要求的高度?

在 flutter 吧蜂巢中拯救主题

使索引[0]在ListViewBuilder中返回字符串1

Flutter Android Google Sign-in error:ApiException:10在确认软件包名称、SHA-1 fingerprint 和设置同意页面后出现异常

如何使listview.builder在筛选列表后实时更新

如何对齐 AppBar Actions 中的文本?

NotifierProvider 每次更新都会重新构建并且值不更新

无法从一个页面导航到下一个页面 (Flutter)

如何在Flutter中显示ListView Builder区域外的列表数据?

我对 Flutter Apk 有疑问

Flutter:如何在 bottomsheet 中创建一个日期 Select 器,如下图所示

Agora VideoCall 不显示远程视频网格

Flutter - 定义按钮的优雅方式

我一直在try 创建按钮以导航到第二页,但不知何故 RaisedButton 功能无法正常工作

Firebase Cloud Messaging (Flutter):订阅主题时出现错误消息

如何在Flutter 中将列表的模型类型转换为数组?

我想将我的模型类对象发送到下一个屏幕之前我这样做首先我在第二个屏幕中声明对象