A grid that supports both dragging and tapping to select its items

Overview

drag_select_grid_view

Pub package CI workflow Awesome style: effective dart

A grid that supports both dragging and tapping to select its items.

Selecting

Basic usage

DragSelectGridView constructor is very similar to GridView.builder, so you should take your time to understand the latter before diving into this library.

Once you are familiar with GridView.builder, probably the only additional piece of information you'll need is DragSelectGridViewController. With it, you're able to know which indexes are selected.

Check this example:

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final controller = DragSelectGridViewController();

  @override
  void initState() {
    super.initState();
    controller.addListener(scheduleRebuild);
  }

  @override
  void dispose() {
    controller.removeListener(scheduleRebuild);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: SelectionAppBar(
        selection: controller.value,
      ),
      body: DragSelectGridView(
        gridController: controller,
        itemCount: 20,
        itemBuilder: (context, index, selected) {
          return SelectableItem(
            index: index,
            selected: selected,
          );
        },
        gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
          maxCrossAxisExtent: 80,
        ),
      ),
    );
  }

  void scheduleRebuild() => setState(() {});
}

As you may have noticed in the code above, DragSelectGridView must be used along two other widgets in order to provide a proper user experience. In the example, they are:

  • SelectableItem: A selectable widget, which is going to visually indicate whether the item is selected or not.

  • SelectionAppBar: A custom AppBar, which shows the amount of selected items and an option to unselect them.

The example project provides some samples of those widgets. I won't add them to the library, since they are unrelated to the grid itself, but feel free to copy them into your project, as long as you respect the license terms.

Advanced usage

