Giter VIP home page Giter VIP logo

flutter_staggered_grid_view's Introduction

Hi there πŸ‘‹

I'm Romain Rastel, a french mobile developer who enjoy using Flutter to build apps.

You will find here some packages I wrote to make Flutter even better.

Reach me

Linkedin Badge Medium Badge Twitter Badge

Sponsor me

Patreon Badge Paypal Badge Buy me a coffee

I'm working on my packages on my free-time, but I don't have as much time as I would. If one of the pakcages I created is helping you, please consider to sponsor me. By doing so, I will prioritize your issues or your pull-requests before the others.

Github Stats

Romain's Github Stats

flutter_staggered_grid_view's People

Contributors

aarontwf avatar adil192 avatar bertrandbev avatar brianegan avatar clragon avatar dereklakin avatar letsar avatar shihaohong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_staggered_grid_view's Issues

How to avoid this broken layout?

I am trying to show placeholder and next image from internet. This is what I get and I don't know why this is happening. Is it possible to avoid this somehow?
shiba

Unable to scroll view when staggered grid is displayed

I have this code

_videosSection(){
    return new Column(
      children: <Widget>[
        new Padding(
          padding: const EdgeInsets.only(top: 8.0),
          child: Text(
            "Top Video Picks",
            style: Theme.of(context).textTheme.title,
          ),
        ),
        Container(
            child:  StaggeredGridView.countBuilder(
              crossAxisCount: 4,
              itemCount: videos == null ? 0: videos.length,
              shrinkWrap: true,
              itemBuilder: (BuildContext context, int index) => GraphicPreview(videos.elementAt(index)),
              staggeredTileBuilder: (int index) => new StaggeredTile.count(2, index.isEven ? 2 : 1),
              mainAxisSpacing: 0.0,
              crossAxisSpacing: 0.0,
            )
        ),
      ],
    );
  }

but once the view is rendered, the page is no scrollable anymore. When i try to scroll, it shows an accent showing as if it's trying to scroll inside the staggered grid. Any idea what's wrong with my code?

Problem with scrolling and images

I have this problem where when I scroll some elements gets destroyed by some sort of memory handler.
The images are from a List of File that are populated by the camera roll.

https://www.youtube.com/watch?v=vJLzDM-R0hQ

Here's my code so far: (I always have problem with GitHub code formatting'

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';

void main() => runApp(new MainApp());

class MainApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      showSemanticsDebugger: false,
      home: CameraApp(),
    );
  }
}

class CameraApp extends StatefulWidget {
  @override
  _CameraAppState createState() => _CameraAppState();
}

class Immagine {
  File image;
  bool checked;

  Immagine(this.image, this.checked);
}

class _CameraAppState extends State<CameraApp> {
  List<Immagine> images = new List();
  GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();


  picker() async {
    print('Picker is called');
    File img = await ImagePicker.pickImage(source: ImageSource.camera);
    if (img != null) {
      images.add(new Immagine(img, false));
      setState(() {});
    }
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      key: _scaffoldKey,
      appBar: new AppBar(
        title: new Text('Image Picker'),
        actions: <Widget>[
          _checkChecked()
              ? IconButton(
                  icon: Icon(Icons.select_all),
                  onPressed: () {
                    images.forEach((i) => i.checked = true);
                    setState(() {});
                  })
              : Container(),
          _checkChecked()
              ? IconButton(
                  icon: Icon(Icons.tab_unselected),
                  onPressed: () {
                    images.forEach((i) => i.checked = false);
                    setState(() {});
                  })
              : Container(),
          _checkChecked()
              ? IconButton(
                  icon: Icon(Icons.delete), onPressed: () => _removeImage())
              : Container()
        ],
      ),
      body: images.length == 0
          ? new Center(child: Text('No Image to Show'))
          : new StaggeredGridView.countBuilder(
              addRepaintBoundaries: false,
              crossAxisCount: 4,
              primary: false,
              itemCount: images.length,
              itemBuilder: (BuildContext context, int index) => new Container(
                  padding: EdgeInsets.all(8.0),
                  child: GestureDetector(
                    onTap: () => _checkChecked() ? setState(() =>
                      images[index].checked ? images[index].checked = false : images[index].checked = true
                    ) : _scaffoldKey.currentState.showSnackBar(SnackBar(content: Text("Preview"))),
                    onLongPress: () =>
                        setState(() => images[index].checked = true),
                    child: _buildBox(images[index]),
                  )),
              staggeredTileBuilder: (int index) => new StaggeredTile.fit(2),
            ),
      floatingActionButton: new FloatingActionButton(
        onPressed: picker,
        child: new Icon(Icons.camera_alt),
      ),
    );
  }

  _removeImage() {
    showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text("Attenzione"),
            content: Text("Sicuro di voler eliminare queste foto?"),
            actions: <Widget>[
              FlatButton(
                child: Text("Annulla"),
                onPressed: () => Navigator.of(context).pop(),
              ),
              FlatButton(
                child: Text("Elimina"),
                onPressed: () {
                  images.removeWhere((img) => img.checked);
                  setState(() { });
                  Navigator.of(context).pop();
                },
              )
            ],
          );
        });
  }

  _buildBox(Immagine image) {
    return new Card(
        child: new Column(
          children: <Widget>[
            new Center(
                child: new Container(
                  child: Image.file(image.image),
                )
            ),
            new Padding(
              padding: const EdgeInsets.all(4.0),
              child: new Row(
                mainAxisSize: MainAxisSize.max,
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: <Widget>[
                  IconButton(icon: Icon(Icons.edit), onPressed: () => _scaffoldKey.currentState.showSnackBar(SnackBar(content: Text("Edit")))),
                  IconButton(icon: Icon(Icons.delete), onPressed: () => setState(() => images.remove(image)))
                ],
              ),
            )
          ],
        )
    );
  }

  bool _checkChecked() {
    bool a = false;
    images.forEach((i) => i.checked ? a = true : null);
    return a;
  }
}

Not working inside scrollview, row or column

I want to show content below the staggered_grid_view.
if I put staggered_grid_view inside the scroll view, row or column then it is not working.

 I/flutter ( 9770): ══║ EXCEPTION CAUGHT BY RENDERING LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
I/flutter ( 9770): The following assertion was thrown during performResize():
I/flutter ( 9770): Vertical viewport was given unbounded height.
I/flutter ( 9770): Viewports expand in the scrolling direction to fill their container.In this case, a vertical
I/flutter ( 9770): viewport was given an unlimited amount of vertical space in which to expand. This situation
I/flutter ( 9770): typically happens when a scrollable widget is nested inside another scrollable widget.
I/flutter ( 9770): If this widget is always nested in a scrollable widget there is no need to use a viewport because
I/flutter ( 9770): there will always be enough vertical space for the children. In this case, consider using a Column
I/flutter ( 9770): instead. Otherwise, consider using the "shrinkWrap" property (or a ShrinkWrappingViewport) to size
I/flutter ( 9770): the height of the viewport to the sum of the heights of its children.
I/flutter ( 9770): 
I/flutter ( 9770): When the exception was thrown, this was the stack:
I/flutter ( 9770): #0      RenderViewport.performResize.<anonymous closure> (package:flutter/src/rendering/viewport.dart:1129:15)
I/flutter ( 9770): #1      RenderViewport.performResize (package:flutter/src/rendering/viewport.dart:1182:6)
I/flutter ( 9770): #2      RenderObject.layout (package:flutter/src/rendering/object.dart:1619:9)
I/flutter ( 9770): #3      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #4      RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #5      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #6      RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #7      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #8      RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #9      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #10     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #11     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #12     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #13     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #14     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #15     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #16     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #17     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #18     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #19     RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:738:15)
I/flutter ( 9770): #20     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #21     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #22     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #23     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #24     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1188:11)
I/flutter ( 9770): #25     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #26     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:142:11)
I/flutter ( 9770): #27     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:339:7)
I/flutter ( 9770): #28     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:212:7)
I/flutter ( 9770): #29     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:356:14)
I/flutter ( 9770): #30     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #31     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #32     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #33     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #34     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1188:11)
I/flutter ( 9770): #35     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #36     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #37     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #38     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #39     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #40     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #41     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #42     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #43     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #44     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #45     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #46     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #47     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #48     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #49     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #50     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #51     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:2881:13)
I/flutter ( 9770): #52     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #53     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:510:15)
I/flutter ( 9770): #54     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #55     __RenderTheatre&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #56     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #57     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #58     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #59     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #60     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #61     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #62     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #63     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #64     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #65     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13)
I/flutter ( 9770): #66     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 9770): #67     RenderView.performLayout (package:flutter/src/rendering/view.dart:147:13)
I/flutter ( 9770): #68     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1509:7)
I/flutter ( 9770): #69     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:768:18)
I/flutter ( 9770): #70     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:281:19)
I/flutter ( 9770): #71     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:677:13)
I/flutter ( 9770): #72     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:219:5)
I/flutter ( 9770): #73     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter ( 9770): #74     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter ( 9770): #75     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:751:7)
I/flutter ( 9770): #77     _Timer._runTimers (dart:isolate/runtime/libtimer_impl.dart:382:19)
I/flutter ( 9770): #78     _Timer._handleMessage (dart:isolate/runtime/libtimer_impl.dart:416:5)
I/flutter ( 9770): #79     _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)
I/flutter ( 9770): (elided one frame from package dart:async)
I/flutter ( 9770): 

