import 'package:flutter/material.dart'; import 'package:puzzlegame/entities/tile.dart'; import 'package:puzzlegame/provider/data.dart'; class MovingTile extends Tile { int currentCol; int currentRow; MovingTile({ required this.currentCol, required this.currentRow, required super.image, required super.size, required super.originalCol, required super.originalRow, }); Container _tileWidget() { return Container( decoration: BoxDecoration( color: Colors.black, border: Border.all( color: Colors.black, width: 1, ), ), child: Image( image: image.image, width: size, height: size, fit: BoxFit.fill, ), ); } @override Widget widget(Data myProvider) { return DragTarget<List<int>>( builder: ( BuildContext context, List<dynamic> accepted, List<dynamic> rejected, ) { return Container( height: size, width: size, color: Colors.cyan, child: Draggable<List<int>>( data: [ currentCol, currentRow, ], // Widget when draggable is being dragged feedback: _tileWidget(), // Widget to display on original place when being dragged childWhenDragging: Container( height: size, width: size, color: Colors.pinkAccent, ), // Widget when draggable is stationary child: _tileWidget(), ), ); }, onAcceptWithDetails: (DragTargetDetails<List<int>> source) { myProvider.swapTiles([currentCol, currentRow], source.data); }, ); } @override bool isCorrect() { return ((currentRow == originalRow) && (currentCol == originalCol)); } }