شرح كيفية تحريك و اسقاط العناصر في فلاتر | drag and drop widget in Flutter

شرح كيفية تحريك و اسقاط العناصر في فلاتر | drag and drop widget in Flutter

شرح كيفية تحريك و اسقاط العناصر في فلاتر | drag and drop widget in Flutter

في هذا المقال سوف نشرح معكم كيف تقوم بعمل تحريك واسقاط للعناصر drag and drop باستخدام تقنية flutter والغنيه عن التعريف , سوف نشارك معكم موضوع مهم في تحريك العناصر وهو drag and drop وكيف تستطيع القيام به في تطبيقك وهل تعلم ان هنالك تطبيقات قائمه بشكل كامل على فكرة التحريك والاسقاط وغالبا تطبيقات الاطفال والمميز في فلاتر انها تقدم لنا widgets عديده جدا تساعدنا في انجاز المهام بشكل اسرع مثل ال widget الذي سوف نشاركه معكم اليوم .


android sdk manager تحميل flutter developers applications create app android android studio mac


drag and drop widget in Flutter

في هذا الكود قمنا بعمل تحريك للعنصر بداخل الشاشه الخاصه بالتطبيق عن طريق الضغطه المطوله وايضا وضع لون على العنصر اثناء تحريكه لمعرفة الموقع الذي سوف ينتقل له كما هو موضح بالصورة الخاصه بالمقال للمثال الاول وهذا الكود الخاص بالعمليه بالاسفل يمكنك تغيير حجم الصورة او اللون .


drag and drop widget in Flutter

main1.dart


class _GeeCodersState extends State<GeeCoders> {
  Offset _offset = const Offset(200,250);

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: LayoutBuilder(
          builder: (context, constraints) {
            return Stack(
              children: [
                Positioned(
                  left: _offset.dx,
                  top: _offset.dy,
                  child: LongPressDraggable(
                    feedback: Image.network("https://images.unsplash.com/photo-1669490893279-4589b3b1cf4e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80",height: 200,color: Colors.cyan,),
                    child: Image.network("https://images.unsplash.com/photo-1669490893279-4589b3b1cf4e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80",height: 200,),
                    onDragEnd: (details) {
                      setState(() {
                        final adjustment = MediaQuery.of(context).size.height -
                            constraints.maxHeight;
                        _offset = Offset(
                            details.offset.dx, details.offset.dy - adjustment);

                        print(_offset.dx);
                        print(_offset.dy);
                      });
                    },
                  ),
                ),
              ],
            );
          },
        ),
      ),
    );
  }
}


How to Dropping an item Flutter

في هذا الكود يمكنك من خلاله تنفيذ لعبه بسيطة للتحريك والاسقاط فهذا الكود يوضح مكان للعنصر وعندما تضع العنصر في المكان المناسب يظهر رساله انها صحيحه ويمكنك من خلال هذا الكود تنفيذ لعبه كامله مثل العاب التركيب حتى تتمكن من تنفيذ تطبيق كامل قائم عليها بشكل اساسي .


How to Dropping an item Flutter

main2.dart


class _GeeCodersState extends State<GeeCoders> {
  String img = 'https://images.unsplash.com/photo-1669490893279-4589b3b1cf4e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80';
  final String _color = 'red';
  bool _isDropped = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Column(
          children: [
            Draggable(
              // Data is the value this Draggable stores.
              data: _color,
              // after long click
              childWhenDragging: SizedBox(
                height: 220.0,
                width: 220.0,
                child: Center(
                  child: Container(
                    color: Colors.grey,
                    // height: 200,
                  ),
                ),
              ),
              // after drag
              feedback: SizedBox(
                height: 220.0,
                width: 220.0,
                child: Center(
                  child: Image.network(
                    img,
                    fit: BoxFit.cover,
                    width: 220.0,
                    height: 200,
                  ),
                ),
              ),
              // child
              child: SizedBox(
                height: 220.0,
                width: 220.0,
                child: Center(
                  child: _isDropped ? const SizedBox.shrink() : Image.network(img,fit: BoxFit.cover,height: 220,width: 220,),
                ),
              ),
            ),
            SizedBox(height: 100,),
            DragTarget(
              builder: (
                  BuildContext context,
                  List<dynamic> accepted,
                  List<dynamic> rejected,
                  ) {
                return Container(
                  height: 220,
                  width: 220,
                  child: Center(
                    child: _isDropped ? Image.network(img,fit: BoxFit.cover,height: 220,width: 220,) : Container(height: 220,width: 220,color: Colors.grey,),
                  ),
                );
              },
              onWillAccept: (data) {
                return data == 'red';
              },
              onAccept: (data) {
                setState(() {

                  showTopSnackBar(
                    Overlay.of(context),
                    CustomSnackBar.success(
                      message:
                      "Good job",
                    ),
                  );

                  _isDropped = true;
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}


تعليقات