Add support for pagination

The library itself is wonderful. But I would suggest to add support for Pagination. It would be great if this library able to integrate with this pagination library flutter_pagewise

pub get failed (1)

Running "flutter packages get" in example...
Package flutter_staggered_grid_view requires Flutter SDK version ^0.1.0 but the current SDK is 0.2.1-pre.45.
pub get failed (1)

When there was bottomNavigationBar in the layout, the staggered grid view did not calculate the height correctly

My layout hierarchy looks something like this:

Scaffold(
  TabBarView(
    children(
      StaggeredGridView,
      ....
    )
  ),
  bottomNavigationBar(...),
)

crossAxisCount is 2,when the itemCount is even number,Layout is correct,
but when the itemCount is odd number,the layout height exceeded the bottomNavigationBar(I'm sure the list has scrolled down to the bottomοΌ‰.

screenshot:
itemCount is odd number:
image

itemCount is even number:
image

when the itemCount is odd number, logCat will print:
image

Unhandled Exception: type 'SliverHitTestResult' is not a subtype of type 'BoxHitTestResult'

flutter doctor

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel master, v1.5.9-pre.188, on Microsoft Windows [Version 10.0.18356.16], locale zh-CN)

[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[√] Android Studio (version 3.4)
[√] VS Code (version 1.33.1)
[√] Connected device (2 available)

β€’ No issues found!

Logs

E/flutter ( 2748): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: type 'SliverHitTestResult' is not a subtype of type 'BoxHitTestResult'
E/flutter ( 2748): #0      RenderSliverVariableSizeBoxAdaptor.hitTestChildren (package:flutter_staggered_grid_view/src/rendering/sliver_variable_size_box_adaptor.dart:380:27)
E/flutter ( 2748): #1      RenderSliver.hitTest (package:flutter/src/rendering/sliver.dart:1273:11)
E/flutter ( 2748): #2      SliverHitTestResult.addWithAxisOffset (package:flutter/src/rendering/sliver.dart:850:19)
E/flutter ( 2748): #3      RenderSliverPadding.hitTestChildren (package:flutter/src/rendering/sliver_padding.dart:266:14)
E/flutter ( 2748): #4      RenderSliver.hitTest (package:flutter/src/rendering/sliver.dart:1273:11)
E/flutter ( 2748): #5      RenderViewportBase.hitTestChildren.<anonymous closure> (package:flutter/src/rendering/viewport.dart:585:24)
E/flutter ( 2748): #6      BoxHitTestResult.addWithRawTransform (package:flutter/src/rendering/box.dart:791:19)
E/flutter ( 2748): #7      BoxHitTestResult.addWithPaintTransform (package:flutter/src/rendering/box.dart:722:12)
E/flutter ( 2748): #8      RenderViewportBase.hitTestChildren (package:flutter/src/rendering/viewport.dart:581:33)
E/flutter ( 2748): #9      RenderBox.hitTest (package:flutter/src/rendering/box.dart:2100:11)
E/flutter ( 2748): #10     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #11     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2100:11)
E/flutter ( 2748): #12     RenderIgnorePointer.hitTest (package:flutter/src/rendering/proxy_box.dart:2963:37)
E/flutter ( 2748): #13     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #14     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2100:11)
E/flutter ( 2748): #15     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #16     RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:161:19)
E/flutter ( 2748): #17     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #18     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2100:11)
E/flutter ( 2748): #19     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #20     RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:161:19)
E/flutter ( 2748): #21     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #22     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2100:11)
E/flutter ( 2748): #23     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #24     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2100:11)
E/flutter ( 2748): #25     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #26     RenderCustomPaint.hitTestChildren (package:flutter/src/rendering/custom_paint.dart:508:18)
E/flutter ( 2748): #27     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2100:11)
E/flutter ( 2748): #28     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #29     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2100:11)
E/flutter ( 2748): #30     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #31     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2100:11)
E/flutter ( 2748): #32     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:114:19)
E/flutter ( 2748): #33     RenderCustomPaint.hitTestChildren (package:flutter/src/rendering/custom_paint.dart:508:18)
E/flutter ( 2748): #34     RenderBox.hitTest (package:flutter/src/rendering/box.dart:2100:11)
E/flutter ( 2748): #35     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (packa

constraints.remainingCacheExtent and constraints.cacheOrigin

Hello please this is my code

new StaggeredGridView.countBuilder(crossAxisCount: 4,
itemBuilder: (BuildContext context, int index) => new Container(
color: Colors.green,
child: new Center(
child: new CircleAvatar(
backgroundColor: Colors.white,
child: new Text('$index'),
),
)), staggeredTileBuilder: (int index) =>
new StaggeredTile.count(2, index.isEven ? 2 : 1),
mainAxisSpacing: 4.0,
crossAxisSpacing: 4.0,),

But anytime i run it it throws an error in 'package:flutter_staggered_grid_view/src/rendering/sliver_staggered_grid.dart': error: line 254 pos
and writes
The following _CompileTimeError was thrown during performLayout():
Error: The getter 'cacheOrigin' isn't defined for the class '#lib1::SliverConstraints'.
Error: The getter 'remainingCacheExtent' isn't defined for the class '#lib1::SliverConstraints'.
Any Idea how to fix this.
Thanks

what is this? I can not use the staggered grid view for anything

Error: A value of type '#lib1::SliverStaggeredGrid' can't be assigned to a variable of type '#lib2::Widget'. Try changing the type of the left hand side, or casting the right hand side to '#lib2::Widget'. return new SliverStaggeredGrid(I/flutter (26630):
^
return new SliverStaggeredGrid(
^

This is my code:

    body: Container(
      child: _media.length > 0
          ? StaggeredGridView.count(
              padding: const EdgeInsets.only(top: 0.0),
              staggeredTiles: _staggeredTiles(),
              crossAxisCount: 2,
              mainAxisSpacing: 4,
              crossAxisSpacing: 4,
              children: List.generate(
                _media.length,
                (index) {
                  return GestureDetector(
                    child: MediaListItem(_media[index]),
                    onTap: () {
                      var route = MaterialPageRoute(
                          builder: (BuildContext context) =>
                              MovieDetail(_media[index]));
                      Navigator.of(context).push(route);
                    },
                  );
                },
              ),
            )
          : EmptyBody(),
    ),

List _staggeredTiles (){
List items = new List();
for(var item in _media){
items.add(StaggeredTile.count(2, 4));
}
return items;
}

More detailed document

Spent about 30 mins still can't figure out exactly how to configure this, played around with the variables and getting completely random looking results... It would be great to have a more detailed document on CrossAxisCount, variables to pass onto StaggerredTile.fit and StaggeredTile.count.

GridView throws error

Hi guys,

So I wanted a "masonry" style on my GridView and I found this awesome plugin, I tried to update the code but it's giving issues and I need some advise please:

My app code:

return StaggeredGridView.countBuilder(
                        padding: EdgeInsets.all(10.0),
                        scrollDirection: Axis.vertical,
                        shrinkWrap: true,
                        staggeredTileBuilder: (int index) => new StaggeredTile.fit(2),
                        mainAxisSpacing: 10.0,
                        crossAxisSpacing: 10.0,
                        itemBuilder: (context, index) {
                          return buildItem(context, snapshot.data.documents[index]);
                        },
                        itemCount: snapshot.data.documents.length,
                      );
I/flutter (31138): ══║ EXCEPTION CAUGHT BY WIDGETS LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
I/flutter (31138): The following assertion was thrown building FutureBuilder<QuerySnapshot>(dirty, dependencies:
I/flutter (31138): [_InheritedTheme, _LocalizationsScope-[GlobalKey#e254a]], state:
I/flutter (31138): _FutureBuilderState<QuerySnapshot>#d48e4):
I/flutter (31138): 'package:flutter_staggered_grid_view/src/rendering/sliver_staggered_grid.dart': Failed assertion:
I/flutter (31138): line 629 pos 16: 'crossAxisCount != null && crossAxisCount > 0': is not true.
I/flutter (31138): 
I/flutter (31138): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter (31138): more information in this error message to help you determine and fix the underlying cause.
I/flutter (31138): In either case, please report this assertion by filing a bug on GitHub:
I/flutter (31138):   https://github.com/flutter/flutter/issues/new?template=BUG.md
I/flutter (31138): 
I/flutter (31138): When the exception was thrown, this was the stack:
I/flutter (31138): #2      new SliverStaggeredGridDelegateWithFixedCrossAxisCount (package:flutter_staggered_grid_view/src/rendering/sliver_staggered_grid.dart:629:16)
I/flutter (31138): #3      new StaggeredGridView.countBuilder (package:flutter_staggered_grid_view/src/widgets/staggered_grid_view.dart:332:28)
I/flutter (31138): #4      _DiscoverScreenState.build.<anonymous closure> (package:companychat/ui/screens/discover.dart:341:48)
I/flutter (31138): #5      _FutureBuilderState.build (package:flutter/src/widgets/async.dart)
I/flutter (31138): #6      StatefulElement.build (package:flutter/src/widgets/framework.dart:3825:27)
I/flutter (31138): #7      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3739:15)
I/flutter (31138): #8      Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #9      StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #10     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #11     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #12     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #13     StatelessElement.update (package:flutter/src/widgets/framework.dart:3796:5)
I/flutter (31138): #14     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #15     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4601:32)
I/flutter (31138): #16     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4992:17)
I/flutter (31138): #17     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #18     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #19     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #20     StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #22     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #23     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #24     ProxyElement.update (package:flutter/src/widgets/framework.dart:4006:5)
I/flutter (31138): #25     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #26     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #27     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #28     ProxyElement.update (package:flutter/src/widgets/framework.dart:4006:5)
I/flutter (31138): #29     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #30     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4601:32)
I/flutter (31138): #31     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4992:17)
I/flutter (31138): #32     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #33     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #34     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #35     StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #36     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #37     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #38     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #39     ProxyElement.update (package:flutter/src/widgets/framework.dart:4006:5)
I/flutter (31138): #40     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #41     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #42     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #43     StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #44     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #45     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
I/flutter (31138): #46     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #47     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #48     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #49     StatelessElement.update (package:flutter/src/widgets/framework.dart:3796:5)
I/flutter (31138): #50     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #51     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
I/flutter (31138): #52     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #53     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #54     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #55     StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #56     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #57     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #58     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #59     StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #60     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #61     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #62     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #63     ProxyElement.update (package:flutter/src/widgets/framework.dart:4006:5)
I/flutter (31138): #64     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #65     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #66     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #67     ProxyElement.update (package:flutter/src/widgets/framework.dart:4006:5)
I/flutter (31138): #68     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #69     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #70     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #71     StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #72     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #73     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #74     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #75     StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #76     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #77     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
I/flutter (31138): #78     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #79     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #80     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #81     StatelessElement.update (package:flutter/src/widgets/framework.dart:3796:5)
I/flutter (31138): #82     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #83     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
I/flutter (31138): #84     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #85     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
I/flutter (31138): #86     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #87     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
I/flutter (31138): #88     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #89     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
I/flutter (31138): #90     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #91     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #92     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #93     StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #94     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #95     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #96     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #97     StatelessElement.update (package:flutter/src/widgets/framework.dart:3796:5)
I/flutter (31138): #98     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #99     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #100    Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #101    StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #102    Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #103    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
I/flutter (31138): #104    Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #105    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #106    Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #107    ProxyElement.update (package:flutter/src/widgets/framework.dart:4006:5)
I/flutter (31138): #108    Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #109    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
I/flutter (31138): #110    Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #111    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #112    Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #113    StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
I/flutter (31138): #114    Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #115    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #116    Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #117    StatelessElement.update (package:flutter/src/widgets/framework.dart:3796:5)
I/flutter (31138): #118    Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #119    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
I/flutter (31138): #120    Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #121    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #122    Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #123    ProxyElement.update (package:flutter/src/widgets/framework.dart:4006:5)
I/flutter (31138): #124    Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter (31138): #125    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter (31138): #126    Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter (31138): #127    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2278:33)
I/flutter (31138): #128    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:700:20)
I/flutter (31138): #129    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
I/flutter (31138): #130    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1012:15)
I/flutter (31138): #131    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:952:9)
I/flutter (31138): #132    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:773:7)

right now I have 2 items coming from Firebase (this worked fine with ListView and GridView).
Thank you so much.

I don't know use it with dynamic items (adding and removing)

Your package is great but I don't know use it with dynamic items because setstate() doesn't call to the build method of every item (I think). The same code with a GridView.builder works fine.

I attach code removing and adding items and a video.

class _MyHomePageState extends State {
final _scaffoldkey = new GlobalKey();
final _streamController = StreamController();
List _items = [];
int _counter = 0;

_itemGet(int index) {
return _items[index];
}

_itemChanged(Item item) {
var i = _items?.firstWhere((t) => t.id == item.id);
if (i != null) {
_scaffoldkey.currentState.showSnackBar(new SnackBar(content: new Text("Deleted ${i.id}?")));
setState(() {
_items.remove(i);
});
}
}

_itemAdd() {
setState(() {
_items.add(Item(_counter++, _streamController));
});
}

@OverRide
void initState() {
super.initState();
_streamController.stream.listen((item) => _itemChanged(item));
for (var i = 0; i < 4; i++)
_items.add(Item(_counter++, _streamController));
}

@OverRide
void dispose() {
_streamController.close();
super.dispose();
}

_staggeredGridView() {
return StaggeredGridView.countBuilder(
crossAxisCount: 4,
mainAxisSpacing: 0.0,
crossAxisSpacing: 8.0,
padding: EdgeInsets.all(8.0),
itemCount: _items.length,
itemBuilder: (BuildContext context, int index) => _itemGet(index),
staggeredTileBuilder: (int index) => StaggeredTile.fit(1),
);
}

_gridView() {
return GridView.builder(
padding: EdgeInsets.all(4.0),
itemCount: _items.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
childAspectRatio: 4.0,
crossAxisSpacing: 4.0,
crossAxisCount: 4,
mainAxisSpacing: 4.0,
),
itemBuilder: (BuildContext context, int index) => _itemGet(index),
);
}

@OverRide
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldkey,
appBar: AppBar(title: Text(widget.title)),
body: _staggeredGridView(),
// body: _gridView(),
floatingActionButton: FloatingActionButton(onPressed: _itemAdd, child: Icon(Icons.add)),
);
}
}

class Item extends StatelessWidget {
final int id;
final StreamController streamController;

Item(this.id, this.streamController);

_remove() {
streamController.add(this);
}

@OverRide
Widget build(BuildContext context) {
return RaisedButton.icon(onPressed: _remove, icon: Icon(Icons.delete), label: Text('$id'));
}
}

untitled

scrolling to top when switching tabs

Hi, I'm using PageStorageKey to store scroll position between tabs but the staggeredgridview keeps scrolling to the top when I switch from one to another.
If I don't use PageStorageKey the scroll already starts on the top (expected behaviour) but if I don't, it scrolls (animated) from the last known position to the top (expect to stay at last known position).

When the waterfall slides, it will be stuck.

Hello, the situation I encountered is such that the waterfall will slip and shake when it slides to some position. I hope to get your help, The code is as follows:

StaggeredGridView:
return Scaffold(
appBar: _getAppBar(),
body: RefreshLayout(
canloading: isMore,
child: StaggeredGridView.countBuilder(
primary: false,
physics: _isScroll ? ScrollPhysics() : NeverScrollableScrollPhysics(),
padding: EdgeInsets.all(3.0),
itemCount: _list.length,
crossAxisCount: 2,
itemBuilder: (context, index) => SquareItem(index, _list),
staggeredTileBuilder: (index) => StaggeredTile.fit(1),
),

    onRefresh: (bool refresh) {
      if (refresh) {
        return _getListData(0);
      } else {
        return _getListData(_list[_list.length - 1]['showInfoId']);
      }
    },
  ),
);

item:

class SquareItem extends StatefulWidget {
SquareItem(this._index, this._list);

final List _list;
final int _index;

@OverRide
_SquareItemState createState() => _SquareItemState(_index, _list);

}

class _SquareItemState extends State {

_SquareItemState(this._index, this._list);

final List _list;
final int _index;

Widget _getImgNumGroup() {
return Align(
alignment: Alignment.topRight,
child: Container(
alignment: Alignment.center,
height: 20.0,
width: 51.0,
margin: EdgeInsets.only(right: 8.0, top: 4.0),
decoration: BoxDecoration(
color: Colors.black54,
borderRadius: BorderRadius.all(Radius.circular(10.0),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Image.asset(Images.image_num),
Text(
'${_list[_index]['imageNum']}εΌ ',
style: TextStyle(
color: Colors.white,
fontSize: 11.0,
),
),
],
),
),
);
}

Widget _getAvatarGroup() {
String avatarUrl = _list[_index]['avatorUrl'];
return Container(
alignment: Alignment.bottomLeft,
margin: EdgeInsets.only(left: 5.0),
child: Row(
children: [
Container(
width: 30.0,
height: 30.0,
child: CircleAvatar(
backgroundImage: avatarUrl != '' && avatarUrl != null ?
CachedNetworkImageProvider(avatarUrl) : AssetImage(Images.head_img),
),
),
],
),
);
}

Widget _getImgBottom() {
bool isShowLive = _list[_index]['livingChannelId'] == 0;
return Container(
margin: EdgeInsets.only(left: 40.0),
alignment: Alignment.bottomCenter,
child: Row(
children: [
Expanded(
child: Text(
_list[_index]['nickName'],
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 13.0),
),
),

      Offstage(
        offstage: isShowLive, //trueζ˜―ιšθ—
        child: Container(
          margin: EdgeInsets.only(right: 3.0),
          height: 20.0,
          alignment: Alignment.centerRight,
          child: IconButton(
              padding: EdgeInsets.all(0.0),
              icon: Image.asset(Images.live_orange),
              onPressed: () {
                Navigator.push(context, MaterialPageRoute(builder: (context) {
                  return LiveRoom();
                }));
              }
          ),
        ),
      ),
    ],
  ),
);

}

Widget _getImgGroup() {
return IntrinsicHeight(
child: Stack(
children: [
Container(
margin: EdgeInsets.only(bottom: 20.0),
child: CachedNetworkImage(
imageUrl: _list[_index]['showImgUrl'],
placeholder: Image.asset(Images.item_placeholder),
errorWidget: Container(
alignment: Alignment.center,
height: 200.0,
child: Icon(Icons.error),
),
),
),
_getImgNumGroup(),
_getAvatarGroup(),
_getImgBottom(),
],
),
);
}

Widget _getContentGroup() {
return Padding(
padding: EdgeInsets.only(left: 5.0, top: 5.0),
child: Text(
widget._list[widget._index]['content'],
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 12.0,
color: Color(0xff999999),
),
),
);
}

Widget _getBottomGroup() {
return Container(
margin: EdgeInsets.only(left: 5.0, bottom: 3.0),
child: Row(
children: [
Image.asset(Images.follow_num),
Padding(padding: EdgeInsets.only(left: 5.0, right: 10.0), child: Text(_list[_index]['followNum'].toString()),),
Image.asset(Images.playing_num),
Padding(padding: EdgeInsets.only(left: 5.0), child: Text('${_list[_index]['playingNum']}'),),
],
),
);
}

@OverRide
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) => SquareDetail(_list[_index]['id'])));
},
child: Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_getImgGroup(),
_getContentGroup(),
_getBottomGroup(),
],
),
),
);
}
}

