Skip to content

Commit

Permalink
Fixed issue-21, dragging gridview widget background list was not upda…
Browse files Browse the repository at this point in the history
…ting.
  • Loading branch information
Hetpra9653 committed Mar 18, 2024
1 parent c23721f commit 4a70bf8
Show file tree
Hide file tree
Showing 11 changed files with 197 additions and 248 deletions.
5 changes: 2 additions & 3 deletions example/lib/main.dart
@@ -1,10 +1,9 @@
import 'package:example/constants/colors.dart';
import 'package:example/constants/strings.dart';
import 'package:example/pages/grid_example.dart';
import 'package:example/pages/grid_with_scrollcontroller.dart';
import 'package:flutter/material.dart';

import 'constants/colors.dart';
import 'constants/strings.dart';

void main() {
runApp(const MyApp());
}
Expand Down
86 changes: 70 additions & 16 deletions example/lib/pages/grid_example.dart
@@ -1,6 +1,7 @@
import 'dart:developer';

import 'package:example/constants/images.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_draggable_gridview/flutter_draggable_gridview.dart';

Expand All @@ -17,10 +18,12 @@ class GridExample extends StatefulWidget {

class GridExampleState extends State<GridExample> {
final List<DraggableGridItem> _listOfDraggableGridItem = [];
final List<DraggableGridItem> _listOfDraggableGridItem2 = [];

@override
void initState() {
_generateImageData();
_generateImageData1();
_generateImageData2();
super.initState();
}

Expand All @@ -29,20 +32,45 @@ class GridExampleState extends State<GridExample> {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text(widget.title),
title: Text(
widget.title,
),
),
body: SafeArea(
child: DraggableGridViewBuilder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height / 3),
),
children: _listOfDraggableGridItem,
dragCompletion: onDragAccept,
isOnlyLongPress: false,
dragFeedback: feedback,
dragPlaceHolder: placeHolder,
child: Column(
children: [
SizedBox(
height: MediaQuery.of(context).size.height / 3,
child: DraggableGridViewBuilder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height / 3),
),
children: _listOfDraggableGridItem,
dragCompletion: onDragAccept,
isOnlyLongPress: true,
dragFeedback: feedback,
dragPlaceHolder: placeHolder,
),
),
const SizedBox(height: 50),
SizedBox(
height: MediaQuery.of(context).size.height / 3,
child: DraggableGridViewBuilder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height / 3),
),
children: _listOfDraggableGridItem2,
dragCompletion: onDragAccept2,
isOnlyLongPress: true,
dragFeedback: feedback2,
dragPlaceHolder: placeHolder2,
),
),
],
),
),
);
Expand All @@ -69,7 +97,28 @@ class GridExampleState extends State<GridExample> {
log('onDragAccept: $beforeIndex -> $afterIndex');
}