You can use the setter DragSelectGridViewController.value to directly change the selection (I'm not quite sure why you'd need this, but I don't ask questions).

It allows this sort of interaction:

Directly changing selection

You can check the code here.

There are some other minor settings you can do to make DragSelectGridView fit your needs, like DragSelectGridView.autoScrollHotspotHeight and DragSelectGridView.unselectOnWillPop. Those features are well documented, so I'll let you take your discovery time.

Hopefully, this is everything you need to know to use this library.

Thanks ❤️

Once upon a time I asked at Flutter Study Group how to implement a specific feature that I intended to add to this library. Simon Lightfoot offered to help me and effortlessly implemented what eventually became part of this library (check this gist). A big thanks to him.

I took a lot of inspiration from Aidan Follestad's Android implementation, drag-select-recyclerview. Also a big thanks to him.

Comments
  • Scrolling not working

    Scrolling not working

    hello, you have done a perfect work for sliding back and onTap to select.

    i think there a little issue now, we cant scroll vertically if the items is more than the phone screen.

    opened by gbbest15 6
  • how can i set border radius for gridview?

    how can i set border radius for gridview?

    for GridView of flutter feature i can use ClipRRect or Card to make border radius for around items, but in this library it doesn't work

    for example this code work fine with border radius

    child: Card(
      elevation: 0.0,
      clipBehavior: Clip.antiAliasWithSaveLayer,
      shape: const RoundedRectangleBorder(
          borderRadius: BorderRadius.only(
            topLeft: Radius.circular( 8.0 ),
            topRight: Radius.circular( 8.0 ),
          ) ),
      child: StreamBuilder<List<MediaModel>>(
          stream: _globalBloc.storageMediaBloc.imagesMedia$,
          builder: (context, snapshot) {
            ...
            return GridView.builder(
              controller: scrollController,
              cacheExtent: 100,
              gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
    
    question 
    opened by pishguy 6
  • swipe back on iOS and onTap to select

    swipe back on iOS and onTap to select

    1. here i have two issue with the plugin, immediately i apply the plugin the swipe back to the previous page did not work on the page
    2. my onTap to select is not working until i long press any first item before the ontap to select will start working
    bug 
    opened by gbbest15 5
  • how to Get Selected Values instead of indexes

    how to Get Selected Values instead of indexes

    Hey I'm able to get Selected index by calling controller.value. but instead of indexes I want the values which the user selected.. how to do that... Thanks

    question 
    opened by rockstarvibu 5
  • detect long press end

    detect long press end

    Is it possible to detect when a drag is completed? I tried adding a GestureDetector as the parent widget but it just seems to break the DragSelectGridView widget.

    opened by christopher-inegbedion 4
  • Single click selection

    Single click selection

    Hi Hugo,

    I had the need to enable selection of one or more items via single click so I forked your project. In case you want to merge this to master you can accept this PR.

    opened by denizhoxha 4
  • Need to pop twice after selecting

    Need to pop twice after selecting

    Whenever a user selects anything in de grid, I need to pop twice to go to the previous page. The first time, the selection dissapears, the second time we actually go to the previous page.

    When selection doesn't get changed, pop works the first time.

    opened by vincentderidder 2
  • Item selection when list is empty

    Item selection when list is empty

    Hi!

    Is there a way to enable selecting items if selectedIndexes list is empty?

    It would be great if we have controls of this isSelecting setting.

    /// Whether any item got selected.
      bool get isSelecting => selectedIndexes.isNotEmpty;
    
    opened by NemanjaLugi 1
  • DragSelectGridViewController disposed prematurely

    DragSelectGridViewController disposed prematurely

    Consider the following code :

    import 'package:flutter/services.dart';
    import 'package:flutter/material.dart';
    import 'package:drag_select_grid_view/drag_select_grid_view.dart';
    
    import 'selectable_item.dart';
    import 'selection_app_bar.dart';
    
    void main() {
      SystemChrome.setSystemUIOverlayStyle(
        SystemUiOverlayStyle(statusBarColor: Colors.grey[200]),
      );
      runApp(
        MaterialApp(
          home: MyApp(),
          debugShowCheckedModeBanner: false,
          theme: ThemeData(
            primaryColor: Colors.white,
            accentColor: Colors.white,
            scaffoldBackgroundColor: Colors.white,
            appBarTheme: const AppBarTheme(elevation: 2),
          ),
        ),
      );
    }
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      final controller = DragSelectGridViewController();
    
      @override
      void initState() {
        super.initState();
        controller.addListener(scheduleRebuild);
      }
    
      @override
      void dispose() {
        controller.removeListener(scheduleRebuild);
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: SelectionAppBar(
            selection: controller.selection,
            title: const Text('Grid Example'),
          ),
          body: PageView(
            children: [
              Column(
                children: [
                  Center(
                    child: Text('first page'),
                  )
                ],
              ),
              DragSelectGridView(
                gridController: controller,
                padding: const EdgeInsets.all(8),
                itemCount: 90,
                itemBuilder: (context, index, selected) {
                  return SelectableItem(
                    index: index,
                    color: Colors.blue,
                    selected: selected,
                  );
                },
                gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
                  maxCrossAxisExtent: 150,
                  crossAxisSpacing: 8,
                  mainAxisSpacing: 8,
                ),
              ),
            ],
          ),
        );
      }
    
      void scheduleRebuild() => setState(() {});
    }
    
    

    It gave the following error when I switched between Page 1 to Page 2 to Page 1 to Page 2

    I/flutter ( 3079): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
    I/flutter ( 3079): The following assertion was thrown building NotificationListener<KeepAliveNotification>:
    I/flutter ( 3079): A DragSelectGridViewController was used after being disposed.
    I/flutter ( 3079): Once you have called dispose() on a DragSelectGridViewController, it can no longer be used.
    I/flutter ( 3079): 
    I/flutter ( 3079): The relevant error-causing widget was:
    I/flutter ( 3079):   PageView
    I/flutter ( 3079):   file:///home/vin-fandemand/Downloads/drag_select_grid_view-master/example/lib/example.dart:53:13
    I/flutter ( 3079): 
    I/flutter ( 3079): When the exception was thrown, this was the stack:
    I/flutter ( 3079): #0      ChangeNotifier._debugAssertNotDisposed.<anonymous closure> (package:flutter/src/foundation/change_notifier.dart:108:9)
    I/flutter ( 3079): #1      ChangeNotifier._debugAssertNotDisposed (package:flutter/src/foundation/change_notifier.dart:114:6)
    I/flutter ( 3079): #2      ChangeNotifier.addListener (package:flutter/src/foundation/change_notifier.dart:144:12)
    I/flutter ( 3079): #3      DragSelectGridViewState.initState (package:drag_select_grid_view/src/drag_select_grid_view/drag_select_grid_view.dart:219:22)
    I/flutter ( 3079): #4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4684:58)
    I/flutter ( 3079): #5      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4520:5)
    I/flutter ( 3079): ...     Normal element mounting (33 frames)
    I/flutter ( 3079): #38     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3490:14)
    I/flutter ( 3079): #39     Element.updateChild (package:flutter/src/widgets/framework.dart:3258:18)
    I/flutter ( 3079): #40     SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1164:36)
    I/flutter ( 3079): #41     SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1149:20)
    I/flutter ( 3079): #42     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2620:19)
    I/flutter ( 3079): #43     SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1142:11)
    I/flutter ( 3079): #44     RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:356:23)
    I/flutter ( 3079): #45     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1868:58)
    I/flutter ( 3079): #46     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:920:15)
    I/flutter ( 3079): #47     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1868:13)
    I/flutter ( 3079): #48     RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:345:5)
    I/flutter ( 3079): #49     RenderSliverMultiBoxAdaptor.insertAndLayoutChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:491:5)
    I/flutter ( 3079): #50     RenderSliverFixedExtentBoxAdaptor.performLayout (package:flutter/src/rendering/sliver_fixed_extent_list.dart:258:17)
    I/flutter ( 3079): #51     RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
    I/flutter ( 3079): #52     RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:137:11)
    I/flutter ( 3079): #53     _RenderSliverFractionalPadding.performLayout (package:flutter/src/widgets/sliver_fill.dart:170:11)
    I/flutter ( 3079): #54     RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
    I/flutter ( 3079): #55     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:471:13)
    I/flutter ( 3079): #56     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1465:12)
    I/flutter ( 3079): #57     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1374:20)
    I/flutter ( 3079): #58     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1632:7)
    I/flutter ( 3079): #59     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:889:18)
    I/flutter ( 3079): #60     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:404:19)
    I/flutter ( 3079): #61     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:867:13)
    I/flutter ( 3079): #62     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
    I/flutter ( 3079): #63     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
    I/flutter ( 3079): #64     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1056:9)
    I/flutter ( 3079): #65     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:972:5)
    I/flutter ( 3079): #69     _invoke (dart:ui/hooks.dart:253:10)
    I/flutter ( 3079): #70     _drawFrame (dart:ui/hooks.dart:211:3)
    I/flutter ( 3079): (elided 3 frames from dart:async)
    I/flutter ( 3079): 
    I/flutter ( 3079): ════════════════════════════════════════════════════════════════════════════════════════════════════
    I/flutter ( 3079): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 265 pos 16: 'child == null || indexOf(child) > index': is not true.
    

    Looks like the controller is disposed but not initiated again. The state on the appbar is still retained. Can you please help ?

    bug 
    opened by vin-fandemand 1
  • null-aware operation '!'

    null-aware operation '!'

    ./../../.pub-cache/hosted/pub.dartlang.org/drag_select_grid_view-0.5.1/lib/src/auto_scroll/auto_scroller_mixin.dart:46:20: Warning: Operand of null-aware operation '!' has type 'WidgetsBinding' which
    excludes null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../development/flutter/packages/flutter/lib/src/widgets/binding.dart').
        WidgetsBinding.instance!.addPostFrameCallback(
    

    The easiest would be to remove the null-aware operator and drop support for flutter < 3.0.0. See https://docs.flutter.dev/development/tools/sdk/release-notes/release-notes-3.0.0#if-you-see-warnings-about-bindings

    opened by cbenhagen 0
  • Inkwell and Gesturedetector is not working under the grid view

    Inkwell and Gesturedetector is not working under the grid view

    i am trying to perform inkwell or Gesturedetector but not working...... let me give a sample code.

    i want to perform the one i comment

    Expanded(
                        child: DragSelectGridView(
                            shrinkWrap: false,
                            scrollController: scrollcontrol,
                            triggerSelectionOnTap: true,
                            gridController: controller,
                            itemCount: interestIn.length,
                            gridDelegate:
                                new SliverGridDelegateWithFixedCrossAxisCount(
                                    crossAxisCount: 3, childAspectRatio: 0.9),
                            itemBuilder:
                                (BuildContext context, int index, isSelected) {
                              return Stack(
                                children: [
                                  Padding(
                                    padding: const EdgeInsets.all(4.0),
                                    child: InkWell(
                                      onTap: () {
                                        // if (isSelected ||
                                        //     stateList
                                        //         .contains(interestIn[index].name)) {
                                        //   stateList.remove(interestIn[index].name);
                                        //   setState(() {});
                                        // }
                                      },
                                      child: Container(
                                        decoration: BoxDecoration(
                                          borderRadius: BorderRadius.only(
                                            topRight: Radius.circular(40),
                                            bottomLeft: Radius.circular(40),
                                          ),
                                          image: DecorationImage(
                                            image:
                                                AssetImage(interestIn[index].url),
                                            fit: BoxFit.fill,
                                            colorFilter: ColorFilter.mode(
                                                Colors.red, BlendMode.darken),
                                          ),
                                        ),
                                        height: 140,
                                        width: 200,
                                        child: Padding(
                                          padding: const EdgeInsets.only(
                                              left: 25.0, bottom: 10),
                                          child: Center(
                                            child: Align(
                                              alignment: Alignment.bottomLeft,
                                              child: Text(
                                                interestIn[index].name,
                                                style: TextStyle(
                                                  fontSize: 20,
                                                  color: Colors.white,
                                                  fontWeight: FontWeight.w500,
                                                ),
                                              ),
                                            ),
                                          ),
                                        ),
                                      ),
                                    ),
                                  ),
                                  isSelected ||
                                          stateList.contains(interestIn[index].name)
                                      ? Positioned(
                                          height: 60,
                                          left: 90,
                                          child: Container(
                                            height: 30,
                                            width: 30,
                                            decoration: BoxDecoration(
                                              shape: BoxShape.circle,
                                              color: Colors.white,
                                            ),
                                            child: Center(
                                              child: Icon(
                                                Icons.check_outlined,
                                                size: 18,
                                                color: Colors.red,
                                              ),
                                            ),
                                          ),
                                        )
                                      : Container()
                                ],
                              );
                            }),
                      )
    
    opened by gbbest15 0
  • about pop twice after selecting cause some problems

    about pop twice after selecting cause some problems

    HI, I am new to flutter and have some question about the pop twice after selecting. I know when select the grid with longpress will in drag_select mode, but there's not have a onTap to switch on it. To solve it I use another GestureDetector with onTap to separated those two function and it work fine on select grid.

    onTap like this GestureDetector( onTap: () { widget.selectedImages(widget.url); debugPrint(" ${widget.isSelected}"); debugPrint(" ${scaleAnimation.value}"); }, ),

    But because onTap don't need to pop twice, when I use cancel button, I can't know which is onTap, which is longpress.

    1. How do I know the drag_select mode is trigger or not ? Beacause If I knew, I can pop When I want.

    And how to I return itembuilder status to the father layer?

    1. Another question is about scroll, I use SmartRefresher now, and if I add a DragSelectGridView in SmartRefresher child, the Refresher will not work. And if I add nerverScrollPhysis on DragSelectGridView, it can refresh widget but can't scroll the grid.

    If you read this, I will appreciate you. Thank you for your reading.

    opened by mnba3223 0
  • is there a way to enable onTap, will deselect all and tap the item that is newly tapped?

    is there a way to enable onTap, will deselect all and tap the item that is newly tapped?

    First of all, i'm loving this library. everything work nicely except I wish i could set a mode where I tap to deselect all others that is currently selected, and select the one that is tapped

    if i used the advanced mode "triggerSelectionOnTap" to true, tapping non selected item will select it, and tapping already selected will unselect it,

    I wish there is a mode where it is more natural feel like in windows/linux/mac where tapping the unselected ones will deselect all and select the new one only.

    feature-request 
    opened by vontdeux 0
  • Hit test warnings in widget tests

    Hit test warnings in widget tests

    Newer Flutter versions will warn if a widget test seems to be hitting the wrong thing. Check https://github.com/flutter/flutter/pull/74798 for some more information.

    00:10 +69: /Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart: Drag-select-grid-view integration tests. Select by pressing. When an empty space of DragSelectGridView is long-pressed, then `isDragging` doesn't change.
    
    Warning: A call to longPress() with finder "exactly one widget with key [<'empty-space'>] (ignoring offstage widgets): SizedBox-[<'empty-space'>](width: 10.0, height: Infinity, renderObject: RenderConstrainedBox#b6192 relayoutBoundary=up1)" derived an Offset (Offset(5.0, 300.0)) that would not hit test on the specified widget.
    Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
    The finder corresponds to this RenderBox: RenderConstrainedBox#b6192 relayoutBoundary=up1
    The hit test result at that offset is: HitTestResult(RenderMouseRegion#848a7@Offset(5.0, 300.0), RenderSemanticsAnnotations#925ed@Offset(5.0, 300.0), RenderPointerListener#c9fd1@Offset(5.0, 300.0), RenderSemanticsGestureHandler#7f1f9@Offset(5.0, 300.0), RenderExcludeSemantics#7c8df@Offset(5.0, 300.0), RenderBlockSemantics#bed3d@Offset(5.0, 300.0), RenderIgnorePointer#2dcfc@Offset(5.0, 300.0), _RenderTheatre#f40d3@Offset(5.0, 300.0), RenderSemanticsAnnotations#26f80@Offset(5.0, 300.0), RenderAbsorbPointer#3945f@Offset(5.0, 300.0), RenderPointerListener#14e63@Offset(5.0, 300.0), RenderCustomPaint#918ce@Offset(5.0, 300.0), RenderSemanticsAnnotations#4ab50@Offset(5.0, 300.0), RenderSemanticsAnnotations#14e56@Offset(5.0, 300.0), RenderSemanticsAnnotations#9d811@Offset(5.0, 300.0), HitTestEntry#4bc69(RenderView#44ceb), HitTestEntry#077b7(<AutomatedTestWidgetsFlutterBinding>))
    #0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:953:25)
    #1      WidgetController.getCenter (package:flutter_test/src/controller.dart:836:12)
    #2      WidgetController.longPress (package:flutter_test/src/controller.dart:314:24)
    #3      main.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart:199:24)
    <asynchronous suspension>
    #4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
    <asynchronous suspension>
    To silence this warning, pass "warnIfMissed: false" to "longPress()".
    To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.
    
    00:10 +73: /Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart: Drag-select-grid-view integration tests. Select by pressing. Given that the grid has 4 columns and 3 lines, and that the first item of the grid is UNSELECTED, when the first item of the grid is long-pressed, then the item gets selected, and we get notified about selection change.
    
    Warning: A call to longPress() with finder "exactly one widget with key [<'grid-item-0'>] (ignoring offstage widgets): Container-[<'grid-item-0'>]" derived an Offset (Offset(108.8, 98.8)) that would not hit test on the specified widget.
    Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
    The finder corresponds to this RenderBox: RenderLimitedBox#8ccd1
    The hit test result at that offset is: HitTestResult(RenderPointerListener#b5f4a@Offset(98.8, 98.8), RenderSemanticsGestureHandler#bf6fd@Offset(98.8, 98.8), RenderPointerListener#396f3@Offset(98.8, 98.8), _RenderScrollSemantics#82530@Offset(98.8, 98.8), RenderRepaintBoundary#45d23@Offset(98.8, 98.8), RenderCustomPaint#120b5@Offset(98.8, 98.8), RenderRepaintBoundary#420d1@Offset(98.8, 98.8), RenderIgnorePointer#2c436@Offset(98.8, 98.8), RenderPointerListener#67660@Offset(98.8, 98.8), RenderSemanticsGestureHandler#2692f@Offset(98.8, 98.8), RenderFlex#d0bcb@Offset(108.8, 98.8), RenderSemanticsAnnotations#67e82@Offset(108.8, 98.8), RenderRepaintBoundary#8e855@Offset(108.8, 98.8), RenderIgnorePointer#30d46@Offset(108.8, 98.8), RenderAnimatedOpacity#57fa0@Offset(108.8, 98.8), RenderRepaintBoundary#7670a@Offset(108.8, 98.8), RenderSemanticsAnnotations#70ff5@Offset(108.8, 98.8), RenderOffstage#621fb@Offset(108.8, 98.8), RenderSemanticsAnnotations#08630@Offset(108.8, 98.8), _RenderTheatre#94e61@Offset(108.8, 98.8), RenderSemanticsAnnotations#6d727@Offset(108.8, 98.8), RenderAbsorbPointer#2a9f1@Offset(108.8, 98.8), RenderPointerListener#d3e05@Offset(108.8, 98.8), RenderCustomPaint#dd1e1@Offset(108.8, 98.8), RenderSemanticsAnnotations#51520@Offset(108.8, 98.8), RenderSemanticsAnnotations#5a91c@Offset(108.8, 98.8), RenderSemanticsAnnotations#2f679@Offset(108.8, 98.8), HitTestEntry#5bd99(RenderView#44ceb), HitTestEntry#18a49(<AutomatedTestWidgetsFlutterBinding>))
    #0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:953:25)
    #1      WidgetController.getCenter (package:flutter_test/src/controller.dart:836:12)
    #2      WidgetController.longPress (package:flutter_test/src/controller.dart:314:24)
    #3      main.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart:229:24)
    <asynchronous suspension>
    #4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
    <asynchronous suspension>
    To silence this warning, pass "warnIfMissed: false" to "longPress()".
    To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.
    
    00:10 +77: /Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart: Drag-select-grid-view integration tests. Select by pressing. Given that the grid has 4 columns and 3 lines, and that the first item of the grid is UNSELECTED, when the first item of the grid is tapped, then the item stills UNSELECTED.
    
    Warning: A call to tap() with finder "exactly one widget with key [<'grid-item-0'>] (ignoring offstage widgets): Container-[<'grid-item-0'>]" derived an Offset (Offset(108.8, 98.8)) that would not hit test on the specified widget.
    Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
    The finder corresponds to this RenderBox: RenderLimitedBox#a5881
    The hit test result at that offset is: HitTestResult(RenderPointerListener#b2a6f@Offset(98.8, 98.8), RenderSemanticsGestureHandler#d3a40@Offset(98.8, 98.8), RenderPointerListener#89e16@Offset(98.8, 98.8), _RenderScrollSemantics#9dcde@Offset(98.8, 98.8), RenderRepaintBoundary#7cc97@Offset(98.8, 98.8), RenderCustomPaint#8357d@Offset(98.8, 98.8), RenderRepaintBoundary#329f7@Offset(98.8, 98.8), RenderIgnorePointer#7e175@Offset(98.8, 98.8), RenderPointerListener#27493@Offset(98.8, 98.8), RenderSemanticsGestureHandler#2c444@Offset(98.8, 98.8), RenderFlex#90765@Offset(108.8, 98.8), RenderSemanticsAnnotations#78283@Offset(108.8, 98.8), RenderRepaintBoundary#82129@Offset(108.8, 98.8), RenderIgnorePointer#14456@Offset(108.8, 98.8), RenderAnimatedOpacity#b7e33@Offset(108.8, 98.8), RenderRepaintBoundary#aa140@Offset(108.8, 98.8), RenderSemanticsAnnotations#d95eb@Offset(108.8, 98.8), RenderOffstage#2b82d@Offset(108.8, 98.8), RenderSemanticsAnnotations#8e0ec@Offset(108.8, 98.8), _RenderTheatre#993d9@Offset(108.8, 98.8), RenderSemanticsAnnotations#9908c@Offset(108.8, 98.8), RenderAbsorbPointer#a87bc@Offset(108.8, 98.8), RenderPointerListener#bef85@Offset(108.8, 98.8), RenderCustomPaint#fdac0@Offset(108.8, 98.8), RenderSemanticsAnnotations#abfc0@Offset(108.8, 98.8), RenderSemanticsAnnotations#c92a0@Offset(108.8, 98.8), RenderSemanticsAnnotations#b464e@Offset(108.8, 98.8), HitTestEntry#7e409(RenderView#44ceb), HitTestEntry#0c92f(<AutomatedTestWidgetsFlutterBinding>))
    #0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:953:25)
    #1      WidgetController.getCenter (package:flutter_test/src/controller.dart:836:12)
    #2      WidgetController.tap (package:flutter_test/src/controller.dart:271:18)
    #3      main.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart:257:24)
    <asynchronous suspension>
    #4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
    <asynchronous suspension>
    To silence this warning, pass "warnIfMissed: false" to "tap()".
    To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.
    
    00:10 +80: /Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart: Drag-select-grid-view integration tests. Select by pressing. Given that the grid has 4 columns and 3 lines, and that the first item of the grid is selected, when the first item is long-pressed, then the item stills selected.
    
    Warning: A call to longPress() with finder "exactly one widget with key [<'grid-item-0'>] (ignoring offstage widgets): Container-[<'grid-item-0'>]" derived an Offset (Offset(108.8, 98.8)) that would not hit test on the specified widget.
    Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
    The finder corresponds to this RenderBox: RenderLimitedBox#69808
    The hit test result at that offset is: HitTestResult(RenderPointerListener#bd5f3@Offset(98.8, 98.8), RenderSemanticsGestureHandler#48946@Offset(98.8, 98.8), RenderPointerListener#64567@Offset(98.8, 98.8), _RenderScrollSemantics#8f981@Offset(98.8, 98.8), RenderRepaintBoundary#e9aa5@Offset(98.8, 98.8), RenderCustomPaint#036be@Offset(98.8, 98.8), RenderRepaintBoundary#a85da@Offset(98.8, 98.8), RenderIgnorePointer#00cad@Offset(98.8, 98.8), RenderPointerListener#a5962@Offset(98.8, 98.8), RenderSemanticsGestureHandler#92c7c@Offset(98.8, 98.8), RenderFlex#42321@Offset(108.8, 98.8), RenderSemanticsAnnotations#65477@Offset(108.8, 98.8), RenderRepaintBoundary#1787f@Offset(108.8, 98.8), RenderIgnorePointer#4c453@Offset(108.8, 98.8), RenderAnimatedOpacity#ff206@Offset(108.8, 98.8), RenderRepaintBoundary#09874@Offset(108.8, 98.8), RenderSemanticsAnnotations#44a2d@Offset(108.8, 98.8), RenderOffstage#467a8@Offset(108.8, 98.8), RenderSemanticsAnnotations#7bb9a@Offset(108.8, 98.8), _RenderTheatre#224d5@Offset(108.8, 98.8), RenderSemanticsAnnotations#1d1bf@Offset(108.8, 98.8), RenderAbsorbPointer#9c5be@Offset(108.8, 98.8), RenderPointerListener#73db9@Offset(108.8, 98.8), RenderCustomPaint#917be@Offset(108.8, 98.8), RenderSemanticsAnnotations#29d6f@Offset(108.8, 98.8), RenderSemanticsAnnotations#5e748@Offset(108.8, 98.8), RenderSemanticsAnnotations#a64ae@Offset(108.8, 98.8), HitTestEntry#23346(RenderView#44ceb), HitTestEntry#44b5c(<AutomatedTestWidgetsFlutterBinding>))
    #0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:953:25)
    #1      WidgetController.getCenter (package:flutter_test/src/controller.dart:836:12)
    #2      WidgetController.longPress (package:flutter_test/src/controller.dart:314:24)
    #3      main.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart:279:24)
    <asynchronous suspension>
    #4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
    <asynchronous suspension>
    To silence this warning, pass "warnIfMissed: false" to "longPress()".
    To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.
    
    00:10 +82: /Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart: Drag-select-grid-view integration tests. Select by pressing. Given that the grid has 4 columns and 3 lines, and that the first item of the grid is selected, when the first item is long-pressed, then the item stills selected.
    
    Warning: A call to longPress() with finder "exactly one widget with key [<'grid-item-0'>] (ignoring offstage widgets): Container-[<'grid-item-0'>]" derived an Offset (Offset(108.8, 98.8)) that would not hit test on the specified widget.
    Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
    The finder corresponds to this RenderBox: RenderLimitedBox#69808
    The hit test result at that offset is: HitTestResult(RenderPointerListener#bd5f3@Offset(98.8, 98.8), RenderSemanticsGestureHandler#48946@Offset(98.8, 98.8), RenderPointerListener#64567@Offset(98.8, 98.8), _RenderScrollSemantics#8f981@Offset(98.8, 98.8), RenderRepaintBoundary#e9aa5@Offset(98.8, 98.8), RenderCustomPaint#036be@Offset(98.8, 98.8), RenderRepaintBoundary#a85da@Offset(98.8, 98.8), RenderIgnorePointer#00cad@Offset(98.8, 98.8), RenderPointerListener#a5962@Offset(98.8, 98.8), RenderSemanticsGestureHandler#92c7c@Offset(98.8, 98.8), RenderFlex#42321@Offset(108.8, 98.8), RenderSemanticsAnnotations#65477@Offset(108.8, 98.8), RenderRepaintBoundary#1787f@Offset(108.8, 98.8), RenderIgnorePointer#4c453@Offset(108.8, 98.8), RenderAnimatedOpacity#ff206@Offset(108.8, 98.8), RenderRepaintBoundary#09874@Offset(108.8, 98.8), RenderSemanticsAnnotations#44a2d@Offset(108.8, 98.8), RenderOffstage#467a8@Offset(108.8, 98.8), RenderSemanticsAnnotations#7bb9a@Offset(108.8, 98.8), _RenderTheatre#224d5@Offset(108.8, 98.8), RenderSemanticsAnnotations#1d1bf@Offset(108.8, 98.8), RenderAbsorbPointer#9c5be@Offset(108.8, 98.8), RenderPointerListener#73db9@Offset(108.8, 98.8), RenderCustomPaint#917be@Offset(108.8, 98.8), RenderSemanticsAnnotations#29d6f@Offset(108.8, 98.8), RenderSemanticsAnnotations#5e748@Offset(108.8, 98.8), RenderSemanticsAnnotations#a64ae@Offset(108.8, 98.8), HitTestEntry#04b77(RenderView#44ceb), HitTestEntry#fc7c6(<AutomatedTestWidgetsFlutterBinding>))
    #0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:953:25)
    #1      WidgetController.getCenter (package:flutter_test/src/controller.dart:836:12)
    #2      WidgetController.longPress (package:flutter_test/src/controller.dart:314:24)
    #3      main.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart:283:24)
    <asynchronous suspension>
    #4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
    <asynchronous suspension>
    To silence this warning, pass "warnIfMissed: false" to "longPress()".
    To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.
    
    00:10 +85: /Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart: Drag-select-grid-view integration tests. Select by pressing. Given that the grid has 4 columns and 3 lines, and that the first item of the grid is selected, when the item is tapped, then the item gets UNSELECTED.
    
    Warning: A call to longPress() with finder "exactly one widget with key [<'grid-item-0'>] (ignoring offstage widgets): Container-[<'grid-item-0'>]" derived an Offset (Offset(108.8, 98.8)) that would not hit test on the specified widget.
    Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
    The finder corresponds to this RenderBox: RenderLimitedBox#5ca55
    The hit test result at that offset is: HitTestResult(RenderPointerListener#89e83@Offset(98.8, 98.8), RenderSemanticsGestureHandler#e80c6@Offset(98.8, 98.8), RenderPointerListener#d4c35@Offset(98.8, 98.8), _RenderScrollSemantics#6768b@Offset(98.8, 98.8), RenderRepaintBoundary#bb89c@Offset(98.8, 98.8), RenderCustomPaint#cce52@Offset(98.8, 98.8), RenderRepaintBoundary#b18c0@Offset(98.8, 98.8), RenderIgnorePointer#9f142@Offset(98.8, 98.8), RenderPointerListener#7d735@Offset(98.8, 98.8), RenderSemanticsGestureHandler#950ec@Offset(98.8, 98.8), RenderFlex#6aa01@Offset(108.8, 98.8), RenderSemanticsAnnotations#98ac3@Offset(108.8, 98.8), RenderRepaintBoundary#28e33@Offset(108.8, 98.8), RenderIgnorePointer#8bc9c@Offset(108.8, 98.8), RenderAnimatedOpacity#882ad@Offset(108.8, 98.8), RenderRepaintBoundary#28825@Offset(108.8, 98.8), RenderSemanticsAnnotations#2ad73@Offset(108.8, 98.8), RenderOffstage#53c68@Offset(108.8, 98.8), RenderSemanticsAnnotations#0a038@Offset(108.8, 98.8), _RenderTheatre#7b2e1@Offset(108.8, 98.8), RenderSemanticsAnnotations#87910@Offset(108.8, 98.8), RenderAbsorbPointer#db59b@Offset(108.8, 98.8), RenderPointerListener#eac1a@Offset(108.8, 98.8), RenderCustomPaint#b91e0@Offset(108.8, 98.8), RenderSemanticsAnnotations#46918@Offset(108.8, 98.8), RenderSemanticsAnnotations#f3b7e@Offset(108.8, 98.8), RenderSemanticsAnnotations#a6a0e@Offset(108.8, 98.8), HitTestEntry#0807a(RenderView#44ceb), HitTestEntry#5bb3a(<AutomatedTestWidgetsFlutterBinding>))
    #0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:953:25)
    #1      WidgetController.getCenter (package:flutter_test/src/controller.dart:836:12)
    #2      WidgetController.longPress (package:flutter_test/src/controller.dart:314:24)
    #3      main.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart:305:24)
    <asynchronous suspension>
    #4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
    <asynchronous suspension>
    To silence this warning, pass "warnIfMissed: false" to "longPress()".
    To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.
    
    00:10 +86: /Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart: Drag-select-grid-view integration tests. Select by pressing. Given that the grid has 4 columns and 3 lines, and that the first item of the grid is selected, when the item is tapped, then the item gets UNSELECTED.
    
    Warning: A call to tap() with finder "exactly one widget with key [<'grid-item-0'>] (ignoring offstage widgets): Container-[<'grid-item-0'>]" derived an Offset (Offset(108.8, 98.8)) that would not hit test on the specified widget.
    Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
    The finder corresponds to this RenderBox: RenderLimitedBox#5ca55
    The hit test result at that offset is: HitTestResult(RenderPointerListener#89e83@Offset(98.8, 98.8), RenderSemanticsGestureHandler#e80c6@Offset(98.8, 98.8), RenderPointerListener#d4c35@Offset(98.8, 98.8), _RenderScrollSemantics#6768b@Offset(98.8, 98.8), RenderRepaintBoundary#bb89c@Offset(98.8, 98.8), RenderCustomPaint#cce52@Offset(98.8, 98.8), RenderRepaintBoundary#b18c0@Offset(98.8, 98.8), RenderIgnorePointer#9f142@Offset(98.8, 98.8), RenderPointerListener#7d735@Offset(98.8, 98.8), RenderSemanticsGestureHandler#950ec@Offset(98.8, 98.8), RenderFlex#6aa01@Offset(108.8, 98.8), RenderSemanticsAnnotations#98ac3@Offset(108.8, 98.8), RenderRepaintBoundary#28e33@Offset(108.8, 98.8), RenderIgnorePointer#8bc9c@Offset(108.8, 98.8), RenderAnimatedOpacity#882ad@Offset(108.8, 98.8), RenderRepaintBoundary#28825@Offset(108.8, 98.8), RenderSemanticsAnnotations#2ad73@Offset(108.8, 98.8), RenderOffstage#53c68@Offset(108.8, 98.8), RenderSemanticsAnnotations#0a038@Offset(108.8, 98.8), _RenderTheatre#7b2e1@Offset(108.8, 98.8), RenderSemanticsAnnotations#87910@Offset(108.8, 98.8), RenderAbsorbPointer#db59b@Offset(108.8, 98.8), RenderPointerListener#eac1a@Offset(108.8, 98.8), RenderCustomPaint#b91e0@Offset(108.8, 98.8), RenderSemanticsAnnotations#46918@Offset(108.8, 98.8), RenderSemanticsAnnotations#f3b7e@Offset(108.8, 98.8), RenderSemanticsAnnotations#a6a0e@Offset(108.8, 98.8), HitTestEntry#cd436(RenderView#44ceb), HitTestEntry#427b5(<AutomatedTestWidgetsFlutterBinding>))
    #0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:953:25)
    #1      WidgetController.getCenter (package:flutter_test/src/controller.dart:836:12)
    #2      WidgetController.tap (package:flutter_test/src/controller.dart:271:18)
    #3      main.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart:309:24)
    <asynchronous suspension>
    #4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
    <asynchronous suspension>
    To silence this warning, pass "warnIfMissed: false" to "tap()".
    To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.
    
    00:10 +103: /Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart: Drag-select-grid-view integration tests. Pop scope. Given that the grid should unselect when trying to pop the route, and that an item of the grid was selected, when trying to pop the route, then the item gets UNSELECTED.
    
    Warning: A call to longPress() with finder "exactly one widget with key [<'grid-item-0'>] (ignoring offstage widgets): Container-[<'grid-item-0'>]" derived an Offset (Offset(108.8, 98.8)) that would not hit test on the specified widget.
    Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
    The finder corresponds to this RenderBox: RenderLimitedBox#43d2b
    The hit test result at that offset is: HitTestResult(RenderPointerListener#d2520@Offset(98.8, 98.8), RenderSemanticsGestureHandler#725f2@Offset(98.8, 98.8), RenderPointerListener#a2284@Offset(98.8, 98.8), _RenderScrollSemantics#d9731@Offset(98.8, 98.8), RenderRepaintBoundary#30087@Offset(98.8, 98.8), RenderCustomPaint#7dd30@Offset(98.8, 98.8), RenderRepaintBoundary#07fd0@Offset(98.8, 98.8), RenderIgnorePointer#02c48@Offset(98.8, 98.8), RenderPointerListener#c81b2@Offset(98.8, 98.8), RenderSemanticsGestureHandler#56afc@Offset(98.8, 98.8), RenderFlex#423ef@Offset(108.8, 98.8), RenderSemanticsAnnotations#04d7f@Offset(108.8, 98.8), RenderRepaintBoundary#38ffa@Offset(108.8, 98.8), RenderIgnorePointer#4a9b5@Offset(108.8, 98.8), RenderAnimatedOpacity#ac200@Offset(108.8, 98.8), RenderRepaintBoundary#7db12@Offset(108.8, 98.8), RenderSemanticsAnnotations#56a80@Offset(108.8, 98.8), RenderOffstage#7ded8@Offset(108.8, 98.8), RenderSemanticsAnnotations#6d7c2@Offset(108.8, 98.8), _RenderTheatre#ebdac@Offset(108.8, 98.8), RenderSemanticsAnnotations#a541d@Offset(108.8, 98.8), RenderAbsorbPointer#785e0@Offset(108.8, 98.8), RenderPointerListener#c1909@Offset(108.8, 98.8), RenderCustomPaint#4cfaf@Offset(108.8, 98.8), RenderSemanticsAnnotations#8df65@Offset(108.8, 98.8), RenderSemanticsAnnotations#8111c@Offset(108.8, 98.8), RenderSemanticsAnnotations#2aba5@Offset(108.8, 98.8), HitTestEntry#cfac4(RenderView#44ceb), HitTestEntry#29978(<AutomatedTestWidgetsFlutterBinding>))
    #0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:953:25)
    #1      WidgetController.getCenter (package:flutter_test/src/controller.dart:836:12)
    #2      WidgetController.longPress (package:flutter_test/src/controller.dart:314:24)
    #3      main.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart:991:24)
    <asynchronous suspension>
    #4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
    <asynchronous suspension>
    To silence this warning, pass "warnIfMissed: false" to "longPress()".
    To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.
    
    00:10 +104: /Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart: Drag-select-grid-view integration tests. Pop scope. Given that the grid should NOT unselect when trying to pop the route, and that an item of the grid was selected, when trying to pop the route, then the item doesn't get UNSELECTED.
    
    Warning: A call to longPress() with finder "exactly one widget with key [<'grid-item-0'>] (ignoring offstage widgets): Container-[<'grid-item-0'>]" derived an Offset (Offset(108.8, 98.8)) that would not hit test on the specified widget.
    Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events.
    The finder corresponds to this RenderBox: RenderLimitedBox#bbac6
    The hit test result at that offset is: HitTestResult(RenderPointerListener#bce82@Offset(98.8, 98.8), RenderSemanticsGestureHandler#2e078@Offset(98.8, 98.8), RenderPointerListener#2cd4d@Offset(98.8, 98.8), _RenderScrollSemantics#549a7@Offset(98.8, 98.8), RenderRepaintBoundary#a4985@Offset(98.8, 98.8), RenderCustomPaint#3e926@Offset(98.8, 98.8), RenderRepaintBoundary#05503@Offset(98.8, 98.8), RenderIgnorePointer#4c35b@Offset(98.8, 98.8), RenderPointerListener#23488@Offset(98.8, 98.8), RenderSemanticsGestureHandler#791bc@Offset(98.8, 98.8), RenderFlex#fd1c6@Offset(108.8, 98.8), RenderSemanticsAnnotations#dbac4@Offset(108.8, 98.8), RenderRepaintBoundary#cce4c@Offset(108.8, 98.8), RenderIgnorePointer#5aa5c@Offset(108.8, 98.8), RenderAnimatedOpacity#981d0@Offset(108.8, 98.8), RenderRepaintBoundary#8de7d@Offset(108.8, 98.8), RenderSemanticsAnnotations#41bfb@Offset(108.8, 98.8), RenderOffstage#7334f@Offset(108.8, 98.8), RenderSemanticsAnnotations#3e885@Offset(108.8, 98.8), _RenderTheatre#cbbfd@Offset(108.8, 98.8), RenderSemanticsAnnotations#3b440@Offset(108.8, 98.8), RenderAbsorbPointer#05037@Offset(108.8, 98.8), RenderPointerListener#b138e@Offset(108.8, 98.8), RenderCustomPaint#8dcd1@Offset(108.8, 98.8), RenderSemanticsAnnotations#2aba7@Offset(108.8, 98.8), RenderSemanticsAnnotations#9cd40@Offset(108.8, 98.8), RenderSemanticsAnnotations#eed2d@Offset(108.8, 98.8), HitTestEntry#f0531(RenderView#44ceb), HitTestEntry#9d400(<AutomatedTestWidgetsFlutterBinding>))
    #0      WidgetController._getElementPoint (package:flutter_test/src/controller.dart:953:25)
    #1      WidgetController.getCenter (package:flutter_test/src/controller.dart:836:12)
    #2      WidgetController.longPress (package:flutter_test/src/controller.dart:314:24)
    #3      main.<anonymous closure>.<anonymous closure>.<anonymous closure> (file:///Users/ben/Projects/drag_select_grid_view/test/src/drag_select_grid_view/drag_select_grid_view_test.dart:1013:24)
    <asynchronous suspension>
    #4      StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart)
    <asynchronous suspension>
    To silence this warning, pass "warnIfMissed: false" to "longPress()".
    To make this warning fatal, set WidgetController.hitTestWarningShouldBeFatal to true.
    
    00:11 +112: All tests passed!
    
    enhancement 
    opened by cbenhagen 0
  • How to get the select parameter outside the Gridview ?

    How to get the select parameter outside the Gridview ?

    Hi . I am using the SelectableItem , that was created in the example code . It needs the selected parameter which needs to be passed from the itembuilder function :

    itemBuilder: (BuildContext context, int index, bool selected) {         
               return _mediaList[index];
       }),
    

    The Problem is as you can see that i am storing the SelectableItem in a mediaList variable. So i want to find a way to get the selected parameter to get passed to the SelectableItem.

    question 
    opened by Loopex2019 6
Owner
Hugo Passos
w.wiki/j6C
Hugo Passos
A grid-based layout system for Flutter, inspired by CSS Grid Layout

Flutter Layout Grid A powerful grid layout system for Flutter, optimized for complex user interface design. Click images to see their code ✨ Featuring

Felt 307 Dec 24, 2022
Grid-View-App - Grid View App For Flutter

grid_view_app practice purpose flutter application Getting Started This project

Md Tarequl Islam 4 Jun 9, 2022
Pinao-Phone - Pinao Tapping Music Instrument App

Pinao Tapping Music Instrument App Tech Stack:- Flutter App Development By Using

Harsh Vardhan 1 Mar 14, 2022
Custom calendar dialog widget for flutter with (multi select, single select, date range) mode

some calendar Custom calendar with Multi-select & range configurable calendar New Features Added View Mode Somecalendar #15 Help Maintenance I've take

Irvan Lutfi Gunawan 69 Jan 3, 2023
Flutter Bidirectional ListView - ListView with items that can be scrolled in both directions with a fixed item count and scroll boundaries.

Flutter Bidirectional ListView ListView with items that can be scrolled and lazy loaded in up and down direction with a fixed item count and scroll bo

Christoph Rothermel 7 May 30, 2022
UTS Mobile Programming membuat Grid view

uts_181021450006 A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started

null 1 Mar 30, 2022
Sticky Grid View For Flutter

Features Listing images in gridview wrapped listview gives bad performance (disp

null 1 Nov 14, 2022
Create a Grid Layout of IoT (Internet of Things) devices in a particular house.

Create a Grid Layout of IoT (Internet of Things) devices in a particular house. Keep it simple to just 4-6 devices. Each device will have an icon on its own. When you press the icon, toggle the image and toggle the text underneath between on and off.

null 0 Dec 30, 2021
Gol grid - a cellular automata flutter widget

GolGrid Conway's Game of Life in a flutter widget. A GolGrid is a rendering of a GridWorld controlled by a Thumper. Example The example contains two a

Jeff Regan 4 Mar 25, 2022
Flutter package for displaying grid view of daily task like Github-Contributions.

flutter_annual_task flutter_annual_task Flutter package for displaying grid view of daily task like Github-Contributions. Example Usage Make sure to c

HuanSuh 24 Sep 21, 2022
Flutter widget that arrange buttons in a grid.

flutter_grid_button Flutter widget that arrange buttons in a grid. It is useful for making a number pad, calculator, and so on. Getting Started To use

zuvola 11 Jan 10, 2022
Lost and Found is an app to help people find their lost items.

lost_and_found A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started i

SonaCodeur 1 Jan 20, 2022
A ListView that allows you to group list items and support headers like iOS UITableView section.

GroupListView package for Flutter. A ListView that allows you to group list items and support headers like iOS UITableView section. Features List Item

Daniel Ioannou 73 Nov 21, 2022
Flutter Application to purchase movie tickets, search for a movie, view movie details and proceed to select seats and movie times.

Flutter Application to purchase movie tickets, search for a movie, view movie details and proceed to select seats and movie times.

Stanley Valenzuela 6 May 25, 2022
An app that opens Facebook, Google, Youtube by Click on the navigation bar items specifically for each.

navbutton A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if thi

dev_allauddin 3 Feb 3, 2022
Flutter package to simplify pagination of list of items from the internet.

PaginationView Installing In your pubspec.yaml dependencies: pagination_view: ^2.0.0-nullsafety.0 import 'package:pagination_view/pagination_view.da

Venkatesh Prasad 151 Dec 29, 2022
Flutter package that provide selectable items in list like Column

vertical_picker vertical_picker is flutter package that you can use it as item selector. users with this package be able to select item that is in ver

Sajad Rahimi 6 Nov 19, 2022
A Flutter ListView in which items can be grouped into sections.

Grouped list package for Flutter. Now with beta support for null safety! A flutter ListView in which list items can be grouped to sections. Features S

Dimitrios Begnis 277 Dec 26, 2022
A Flutter plugin that lists native gallery items.

Media Gallery plugin for Flutter A Flutter plugin that lists native gallery items. Installation First, add media_gallery as a dependency in your pubsp

Aloïs Deniel 84 Dec 7, 2022