issue with StaggeredGridView.countBuilder()

I keep getting this error however I use the flutter_staggered_grid_view package.

The following _CompileTimeError was thrown building StaggeredGridView(scrollDirection: vertical,
I/flutter (17502): primary: using primary controller, AlwaysScrollableScrollPhysics, padding: EdgeInsets.all(8.0),
I/flutter (17502): dirty):
I/flutter (17502): 'package:flutter_staggered_grid_view/src/widgets/staggered_grid_view.dart': error: line 492 pos 16:
I/flutter (17502): file:///C:/Users/Balqees/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/staggered_grid_view.dart:492:16:
I/flutter (17502): Error: A value of type '#lib1::SliverStaggeredGrid' can't be assigned to a variable of type
I/flutter (17502): '#lib2::Widget'.
I/flutter (17502): Try changing the type of the left hand side, or casting the right hand side to '#lib2::Widget'.
I/flutter (17502): return new SliverStaggeredGrid(
I/flutter (17502): ^
I/flutter (17502): return new SliverStaggeredGrid(
I/flutter (17502): ^

and here is my code:
I was just trying to test the code snippet in this link: https://pub.dartlang.org/packages/flutter_staggered_grid_view#-readme-tab-
@OverRide
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Mad Libs'),
),
body: new StaggeredGridView.countBuilder(
crossAxisCount: 4,
itemCount: 8,
itemBuilder: (BuildContext context, int index) => new Container(
color: Colors.green,
child: new Center(
child: new CircleAvatar(
backgroundColor: Colors.white,
child: new Text('$index'),
),
)),
staggeredTileBuilder: (int index) =>
new StaggeredTile.count(2, index.isEven ? 2 : 1),
mainAxisSpacing: 4.0,
crossAxisSpacing: 4.0,
)
);
}

