草庐IT

Flutter CustomScrollView 长条堆叠

coder 2023-05-09 原文

我正在尝试使用 CustomScrollView 创建一个 ScrollView . 我需要的效果,和 this one 非常相似.

我需要 SliverList堆叠在 SliverAppbar 上方, 没有列表占据整个屏幕并隐藏 SliverAppbar。 我想这样做的原因是,我需要在该列表顶部附加一个持久定位小部件,除非列表堆叠在 SliverAppbar 上方,否则它不会出现。

这是我的 code .

最佳答案

第一步: 在 SliverAppBar 小部件中使用 ListView。使css溢出:隐藏效果。

第二步: 将 Controller 添加到 NestedScrollView 并在堆栈中滚动时移动按钮。加上计算你想要停止按钮移动的位置。

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  ScrollController scrollController;
  final double expandedHight = 150.0;

  @override
  void initState() {
    super.initState();
    scrollController = new ScrollController();
    scrollController.addListener(() => setState(() {}));
  }

  @override
  void dispose() {
    scrollController.dispose();
    super.dispose();
  }

  double get top {
    double res = expandedHight;
    if (scrollController.hasClients) {
      double offset = scrollController.offset;
      if (offset < (res - kToolbarHeight)) {
        res -= offset;
      } else {
        res = kToolbarHeight;
      }
    }
    return res;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      body: Stack(
        children: [
          NestedScrollView(
            controller: scrollController,
            headerSliverBuilder: (context, value) {
              return [
                SliverAppBar(
                  pinned: true,
                  expandedHeight: expandedHight,
                  flexibleSpace: ListView(
                    physics: const NeverScrollableScrollPhysics(),
                    children: [
                      AppBar(
                        title: Text('AfroJack'),
                        elevation: 0.0,
                      ),
                      Container(
                        color: Colors.blue,
                        height: 100,
                        alignment: Alignment.center,
                        child: RaisedButton(
                          child: Text('folow'),
                          onPressed: () => print('folow pressed'),
                        ),
                      ),
                    ],
                  ),
                ),
              ];
            },
            body: ListView.builder(
              physics: const NeverScrollableScrollPhysics(),
              itemCount: 80,
              itemBuilder: (BuildContext context, int index) {
                return Text(
                  'text_string'.toUpperCase(),
                  style: TextStyle(
                    color: Colors.white,
                  ),
                );
              },
            ),
          ),
          Positioned(
            top: top,
            width: MediaQuery.of(context).size.width,
            child: Align(
              child: RaisedButton(
                onPressed: () => print('shuffle pressed'),
                child: Text('Suffle'),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

关于Flutter CustomScrollView 长条堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52133238/

有关Flutter CustomScrollView 长条堆叠的更多相关文章

  1. 在大型双重转换为未签名的INT中堆叠腐败 - 2

    在Windows计算机上运行VisualC++,我发现以下代码行似乎是通过调用__dtoui3的呼叫损坏内存(此调用后一堆字节更改。具体来说,DBL_MAX的值似乎是在两次中打印的,在记忆中的随机位置行)doubletemp=DBL_MAX;unsignedintblissfullyUnaware=(unsignedint)temp;但是,以下没有:doubletemp=0;unsignedintblissfullyUnaware=(unsignedint)temp;谁能阐明为什么会发生这种情况?看答案[cons.fpint]/1浮点类型的prvalue可以转换为整数类型的prvalue。转换

  2. javascript - Highcharts - 单击更改列堆叠 - 2

    我有一个可爱的Highcharts图,其中包含堆叠的列。我想要一个可以切换堆叠是“正常”还是“百分比”的按钮。我正在尝试以下操作(不起作用):$('#button').click(function(){varchart=$('#container').highcharts();chart.options.plotOptions.column.stacking='percent';chart.redraw();});在这里fiddle:http://jsfiddle.net/CRKcj/2/如有任何帮助,我们将不胜感激! 最佳答案 不

  3. javascript - Chrome 开发者工具控制台 - 日志堆叠,如何查看重新记录的内容 [内部屏幕截图]? - 2

    我刚刚开始使用Chrome开发者工具中的控制台(一般来说对Javascript来说还是个新手)。我注意到,当我连续两次记录同一个变量(在本例中是一个对象)时,日志会堆叠它并在它旁边放置一个小数字图标。我点击这个以为我将能够看到该对象两次(因为它已经更新了两次),但是没有任何反应。更多说明图片:如您所见,Object下拉列表旁边的蓝色圆圈中有一个小“2”。第一个日志在3处有Object.num,第二个在4处,但是我只能看到第二个。任何关于如何查看两个日志的答案都将不胜感激。:). 最佳答案 发生这种情况是因为您两次记录同一个对象。即使

  4. javascript - 在 Javascript 中堆叠方法 - 2

    我有一个用这个片段创建的对象,它看起来像这样:...varsteps=newArray();this.createStep=function(){steps.push(newstep());returnsteps[steps.length-1];};this.getSteps=function(){returnsteps;};//returnsArraythis.removeStep=function(pos){steps.splice(parseInt(pos),1);};//integerpossitionzerobasethis.insertStep=function(pos){

  5. javascript - 使用 NVD3 分组和堆叠 multiBarChart - 2

    可能重复问题BarchartinJavascript:stackedbars+groupedbars我正在尝试创建一个堆叠条形图,让您可以将2个值(深蓝色和中蓝色)与上周的数据点(“后面”的次要浅蓝色)进行比较。从multiBarChart()和.stacked(true)开始,我首先尝试将这两个星期合并到一个包含14个柱的数组中,其中x位置可以帮助对条形图进行分组。我试图形成我的组合对象数组,其中.x属性的值为0、0.3、1,1.3、2、2.3等不幸的是,与lineChart()不同,它不使用x值进行定位。另一个想法是利用.stacked(false)组,提供具有相同x值的4个项目(

  6. javascript - 谷歌可视化堆叠条形图 : colors and labels for each value - 2

    我正在使用GoogleVisulaizationAPI来呈现一个图表,该图表显示具有多个值的单行,如下所示:使用以下代码:vardata=google.visualization.arrayToDataTable([['','0%','25%','50%','75%','100%',{role:'annotation'}],['Mood',3,7,20,25,45,'']]);varoptions={isStacked:true,hAxis:{minValue:0}}varchart=newgoogle.visualization.BarChart(document.getElemen

  7. javascript - D3.js 中的堆叠区域 - 2

    我正在使用D3.js,但在为具有多个系列的面积图设置堆叠布局时遇到了问题。我的数据有两种可能的结构(如果有帮助的话)。一种是提供给脚本的原始数据,结构如下:vardata=[{key:'Group1',value:37,date:'04/23/12'},{key:'Group2',value:12,date:'04/23/12'},{key:'Group3',value:46,date:'04/23/12'},{key:'Group1',value:32,date:'04/24/12'},{key:'Group2',value:19,date:'04/24/12'},{key:'Gro

  8. javascript - vis.js 时间轴,不要堆叠没有时间重叠的项目 - 2

    我正在使用vis.js来显示时间线。我有以下元素:varitems=newvis.DataSet([{id:1,content:'1)NextTo2',start:'2014-04-2000:00:00',end:'2014-04-2000:59:59'},{id:2,content:'2)NextTo1',start:'2014-04-2001:00:00',end:'2014-04-2002:59:59'},{id:3,content:'Underneath',start:'2014-04-2000:00:00',end:'2014-04-2005:59:59'}]);id1和id

  9. javascript - 重叠的 chart.js 堆叠图 - 2

    我正在创建一个堆叠条形图,但我需要它不仅仅是将两个值加在一起并显示它。例如:stackgraph此图应该显示“目标”百分比和实际百分比。因此,如果该列的目标值为70,实际值为30,它将显示0-30的实际数字颜色,然后继续30-70的目标颜色。有没有办法真正让它们像那样重叠,而不仅仅是总数为100? 最佳答案 您必须将这些参数添加到您的代码中-为X轴启用堆叠并为Y轴禁用它:xAxes:[{stacked:true}],yAxes:[{stacked:false,ticks:{beginAtZero:true,},}]

  10. javascript - 如何使用 dc.js 创建单行堆叠行图表? - 2

    关于DC.jsgithub,StockMarketSelectionStrategybyLonRiesberg被列为使用dc.js库的示例。Lon能够创建堆叠的行图表并将其显示为单行。我希望能够完成同样的事情。我只能弄清楚如何创建一个行图,如图所示inmycodepen,及以下。HTMLJavascriptitems=[{Id:"01",Name:"Red",Price:"1.00",Quantity:"1",TimeStamp:111},{Id:"02",Name:"White",Price:"10.00",Quantity:"1",TimeStamp:222},{Id:"04",N

随机推荐