void _generateImageData() {
Widget feedback2(List<DraggableGridItem> list, int index) {
return SizedBox(
width: 200,
height: 150,
child: list[index].child,
);
}

PlaceHolderWidget placeHolder2(List<DraggableGridItem> list, int index) {
return PlaceHolderWidget(
child: Container(
color: Colors.green,
),
);
}

void onDragAccept2(
List<DraggableGridItem> list, int beforeIndex, int afterIndex) {
log('onDragAccept: $beforeIndex -> $afterIndex');
}

void _generateImageData1() {
_listOfDraggableGridItem.addAll(
[
DraggableGridItem(
Expand All @@ -85,8 +134,13 @@ class GridExampleState extends State<GridExample> {
child: const GridItem(image: Images.asset_3), isDraggable: true),
DraggableGridItem(
child: const GridItem(image: Images.asset_4), isDraggable: true),
DraggableGridItem(
child: const GridItem(image: Images.asset_5), isDraggable: true),
],
);
}

void _generateImageData2() {
_listOfDraggableGridItem2.addAll(
[
DraggableGridItem(
child: const GridItem(image: Images.asset_6), isDraggable: true),
DraggableGridItem(
Expand Down
3 changes: 2 additions & 1 deletion example/lib/pages/grid_with_scrollcontroller.dart
Expand Up @@ -43,6 +43,7 @@ class GridWithScrollControllerExampleState
),
body: SafeArea(
child: DraggableGridViewBuilder(
scrollDirection: Axis.vertical,
controller: _scrollController,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
Expand Down Expand Up @@ -97,7 +98,7 @@ class GridWithScrollControllerExampleState
DraggableGridItem(
child: const GridItem(image: Images.asset_4), isDraggable: true),
DraggableGridItem(
child: const GridItem(image: Images.asset_5), isDraggable: true),
child: const GridItem(image: Images.asset_5), isDraggable: false),
DraggableGridItem(
child: const GridItem(image: Images.asset_6), isDraggable: true),
DraggableGridItem(
Expand Down
8 changes: 4 additions & 4 deletions example/pubspec.lock
Expand Up @@ -73,10 +73,10 @@ packages:
dependency: "direct dev"
description:
name: flutter_lints
sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7
url: "https://pub.dev"
source: hosted
version: "2.0.3"
version: "3.0.1"
flutter_test:
dependency: "direct dev"
description: flutter
Expand Down Expand Up @@ -110,10 +110,10 @@ packages:
dependency: transitive
description:
name: lints
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "3.0.0"
matcher:
dependency: transitive
description:
Expand Down
2 changes: 1 addition & 1 deletion example/pubspec.yaml
Expand Up @@ -23,7 +23,7 @@ dev_dependencies:
# activated in the `analysis_options.yaml` file located at the root of your
# package. See that file for information about deactivating specific lint
# rules and activating additional ones.
flutter_lints: ^2.0.0
flutter_lints: ^3.0.1

flutter:
uses-material-design: true
Expand Down
18 changes: 8 additions & 10 deletions lib/common/global_variables.dart
@@ -1,12 +1,10 @@
part of '../flutter_draggable_gridview.dart';

// var dragStarted = false;
// var dragEnded = true;
// late List<DraggableGridItem> orgList;
// // late List<DraggableGridItem> _list;
// DraggableGridItem? draggedGridItem;
// //
// // /// [isOnlyLongPress] is Accepts 'true' and 'false'
// // /// If, it is true then only draggable works with long press.
// // /// and if it is false then it works with simple press.
// bool isOnlyLongPress = true;
bool _dragStarted = false;
bool _dragEnded = true;
DraggableGridItem? _draggedGridItem;

// /// [isOnlyLongPress] is Accepts 'true' and 'false'
// /// If, it is true then only draggable works with long press.
// /// and if it is false then it works with simple press.
bool _isOnlyLongPress = true;
88 changes: 38 additions & 50 deletions lib/flutter_draggable_gridview.dart
@@ -1,11 +1,8 @@
library draggable_grid_view;

import 'dart:developer';

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

import 'constants/colors.dart';
import 'package:flutter_draggable_gridview/constants/colors.dart';

part 'common/global_variables.dart';

Expand Down Expand Up @@ -102,17 +99,19 @@ class DraggableGridViewBuilder extends StatefulWidget {
}

class DraggableGridViewBuilderState extends State<DraggableGridViewBuilder> {
bool _isOnlyLongPress = true;
late List<DraggableGridItem> _list;
DraggableGridItem? _draggedGridItem;
late List<DraggableGridItem> _orgList;
late List<DraggableGridItem> _list;

/// [isOnlyLongPress] is Accepts 'true' and 'false'
/// If, it is true then only draggable works with long press.
/// and if it is false then it works with simple press.
@override
void initState() {
super.initState();
assert(widget.children.isNotEmpty, 'Children must not be empty.');

/// [list] will update when the widget is being dragged.
/// [list] will update when the widget is begin dragged.
_list = [...widget.children];

/// [orgList] will set when the drag completes.
Expand All @@ -134,36 +133,30 @@ class DraggableGridViewBuilderState extends State<DraggableGridViewBuilder> {
Widget build(BuildContext context) {
if (widget.sliverMode) {
return SliverGrid.builder(
itemCount: _list.length,
gridDelegate: widget.gridDelegate,
itemBuilder: (context, index) {
return (!_list[index].isDraggable)
? _list[index].child
: DragTargetGrid(
index: index,
onChangeCallback: () => setState(() {}),
feedback: widget.dragFeedback?.call(_list, index),
childWhenDragging:
widget.dragChildWhenDragging?.call(_orgList, index),
placeHolder: widget.dragPlaceHolder?.call(_orgList, index),
dragCompletion: widget.dragCompletion,
list: _list,
draggedGridItem: _draggedGridItem,
onDragGridItem: (DraggableGridItem? data) {
_draggedGridItem = data;
setState(() {});
},
onOrgListUpdate: (List<DraggableGridItem> data) {
_orgList = data;
},
onListUpdate: (List<DraggableGridItem> data) {
_list = data;
},
orgList: _orgList,
isOnlyLongPress: _isOnlyLongPress,
);
},
);
itemCount: _list.length,
gridDelegate: widget.gridDelegate,
itemBuilder: ((context, index) {
return (!_list[index].isDraggable)
? _list[index].child
: DragTargetGrid(
isOnlyLongPress: _isOnlyLongPress,
list: _list,
orgList: _orgList,
index: index,
onChangeCallback: () => setState(() {}),
feedback: widget.dragFeedback?.call(_list, index),
childWhenDragging:
widget.dragChildWhenDragging?.call(_orgList, index),
placeHolder: widget.dragPlaceHolder?.call(_orgList, index),
dragCompletion: widget.dragCompletion,
onListUpdate: (List<DraggableGridItem> value) {
_list = value;
},
onOrgListUpdate: (List<DraggableGridItem> value) {
_orgList = value;
},
);
}));
}
return GridView.builder(
scrollDirection: widget.scrollDirection,
Expand All @@ -186,26 +179,21 @@ class DraggableGridViewBuilderState extends State<DraggableGridViewBuilder> {
return (!_list[index].isDraggable)
? _list[index].child
: DragTargetGrid(
isOnlyLongPress: _isOnlyLongPress,
list: _list,
orgList: _orgList,
index: index,
onChangeCallback: () => setState(() {}),
feedback: widget.dragFeedback?.call(_list, index),
childWhenDragging:
widget.dragChildWhenDragging?.call(_orgList, index),
placeHolder: widget.dragPlaceHolder?.call(_orgList, index),
dragCompletion: widget.dragCompletion,
isOnlyLongPress: _isOnlyLongPress,
list: _list,
orgList: _orgList,
draggedGridItem: _draggedGridItem,
onDragGridItem: (DraggableGridItem? data) {
_draggedGridItem = data;
setState(() {});
},
onOrgListUpdate: (List<DraggableGridItem> data) {
_orgList = data;
onListUpdate: (List<DraggableGridItem> value) {
_list = value;
},
onListUpdate: (List<DraggableGridItem> data) {
_list = data;
onOrgListUpdate: (List<DraggableGridItem> value) {
_orgList = value;
},
);
},
Expand Down

0 comments on commit 4a70bf8

Please sign in to comment.