How to add title for every line?

I want to use this widget to display some data by lines, like this:

image

image

how to add a title for each line (or several lines)?

thanks!

following assertion was thrown during performLayout():

I/flutter (15128): constraints: SliverConstraints(AxisDirection.down, GrowthDirection.forward, ScrollDirection.idle,
I/flutter (15128): scrollOffset: 0.0, remainingPaintExtent: 603.4, crossAxisExtent: 411.4, crossAxisDirection:
I/flutter (15128): AxisDirection.right, viewportMainAxisExtent: 603.4, remainingCacheExtent: 853.4 cacheOrigin: 0.0 )
I/flutter (15128): geometry: null
I/flutter (15128): currently live children: 0,1,2,3
I/flutter (15128): This RenderObject had the following descendants (showing up to depth 5):
I/flutter (15128): RenderIndexedSemantics#e7755 relayoutBoundary=up3 NEEDS-PAINT
I/flutter (15128): RenderRepaintBoundary#c70e7 relayoutBoundary=up4 NEEDS-PAINT
I/flutter (15128): RenderTransform#34c8e relayoutBoundary=up5 NEEDS-PAINT
I/flutter (15128): RenderSemanticsGestureHandler#0f948 relayoutBoundary=up6 NEEDS-PAINT
I/flutter (15128): RenderPointerListener#14581 relayoutBoundary=up7 NEEDS-PAINT
I/flutter (15128): RenderIndexedSemantics#80231 relayoutBoundary=up3 NEEDS-PAINT
I/flutter (15128): RenderRepaintBoundary#d6bc3 relayoutBoundary=up4 NEEDS-PAINT
I/flutter (15128): RenderTransform#aec43 relayoutBoundary=up5 NEEDS-PAINT
I/flutter (15128): RenderSemanticsGestureHandler#d0703 relayoutBoundary=up6 NEEDS-PAINT
I/flutter (15128): RenderPointerListener#9913e relayoutBoundary=up7 NEEDS-PAINT
I/flutter (15128): RenderIndexedSemantics#d1292 relayoutBoundary=up3 NEEDS-PAINT
I/flutter (15128): RenderRepaintBoundary#090e4 relayoutBoundary=up4 NEEDS-PAINT
I/flutter (15128): RenderTransform#7300d relayoutBoundary=up5 NEEDS-PAINT
I/flutter (15128): RenderSemanticsGestureHandler#b02a2 relayoutBoundary=up6 NEEDS-PAINT
I/flutter (15128): RenderPointerListener#29f3d relayoutBoundary=up7 NEEDS-PAINT
I/flutter (15128): RenderIndexedSemantics#45a97 relayoutBoundary=up3 NEEDS-PAINT
I/flutter (15128): RenderRepaintBoundary#347c5 relayoutBoundary=up4 NEEDS-PAINT
I/flutter (15128): RenderTransform#ca4ef relayoutBoundary=up5 NEEDS-PAINT
I/flutter (15128): RenderSemanticsGestureHandler#97ff2 relayoutBoundary=up6 NEEDS-PAINT
I/flutter (15128): RenderPointerListener#d428e relayoutBoundary=up7 NEEDS-PAINT
I/flutter (15128): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (15128): Another exception was thrown: NoSuchMethodError: The getter 'scrollOffsetCorrection' was called on null.
I/flutter (15128): Another exception was thrown: NoSuchMethodError: The method 'debugAssertIsValid' was called on null.
I/flutter (15128): Another exception was thrown: NoSuchMethodError: The getter 'visible' was called on null.
I/flutter (15128): Another exception was thrown: 'package:flutter_staggered_grid_view/src/rendering/sliver_variable_size_box_adaptor.dart': Failed assertion: line 365 pos 12: 'child != null': is not true.
I/flutter (15128): Another exception was thrown: NoSuchMethodError: The getter 'scrollOffsetCorrection' was called on null.
I/flutter (15128): Another exception was thrown: NoSuchMethodError: The method 'debugAssertIsValid' was called on null.
I/flutter (15128): Another exception was thrown: NoSuchMethodError: The getter 'visible' was called on null.

Sometimes exceptions are thrown

dependencies:
    flutter_staggered_grid_view: ^0.2.7
22:58:53.521 255 info flutter.tools  ══║ EXCEPTION CAUGHT BY RENDERING LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
22:58:53.534 256 info flutter.tools  The following NoSuchMethodError was thrown during performLayout():
22:58:53.534 257 info flutter.tools  The getter 'parentData' was called on null.
22:58:53.534 258 info flutter.tools  Receiver: null
22:58:53.534 259 info flutter.tools  Tried calling: parentData
22:58:53.534 260 info flutter.tools 
22:58:53.534 261 info flutter.tools  When the exception was thrown, this was the stack:
22:58:53.551 262 info flutter.tools  #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5)
22:58:53.551 263 info flutter.tools  #1      RenderSliverVariableSizeBoxAdaptor.remove (package:flutter_staggered_grid_view/src/rendering/sliver_variable_size_box_adaptor.dart:209:15)
22:58:53.551 264 info flutter.tools  #2      SliverVariableSizeBoxAdaptorElement.removeChildRenderObject (package:flutter_staggered_grid_view/src/widgets/sliver.dart:313:18)
22:58:53.551 265 info flutter.tools  #3      RenderObjectElement.detachRenderObject (package:flutter/src/widgets/framework.dart:4744:36)
22:58:53.551 266 info flutter.tools  #4      Element.detachRenderObject.<anonymous closure> (package:flutter/src/widgets/framework.dart:2867:13)
22:58:53.551 267 info flutter.tools  #5      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3770:14)
22:58:53.551 268 info flutter.tools  #6      Element.detachRenderObject (package:flutter/src/widgets/framework.dart:2866:5)
22:58:53.551 269 info flutter.tools  #7      Element.detachRenderObject.<anonymous closure> (package:flutter/src/widgets/framework.dart:2867:13)
22:58:53.551 270 info flutter.tools  #8      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3770:14)
22:58:53.551 271 info flutter.tools  #9      Element.detachRenderObject (package:flutter/src/widgets/framework.dart:2866:5)
22:58:53.551 272 info flutter.tools  #10     Element.detachRenderObject.<anonymous closure> (package:flutter/src/widgets/framework.dart:2867:13)
22:58:53.552 273 info flutter.tools  #11     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3770:14)
22:58:53.554 274 info flutter.tools  #12     Element.detachRenderObject (package:flutter/src/widgets/framework.dart:2866:5)
22:58:53.554 275 info flutter.tools  #13     Element.deactivateChild (package:flutter/src/widgets/framework.dart:2996:11)
22:58:53.554 276 info flutter.tools  #14     Element.updateChild (package:flutter/src/widgets/framework.dart:2741:9)
22:58:53.554 277 info flutter.tools  #15     SliverVariableSizeBoxAdaptorElement.updateChild (package:flutter_staggered_grid_view/src/widgets/sliver.dart:170:36)
22:58:53.554 278 info flutter.tools  #16     SliverVariableSizeBoxAdaptorElement.removeChild.<anonymous closure> (package:flutter_staggered_grid_view/src/widgets/sliver.dart:201:32)
22:58:53.554 279 info flutter.tools  #17     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2258:19)
22:58:53.555 280 info flutter.tools  #18     SliverVariableSizeBoxAdaptorElement.removeChild (package:flutter_staggered_grid_view/src/widgets/sliver.dart:197:11)
22:58:53.555 281 info flutter.tools  #19     List.forEach (dart:core-patch/growable_array.dart:278:8)
22:58:53.555 282 info flutter.tools  #20     RenderSliverVariableSizeBoxAdaptor.collectGarbage.<anonymous closure> (package:flutter_staggered_grid_view/src/rendering/sliver_variable_size_box_adaptor.dart:342:12)
22:58:53.555 283 info flutter.tools  #21     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1740:58)
22:58:53.557 284 info flutter.tools  #22     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:797:15)
22:58:53.557 285 info flutter.tools  #23     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1740:13)
22:58:53.557 286 info flutter.tools  #24     RenderSliverVariableSizeBoxAdaptor.collectGarbage (package:flutter_staggered_grid_view/src/rendering/sliver_variable_size_box_adaptor.dart:328:5)
22:58:53.557 287 info flutter.tools  #25     RenderSliverStaggeredGrid.performLayout (package:flutter_staggered_grid_view/src/rendering/sliver_staggered_grid.dart:364:5)
22:58:53.557 288 info flutter.tools  #26     RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
22:58:53.558 289 info flutter.tools  #27     RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:182:11)
22:58:53.558 290 info flutter.tools  #28     RenderObject.layout (package:flutter/src/rendering/object.dart:1644:7)
22:58:53.559 291 info flutter.tools  #29     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:407:13)
22:58:53.559 292 info flutter.tools  #30     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1322:12)
22:58:53.559 293 info flutter.tools  #31     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1240:20)
22:58:53.561 294 info flutter.tools  #32     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1519:7)
22:58:53.561 295 info flutter.tools  #33     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:766:18)
22:58:53.561 296 info flutter.tools  #34     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:347:19)
22:58:53.561 297 info flutter.tools  #35     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:701:13)
22:58:53.561 298 info flutter.tools  #36     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
22:58:53.561 299 info flutter.tools  #37     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1012:15)
22:58:53.562 300 info flutter.tools  #38     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:952:9)
22:58:53.563 301 info flutter.tools  #39     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:864:5)
22:58:53.563 302 info flutter.tools  #43     _invoke (dart:ui/hooks.dart:219:10)
22:58:53.563 303 info flutter.tools  #44     _drawFrame (dart:ui/hooks.dart:178:3)
22:58:53.563 304 info flutter.tools  (elided 3 frames from package dart:async)
22:58:53.580 305 info flutter.tools 
22:58:53.580 306 info flutter.tools  The following RenderObject was being processed when the exception was fired:
22:58:53.580 307 info flutter.tools    RenderSliverStaggeredGrid#6bd71 relayoutBoundary=up2 NEEDS-LAYOUT
22:58:53.580 308 info flutter.tools    creator: SliverStaggeredGrid ← SliverPadding ← Viewport ← IgnorePointer-[GlobalKey#4d84d] ←
22:58:53.580 309 info flutter.tools    Semantics ← Listener ← _GestureSemantics ←
22:58:53.580 310 info flutter.tools    RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#2bfc9] ← Listener ← _ScrollableScope
22:58:53.580 311 info flutter.tools    ← _ScrollSemantics-[GlobalKey#e7695] ← Scrollable ← β‹―
22:58:53.580 312 info flutter.tools    parentData: paintOffset=Offset(12.0, 0.0) (can use size)
22:58:53.580 313 info flutter.tools    constraints: SliverConstraints(AxisDirection.down, GrowthDirection.forward,
22:58:53.580 314 info flutter.tools    ScrollDirection.reverse, scrollOffset: 9886.5, remainingPaintExtent: 796.0, crossAxisExtent:
22:58:53.580 315 info flutter.tools    390.0, crossAxisDirection: AxisDirection.right, viewportMainAxisExtent: 796.0,
22:58:53.580 316 info flutter.tools    remainingCacheExtent: 1296.0 cacheOrigin: -238.0 )
22:58:53.580 317 info flutter.tools    geometry: SliverGeometry(scrollExtent: 11130.9, paintExtent: 796.0, maxPaintExtent: 11130.9,
22:58:53.580 318 info flutter.tools    hasVisualOverflow: true, cacheExtent: 1296.0)
22:58:53.580 319 info flutter.tools    currently live children:
22:58:53.580 320 info flutter.tools    153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176
22:58:53.581 321 info flutter.tools  This RenderObject had the following descendants (showing up to depth 5):
22:58:53.581 322 info flutter.tools    RenderIndexedSemantics#8f221
22:58:53.582 323 info flutter.tools      RenderRepaintBoundary#dba82
22:58:53.582 324 info flutter.tools        RenderClipRRect#8dd69
22:58:53.582 325 info flutter.tools          RenderStack#db0c3
22:58:53.582 326 info flutter.tools            RenderDecoratedBox#45a0e
22:58:53.582 327 info flutter.tools            RenderDecoratedBox#59a86 relayoutBoundary=up1
22:58:53.583 328 info flutter.tools            RenderSemanticsAnnotations#54eb2
22:58:53.583 329 info flutter.tools    RenderIndexedSemantics#ddbaa
22:58:53.583 330 info flutter.tools      RenderRepaintBoundary#d2a8a
22:58:53.583 331 info flutter.tools        RenderClipRRect#6a277
22:58:53.583 332 info flutter.tools          RenderStack#3e2d5
22:58:53.584 333 info flutter.tools            RenderDecoratedBox#b1c0e
22:58:53.584 334 info flutter.tools            RenderDecoratedBox#6825b relayoutBoundary=up1
22:58:53.584 335 info flutter.tools            RenderSemanticsAnnotations#7cd39
22:58:53.584 336 info flutter.tools    RenderIndexedSemantics#d90ce
22:58:53.584 337 info flutter.tools      RenderRepaintBoundary#98a90
22:58:53.584 338 info flutter.tools        RenderClipRRect#ec89c
22:58:53.584 339 info flutter.tools          RenderStack#79af4
22:58:53.586 340 info flutter.tools            RenderDecoratedBox#5591b
22:58:53.586 341 info flutter.tools            RenderDecoratedBox#8e709 relayoutBoundary=up1
22:58:53.586 342 info flutter.tools            RenderSemanticsAnnotations#a03ff
22:58:53.586 343 info flutter.tools    RenderIndexedSemantics#c4622
22:58:53.586 344 info flutter.tools      RenderRepaintBoundary#4f8a3
22:58:53.586 345 info flutter.tools        RenderClipRRect#46b38
22:58:53.587 346 info flutter.tools          RenderStack#bbd29
22:58:53.587 347 info flutter.tools            RenderDecoratedBox#95608
22:58:53.587 348 info flutter.tools            RenderDecoratedBox#4d9eb relayoutBoundary=up1
22:58:53.587 349 info flutter.tools            RenderSemanticsAnnotations#78f70
22:58:53.587 350 info flutter.tools  ════════════════════════════════════════════════════════════════════════════════════════════════════

The method 'visitChildren' was called on null

Sometimes, the plugin calls visitChildren on null, meaning the widget either wasn't even created yet, or was disposed.

I/flutter ( 8887): ══║ EXCEPTION CAUGHT BY SCHEDULER LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
I/flutter ( 8887): The following NoSuchMethodError was thrown during a scheduler callback:
I/flutter ( 8887): The method 'visitChildren' was called on null.
I/flutter ( 8887): Receiver: null
I/flutter ( 8887): Tried calling: visitChildren(Closure: (Element) => Null)
I/flutter ( 8887): 
I/flutter ( 8887): When the exception was thrown, this was the stack:
I/flutter ( 8887): #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
I/flutter ( 8887): #1      _AutomaticKeepAliveState._getChildElement (package:flutter_staggered_grid_view/src/widgets/automatic_keep_alive_variable_size_box.dart:128:13)
I/flutter ( 8887): #2      _AutomaticKeepAliveState._addClient.<anonymous closure> (package:flutter_staggered_grid_view/src/widgets/automatic_keep_alive_variable_size_box.dart:93:30)
I/flutter ( 8887): #3      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter ( 8887): #4      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:938:9)
I/flutter ( 8887): #5      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
I/flutter ( 8887): #6      _invoke (dart:ui/hooks.dart:145:13)
I/flutter ( 8887): #7      _drawFrame (dart:ui/hooks.dart:134:3)
I/flutter ( 8887): ════════════════════════════════════════════════════════════════════════════════════════════════════

Hi there, inkwell not working inside staggered_grid_view

Hi there, inkwell not working inside staggered_grid_view tile.
This build method
StaggeredGridView.count(
crossAxisCount: 4,
staggeredTiles: _staggeredTiles,
padding: const EdgeInsets.all(10.0),
mainAxisSpacing: 10.0,
crossAxisSpacing: 10.0,
children: _getData(snapshot),
);

With this custom widget, i put it inside the grid
Widget build(BuildContext context) {
return Material(
elevation: 10.0,
child: InkResponse(
child: Container(

And it is not showing ripple effect on tap over the widget.
Thanks by all means :)

Upgrade to AndroidX

Great package, but unfortunately not AndroidX compatible. I'll submit a PR to update.

The element type 'SliverStaggeredGrid can't be assigned to variable of type widget

Am new to flutter and i really want to use staggered list view, i tried using yours but saw these errors and i don't know how to fix them.
code causing the problem:

slivers: [
new SliverStaggeredGrid.count(
crossAxisCount: 4,
mainAxisSpacing: 4.0,
crossAxisSpacing: 4.0,
children: const [
const Text('1'),
const Text('2'),
const Text('3'),
const Text('4'),
const Text('5'),
const Text('6'),
const Text('7'),
const Text('8'),
],
staggeredTiles: const [
const StaggeredTile.count(2, 2),
const StaggeredTile.count(2, 1),
const StaggeredTile.count(2, 2),
const StaggeredTile.count(2, 1),
const StaggeredTile.count(2, 2),
const StaggeredTile.count(2, 1),
const StaggeredTile.count(2, 2),
const StaggeredTile.count(2, 1),
],
)

compiler message:
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/sliver.dart:15:13: Error: Type 'SliverWithKeepAliveWidget' not found.
compiler message: extends SliverWithKeepAliveWidget {
compiler message: ^
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/sliver.dart:92:60: Error: The parameter 'newWidget' of the method 'SliverVariableSizeBoxAdaptorElement::update' has type #lib1::SliverVariableSizeBoxAdaptorWidget, which does not match the corresponding type in the overridden method (#lib2::RenderObjectWidget).
compiler message: Change to a supertype of #lib2::RenderObjectWidget (or, for a covariant parameter, a subtype).
compiler message: void update(covariant SliverVariableSizeBoxAdaptorWidget newWidget) {
compiler message: ^
compiler message: file:///C:/Android/Flutter/flutter/packages/flutter/lib/src/widgets/framework.dart: Context: This is the overriden method ('update').
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/sliver.dart:86:42: Error: The return type of the method 'SliverVariableSizeBoxAdaptorElement::widget' is #lib1::SliverVariableSizeBoxAdaptorWidget, which does not match the return type of the overridden method (#lib2::RenderObjectWidget).
compiler message: Change to a subtype of #lib2::RenderObjectWidget.
compiler message: SliverVariableSizeBoxAdaptorWidget get widget => super.widget;
compiler message: ^
compiler message: file:///C:/Android/Flutter/flutter/packages/flutter/lib/src/widgets/framework.dart: Context: This is the overriden method ('widget').
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/sliver.dart:20:14: Error: Constructor has no named parameter with the name 'key'.
compiler message: }) : super(key: key);
compiler message: ^^^
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/sliver.dart:69:11: Error: Superclass has no method named 'debugFillProperties'.
compiler message: super.debugFillProperties(properties);
compiler message: ^^^^^^^^^^^^^^^^^^^
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/sliver.dart:83:15: Error: A value of type '#lib1::SliverVariableSizeBoxAdaptorWidget' can't be assigned to a variable of type '#lib2::RenderObjectWidget'.
compiler message: Try changing the type of the left hand side, or casting the right hand side to '#lib2::RenderObjectWidget'.
compiler message: : super(widget);
compiler message: ^
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/sliver.dart:86:58: Error: A value of type '#lib1::RenderObjectWidget' can't be assigned to a variable of type '#lib2::SliverVariableSizeBoxAdaptorWidget'.
compiler message: Try changing the type of the left hand side, or casting the right hand side to '#lib2::SliverVariableSizeBoxAdaptorWidget'.
compiler message: SliverVariableSizeBoxAdaptorWidget get widget => super.widget;
compiler message: ^
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/sliver.dart:94:18: Error: A value of type '#lib1::SliverVariableSizeBoxAdaptorWidget' can't be assigned to a variable of type '#lib2::RenderObjectWidget'.
compiler message: Try changing the type of the left hand side, or casting the right hand side to '#lib2::RenderObjectWidget'.
compiler message: super.update(newWidget);
compiler message: ^
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/sliver.dart:293:25: Error: The method 'debugValidateChild' isn't defined for the class '#lib1::RenderSliverVariableSizeBoxAdaptor'.
compiler message: Try correcting the name to the name of an existing method, or defining a method named 'debugValidateChild'.
compiler message: assert(renderObject.debugValidateChild(child));
compiler message: ^
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/sliver.dart:294:17: Error: The method '[]=' isn't defined for the class '#lib1::RenderSliverVariableSizeBoxAdaptor'.
compiler message: Try correcting the name to the name of an existing method, or defining a method named '[]='.
compiler message: renderObject[_currentlyUpdatingChildIndex] = child;
compiler message: ^
compiler message: file:///C:/Users/Mercy/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_staggered_grid_view-0.2.7/lib/src/widgets/staggered_grid_view.dart:492:16: Error: A value of type '#lib1::SliverStaggeredGrid' can't be assigned to a variable of type '#lib2::Widget'.
compiler message: Try changing the type of the left hand side, or casting the right hand side to '#lib2::Widget'.
compiler message: return new SliverStaggeredGrid(
compiler message: ^

setState not refresh StaggeredGridView

I want change the Container color when click the item. StaggeredGridView.count not work, but GridView working well. Are they different?

class DeviceTypeItem extends StatefulWidget {
  final List<DeviceTypeList> deviceTypes;
  final Function onSelected;

  DeviceTypeItem(this.deviceTypes, this.onSelected);

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

class _DeviceTypeItemState extends State<DeviceTypeItem> {
  int _selectIndex = -1;

  _DeviceTypeItemState();

  _selectDevice(int index) {
    setState(() {
      _selectIndex = index;
    });
//    onSelected(deviceTypes[_selectIndex].deviceTypeName);
  }

  _tmpData() {
    return List.generate(10, (int index) => GestureDetector(
            child: Container(
              child: Text(widget.deviceTypes[0].deviceTypeName),
              color: Color(_selectIndex == index ? ColorHelp.primaryValue : ColorHelp.white),
              padding: EdgeInsets.only(top: 4, bottom: 4),
              alignment: Alignment.center,
            ),
            onTap: ()=> _selectDevice(index),
          ));
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(12),
//      child: GridView.count(
//        crossAxisCount: 3,
//        children: _tmpData(),
//        shrinkWrap: true,
//      ),

      child: StaggeredGridView.count(
        crossAxisCount: 3,
        children: _tmpData(),
        staggeredTiles: List.generate(10, (int index) => StaggeredTile.fit(1)),
        shrinkWrap: true,
      ),
    );
  }
}

Dynamic crossAxisCount based on device orientation.

Hi,

I've been struggling with creating a grid layout that is dynamic and adjusts based on the device orientation.

Since with flutter's GridView you can't specify different heights for different tiles I thought you're library might do the trick.

My scenario is similar to Android's build in Contacts App, when creating a new contact (or editing one for that matter), in portrait mode the whole view is scroll-able with the user's avatar placed on top of the contact form in a top-to-bottom layout, when you switch to landscape mode however, the layout changes to a side-by-side layout with the avatar taking up the left half of the screen (full height and non scroll-able) and the contact form to the right fully scroll-able independent of the avatar to the left which stays fixed.

I thought setting the crossAxisCount in a StaggeredGridView.countBuilder based on the orientation will make it so that I can switch between having only 1 item in the cross axis (in portrait mode where there's a vertical layout) to having 2 items in the cross axis (in landscape mode where there's a horizontal layout).

Unfortunately, even though the StaggeredGridView.countBuilder is nested within a OrientationBuilder whenever I switch orientation, the layout doesn't seem to update as if the crossAxisCount property is not dynamic and can not be updated once set.

Is this expected behavior or am I doing something wrong? (in which case is there a workaround?)

Thanks in advance

Arabic language (right to left) not supported

adding in
1- pubspec.yaml:
flutter_localizations:
sdk: flutter
2- MaterialApp
locale: Locale("ar"),
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],

In the main example will get all the boxes on top of each other
screen shot 2018-10-20 at 8 46 27 pm

How to scroll to a specified position?

A problem I met is that I have no idea to scroll staggeredGridView to a specified position. It would be a huge work If calculate offset manually.

Thank you for replying.

Dose not support scroll in StaggeredGridView ?

             StaggeredGridView.countBuilder(
                primary: false,
                crossAxisCount: 4,
                mainAxisSpacing: 4.0,
                crossAxisSpacing: 4.0,
                staggeredTileBuilder: (index) => new StaggeredTile.fit(2),
                itemBuilder: (BuildContext context, int index) {
                  return CounselorCard(state.counselors[index]);
                },
                itemCount: state.counselors.length,
                controller: _scrollController,
              );

This is my code that using StaggeredGridView with controller parameter.
but _scrollController dosen't work.

Is it not support?
or I would like to scroll with StaggeredGridView.
have a any idea?

Best Regards.

Set dynamically crossAxisCount param

Hello, I had a problem when I set dynamically the crossAxisCount param :
When I decrease it, items have the good size but I loose items from the deleted column.
When I increase it, items have the good size but they are not put in the new created column.

One question : why number of column displayed should be multiply by 2 for crossAxisCount params ?
For example if I want two columns I need to set crossAxisCount with 4.
Thank you so much

Code sample

import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  List<int> values = <int>[2, 4, 6, 8];
  int crossAxisCount = 4;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          DropdownButton<int>(
              isDense: true,
              iconSize: 25,
              elevation: 2,
              value: crossAxisCount,
              onChanged: (int result) {
                setState(() {
                  crossAxisCount = result;
                });
              },
              items: values.map((int number) {
                return new DropdownMenuItem<int>(
                  value: number,
                  child: Padding(
                    padding: EdgeInsets.all(5),
                    child: Center(
                      child: new Text(
                        number.toString(),
                        style: TextStyle(letterSpacing: -0.5, fontSize: 20),
                      ),
                    ),
                  ),
                );
              }).toList()),
          Expanded(
            child: new StaggeredGridView.countBuilder(
              crossAxisCount: crossAxisCount,
              itemCount: 10,
              itemBuilder: (BuildContext context, int index) => new AspectRatio(
                    aspectRatio: 1,
                    child: Container(
                      margin: EdgeInsets.all(5.0),
                      color: Colors.blue,
                    ),
                  ),
              staggeredTileBuilder: (int index) => new StaggeredTile.fit(2),
              mainAxisSpacing: 2.0,
              crossAxisSpacing: 2.0,
            ),
          ),
        ],
      ),
    );
  }
}

In CustomScrollView

import 'package:flutter/material.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';


void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'StaggeredGridView Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}


class HomePage extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
  
    return _HomePage();
  }

}

class _HomePage extends State<HomePage>{

  _buildSliver(int index){
    return StaggeredGridView.count(
              shrinkWrap: true,
              crossAxisCount: 1,
              staggeredTiles: [
                StaggeredTile.count(1, 1)
              ],
              children: [
                Card(
                  color: Colors.blue,
                  child: new InkWell(
                    onTap: () {},
                    child: new Center(
                      child: new Padding(
                        padding: const EdgeInsets.all(4.0),
                        child: Text("$index"),
                      ),
                    ),
                  ),
                )
              ],
              mainAxisSpacing: 4.0,
              crossAxisSpacing: 4.0,
              padding: const EdgeInsets.all(4.0),
            ).buildSlivers(context).first;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: CustomScrollView(
        slivers: List.generate(10,(index){
          return _buildSliver(index);
        }),
      ),
    );
  }
}

You cannot continue scrolling after scrolling to the 3rd

The getter 'image' was called on null.

I'm having the issue where it says "The getter 'image' was called on null."

the issue is the exact same like this person https://stackoverflow.com/questions/53679858/the-getter-image-was-called-on-null

It is related to loading images from remote source, all images are fine. It also seems to happen everytime when I have scrolled down and start to scroll up again. Any help or input appreciated, thanks!

Edit:

seems to happen more often when I have called for more images, for instanse first I call for 20, then I call for 20 more and add them to the list with setstate and update itemcount with all the new images.

Way cool!

Not an issue, just a big thumbs up :) I switched out a SliverGridView in favor of this library to have a bit of fun on a sample app, and got something pretty dang snazzy up and running in about 30 minutes!

Wanted to say thanks for the library, really well done!

staggered_list4

Circular Progress Indicator

I use your library for infinite scrolling while it fetches data from the server.

It works awesome but I found 2 specific issues.

  1. I am unable to put a circular indicator while the data is being loaded as I cannot seem to find a footer in your library

  2. A blank space is temporarily created for the images that are fetched from the server but not rendered in the application. This may be because as the server responds, ItemCount gets immediately updated but image uris take a bit of time.

  @override
  Widget build(BuildContext context) {
    var staggeredView = new StaggeredGridView.countBuilder(
      crossAxisCount: 4,
      physics: const BouncingScrollPhysics(),
      itemCount: _total,
      itemBuilder: (BuildContext context, int index) {
        Data data = _getData(index);
        String full_name = data.name;

        if (data.path != null) {
          return new GestureDetector(
            child: new Container(
                height: 200.0,
                child: new Image.network(
                  (<----------my uri------------->),
                  fit: BoxFit.cover,
                  scale: 1.0,
                )),
            onTap: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                    builder: (context) => (ViewImage.ViewImage(
                        (<----------my path------------->),
                        data.id,
                        data.comments,
                        data.likes,
                        data.views,
                        data.username,
                        data.description,
                        data.title))),
              );
            },
          );
        }
      },
      staggeredTileBuilder: (int index) =>
          new StaggeredTile.count(2, index.isEven ? 2 : 1),
      mainAxisSpacing: 4.0,
      crossAxisSpacing: 4.0,
    );

Update

I got around doing the progress indicator thing but I strongly feel that there should be a footer support to make it even better.

My workaround is as soon as we reach the last index, compare it with the itemcount and then return a progress indicator.

itemBuilder: (BuildContext context, int index) {
        if (index == data.length - 1) {
          return new Center(
              child: new SpinKitThreeBounce(
            color: Colors.green[300],
            size: 20.0,
          ));
        } else {
          //Image here
       }
}

I also fixed the temporary blank space that was being created. Just pass the correct itemCount. Do not keep it null else it will become an infinite grid

Low FPS when handling large arrays of items

Hey,

I am displaying an array of 100 items each containing around 10 widgets using the builder (context, index), and I have very low FPS when scrolling in the middle of the grid.

Can you please look into this ASAP?

Thanks in advance!

Exception when using SliverStaggeredGrid

Code causing the issue:

CustomScrollView(
  controller: controller,
  slivers: <Widget>[
    SliverToBoxAdapter(
      child: widget.top ?? Container(),
    ),
    SliverStaggeredGrid.countBuilder(
      crossAxisCount: 2,
      staggeredTileBuilder: (_) => StaggeredTile.fit(1),
      itemBuilder: (context, index) => ProductGridItem(product: products[index],),
      itemCount: products.length,
    ),
    SliverToBoxAdapter(
      child: StreamBuilder<DataStatus>(
        stream: productListBloc.dataStatus,
        builder: (context, snapshot) => _buildStatusIndicator(snapshot?.data),
      ),
    )
  ],
);

Full stack trace:

I/flutter (17730): ══║ EXCEPTION CAUGHT BY RENDERING LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
I/flutter (17730): The following assertion was thrown during performLayout():
I/flutter (17730): StatefulWidget.createState must return a subtype of State<AutomaticKeepAliveVariableSizeBox>
I/flutter (17730): The createState function for AutomaticKeepAliveVariableSizeBox returned a state of type
I/flutter (17730): _AutomaticKeepAliveState, which is not a subtype of State<AutomaticKeepAliveVariableSizeBox>,
I/flutter (17730): violating the contract for createState.
I/flutter (17730): 
I/flutter (17730): When the exception was thrown, this was the stack:
I/flutter (17730): #0      new StatefulElement.<anonymous closure> (package:flutter/src/widgets/framework.dart:3713:9)
I/flutter (17730): #1      new StatefulElement (package:flutter/src/widgets/framework.dart:3721:6)
I/flutter (17730): #2      StatefulWidget.createElement (package:flutter/src/widgets/framework.dart:789:42)
I/flutter (17730): #3      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2905:40)
I/flutter (17730): #4      Element.updateChild (package:flutter/src/widgets/framework.dart:2710:12)
I/flutter (17730): #5      SliverVariableSizeBoxAdaptorElement.updateChild (package:flutter_staggered_grid_view/src/widgets/sliver.dart:377:36)
I/flutter (17730): #6      SliverVariableSizeBoxAdaptorElement.createChild.<anonymous closure> (package:flutter_staggered_grid_view/src/widgets/sliver.dart:361:20)
I/flutter (17730): #7      BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2222:19)
I/flutter (17730): #8      SliverVariableSizeBoxAdaptorElement.createChild (package:flutter_staggered_grid_view/src/widgets/sliver.dart:357:11)
I/flutter (17730): #9      RenderSliverVariableSizeBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter_staggered_grid_view/src/rendering/sliver_variable_size_box_adaptor.dart:240:23)
I/flutter (17730): #10     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1666:58)
I/flutter (17730): #11     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:740:15)
I/flutter (17730): #12     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1666:13)
I/flutter (17730): #13     RenderSliverVariableSizeBoxAdaptor._createOrObtainChild (package:flutter_staggered_grid_view/src/rendering/sliver_variable_size_box_adaptor.dart:228:5)
I/flutter (17730): #14     RenderSliverVariableSizeBoxAdaptor.addAndLayoutChild (package:flutter_staggered_grid_view/src/rendering/sliver_variable_size_box_adaptor.dart:305:5)
I/flutter (17730): #15     RenderSliverStaggeredGrid.performLayout (package:flutter_staggered_grid_view/src/rendering/sliver_staggered_grid.dart:317:17)
I/flutter (17730): #16     RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter (17730): #17     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:336:13)
I/flutter (17730): #18     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1131:12)
I/flutter (17730): #19     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1049:20)
I/flutter (17730): #20     RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter (17730): #21     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter (17730): #22     RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter (17730): #23     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter (17730): #24     RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter (17730): #25     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter (17730): #26     RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter (17730): #27     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter (17730): #28     RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter (17730): #29     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter (17730): #30     RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter (17730): #31     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter (17730): #32     RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter (17730): #33     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter (17730): #34     RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter (17730): #35     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter (17730): #36     RenderObject.layout (package:flutter/src/rendering/object.dart:1570:7)
I/flutter (17730): #37     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:141:11)
I/flutter (17730): #38     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:399:7)
I/flutter (17730): #39     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:211:7)
I/flutter (17730): #40     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:355:14)
I/flutter (17730): #41     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1445:7)
I/flutter (17730): #42     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:709:18)
I/flutter (17730): #43     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:270:19)
I/flutter (17730): #44     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:627:13)
I/flutter (17730): #45     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5)
I/flutter (17730): #46     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter (17730): #47     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter (17730): #48     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
I/flutter (17730): #49     _invoke (dart:ui/hooks.dart:120:13)
I/flutter (17730): #50     _drawFrame (dart:ui/hooks.dart:109:3)
I/flutter (17730): 
I/flutter (17730): The following RenderObject was being processed when the exception was fired:
I/flutter (17730):   RenderSliverStaggeredGrid#6ff68 relayoutBoundary=up1 NEEDS-LAYOUT NEEDS-PAINT
I/flutter (17730):   creator: SliverStaggeredGrid ← Viewport ← _ScrollableScope ← IgnorePointer-[GlobalKey#0c820] ←
I/flutter (17730):   Semantics ← Listener ← _GestureSemantics ←
I/flutter (17730):   RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#32677] ←
I/flutter (17730):   _ExcludableScrollSemantics-[GlobalKey#b83f0] ← RepaintBoundary ← CustomPaint ← RepaintBoundary ← β‹―
I/flutter (17730):   parentData: paintOffset=Offset(0.0, 0.0) (can use size)
I/flutter (17730):   constraints: SliverConstraints(AxisDirection.down, GrowthDirection.forward, ScrollDirection.idle,
I/flutter (17730):   scrollOffset: 0.0, remainingPaintExtent: 560.0, crossAxisExtent: 360.0, crossAxisDirection:
I/flutter (17730):   AxisDirection.right, viewportMainAxisExtent: 560.0, remainingCacheExtent: 810.0 cacheOrigin: 0.0 )
I/flutter (17730):   geometry: null
I/flutter (17730):   no children current live
I/flutter (17730): This RenderObject has no descendants.
I/flutter (17730): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (17730): Another exception was thrown: NoSuchMethodError: The method 'debugAssertIsValid' was called on null.
I/flutter (17730): Another exception was thrown: NoSuchMethodError: The getter 'visible' was called on null.

Builder constructors creates all the childs without any scroll

import 'package:flutter/material.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:transparent_image/transparent_image.dart';

void main() => runApp(MaterialApp(home: LayoutTest()));

class LayoutTest extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return _buildContent1();
  }

  Widget _buildContent1(){
    return StaggeredGridView.countBuilder(
      crossAxisCount: 2,
      itemCount: 1000,
      itemBuilder: (context, index){
        print('build $index');
        return Container();
      },
      staggeredTileBuilder: (index) => StaggeredTile.fit(1),
    );
  }

  Widget _buildContent2(){
    return CustomScrollView(
      slivers: <Widget>[
        SliverGrid(
            delegate: SliverChildBuilderDelegate((context, index){
              print('build $index');
              return Container();
            }, childCount: 1000),
            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2)
        )
      ],
    );
  }
}

_buildContent1() uses your library and it will creates all 1000 childs without any scroll if i pass width and height to container then it will create less childs, _buildContent2() uses flutter SliverGrid and it only creates 10 childs on my mobile. I tested your library with rest service and since i don't have width and height of image it will loads all the network images outside of viewport without any scroll.
Version: flutter_staggered_grid_view: ^0.2.5

keepAlive

when scroll to another page,and back ,but the child auto scroll to top ,like below

new StaggeredGridView.count( crossAxisCount: 3, mainAxisSpacing: 4.0, crossAxisSpacing: 4.0, padding: const EdgeInsets.all(4.0), addAutomaticKeepAlives: true, addRepaintBoundaries: true, scrollDirection: Axis.vertical, children: [] )

please tell me how do we do ?

thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.