اذهب إلى المحتوى

Flutter Dev

الأعضاء
  • المساهمات

    787
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    2

أجوبة بواسطة Flutter Dev

  1. السلام عليكم ورحمة الله وبركاته 

    تحيه طيبه للجميع 

    قمت بعمل كود لجلب الصور من الاستوديو وحفظها في قاعدة بيانات mysql 

    الكود شغال بشكل عام ولكن توجد مشكله لم استطع ايجاد حل لها

    الصور يتم حفظها في مجلد الصور ولكن لا تظهر احصل على  الرسالة التاليه:

    60a187b81c0f4_2021-05-17005836.png.e8b297a3ace35a65e2b96b1e419f6aa4.png

    وهذا شكل الصور في المجلد

    60a187c5484e5_2021-05-17005909.png.bd59fe2094eb7890ffbe5d39d0b21a10.png

     

    ايضا الاسم في قاعدة البيانات يتكرر يعني لو عملت اول صورتين الامور رح تمشي تمام ولكن لو عملت اربع اسماء رح احصل على اثنان مع ان المفترض يكون الاسم مختلف مثال بشكل التالي:

    http://******/PHP/admin/upload_pic/thumb_file_0.png
    http://******/PHP/admin/upload_pic/thumb_file_1.png
    http://******/PHP/admin/upload_pic/thumb_file_0.png
    http://******/PHP/admin/upload_pic/thumb_file_1.png

     

     

    الكود المستعمل كامل كالتالي:

    <?php
    		$photo_url= $_POST['photo_url'];
    
       $NameImage = $_POST['NameImage'];
    
    	include 'connt.php';
    
    		$path = "upload_pic/$NameImage.png";
    
    		$actualpath = "http://*********/PHP/admin/$path";
    
    
    $sql = "INSERT INTO  photos (photo_url) VALUES (?)";		
    
    $stmt = $con->prepare($sql); 
    
    $stmt->bind_param("s",$actualpath);
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    		
    
    	//	if(mysqli_query($conn,$sql)){
    
    			file_put_contents($path,base64_decode($photo_url));
    
    			echo "Successfully Uploaded";
    
    	//	}
    
    		
    
    	$stmt->close();
    
    ?> 

     

     

    
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
     
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: '',
          theme: ThemeData(
            primarySwatch: Colors.blue,
            visualDensity: VisualDensity.adaptivePlatformDensity,
          ),
          home: StoreAddScreen(),
        );
      }
    }
    
    class StoreAddScreen extends StatefulWidget {
      StoreAddScreen({Key key}) : super(key: key);
    
      @override
      _StoreAddScreenState createState() => _StoreAddScreenState();
    }
    
    class _StoreAddScreenState extends State<StoreAddScreen> {
      List<String> photoPaths = List<String>();
      final picker = ImagePicker();
    
      static final String uploadEndPoint =
          'http://**********/PHP/admin/rest/AddNewCategrytesttodelete.php';
    
    
    
      void SaveDate() async {
    
          for (int i = 0; i < photoPaths.length; i++) {
            if (photoPaths[i].runtimeType == String) {
              String strPath = sprintf("thumb_file_%d", [i]);
       
              var url = uploadEndPoint;
              var response = await http.post(url, body: {
                "photo_url": photoPaths[i],
                "NameImage": strPath,
    
              });
              if (response.statusCode == 200) {
    
              } else {}
    
            }
    
          }
    
      }
      static const int MAX_PHOTO_UPLOAD = 5;
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            body: SingleChildScrollView(
          child: Column(
            children: [
              SizedBox(
                width: double.infinity,
                height: 300.0,
                child: Expanded(
                  child: Padding(
                    padding: EdgeInsets.all(20),
                    child: SingleChildScrollView(
                      child: SizedBox(
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.start,
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: <Widget>[
                            Padding(
                              padding: const EdgeInsets.only(top: 10),
                              child: SizedBox(
                                height: 140,
                                child: Row(
                                  children: [
                                    Expanded(
                                      child: Container(
                                        decoration: BoxDecoration(
                                          color: Theme.of(context)
                                              .textTheme
                                              .bodyText1
                                              .color,
                                          borderRadius: BorderRadius.circular(8),
                                        ),
                                        child: ListView.builder(
                                          itemCount: photoPaths.length,
                                          scrollDirection: Axis.horizontal,
                                          itemBuilder:
                                              (BuildContext context, int index) {
                                            return InkWell(
                                              child: Padding(
                                                  padding: EdgeInsets.only(
                                                      top: 8.0,
                                                      bottom: 8.0,
                                                      left: 8.0,
                                                      right: 8.0),
                                                  child: Container(
                                                      height: 140,
                                                      width: 140,
                                                      child: ClipRRect(
                                                        borderRadius:
                                                            BorderRadius.circular(
                                                                8),
                                                        child: AspectRatio(
                                                          aspectRatio: 1.2,
                                                          child: Image.file(
                                                            File(photoPaths[index]),
                                                            fit: BoxFit.cover,
                                                            width: 300,
                                                            height: 300,
                                                          ),
                                                        ),
                                                      ))),
                                              onTap: () {
                                                showDialog(
                                                  context: this.context,
                                                  child: new AlertDialog(
                                                    content: new FlatButton(
                                                      child:
                                                          new Text("delete_photo"),
                                                      onPressed: () => setState(() {
                                                        photoPaths.removeAt(index);
                                                      }),
                                                    ),
                                                  ),
                                                );
                                              },
                                            );
                                          },
                                        ),
                                      ),
                                    ),
                                    Padding(
                                      padding: const EdgeInsets.only(
                                          left: 10, right: 10),
                                      child: Container(
                                          width: 50,
                                          height:
                                              MediaQuery.of(context).size.height,
                                          decoration: BoxDecoration(
                                            color: Theme.of(context).accentColor,
                                            borderRadius: BorderRadius.circular(8),
                                          ),
                                          child: Material(
                                            color: Theme.of(context).accentColor,
                                            borderRadius: BorderRadius.circular(8),
                                            child: InkWell(
                                                borderRadius:
                                                    BorderRadius.circular(8),
                                                child: Icon(
                                                  Icons.add_a_photo,
                                                  color: Theme.of(context)
                                                      .floatingActionButtonTheme
                                                      .foregroundColor,
                                                ),
                                                onTap: () async {
                                                  if (photoPaths.length ==
                                                      MAX_PHOTO_UPLOAD) {
                                                    showDialog(
                                                      context: this.context,
                                                      child: new AlertDialog(
                                                        content: new FlatButton(
                                                          child: new Text(
                                                              "max_photos_reached"),
                                                        ),
                                                      ),
                                                    );
                                                  }
                                                  PickedFile pickedFile =
                                                      await picker.getImage(
                                                          source:
                                                              ImageSource.gallery,
                                                          imageQuality: 90);
                                                  setState(() {
                                                    if (pickedFile != null) {
                                                      photoPaths
                                                          .add(pickedFile.path);
                                                    }
                                                  });
                                                }),
                                          )),
                                    )
                                  ],
                                ),
                              ),
                            ),
                            Padding(
                              padding: const EdgeInsets.only(top: 16),
                              child: Center(
                                child: FlatButton(
                                  color: Theme.of(context).accentColor,
                                  // controller: _btnController,
                                  onPressed: SaveDate,
                                  child: Text(
                                    ("addd"),
                                    style: TextStyle(
                                      fontWeight: FontWeight.w500,
                                      color: Theme.of(context)
                                          .floatingActionButtonTheme
                                          .foregroundColor,
                                    ),
                                  ),
                                ),
                              ),
                            ),
                            SizedBox(
                              height: 50,
                            ),
                          ],
                        ),
                      ),
                    ),
                  ),
                ),
              ),
            ],
          ),
        ));
      }
    }

    ياليت اذا احد يعرف سبب المشكله يساعدنا ولكم جزيل الشكر

    • أعجبني 1
  2. بتاريخ منذ ساعة مضت قال بلال زيادة:

    ليس لديك أي كلاس ليتم إضافة الدالة إليه , لذلك يمكنك إنشاء كلاس بهذا الشكل 

    
    <?php
    class ControllerPhoto {
    	
    	public $pdo; 
    	
    	function __construct($pdo){
    		$this->pdo = $pdo // الأستعلام الخاص بقاعدة البيانات
    	}
    	function insertPhoto($itm)  {
    		$stmt = $this->pdo->prepare('INSERT INTO photos(photo_url) VALUES(:photo_url)');
    
    		$result = $stmt->execute(array('photo_url' => $itm->photo_url,));
    		
    		return $result ? true : false;
    	}
    
    	function sanitize($key) {
    		$val = "";
    		if( !empty($_POST[$key]) )
    		$val = $_POST[$key];
    
    		return $val;
    	}
    }

    و من ثم تمرير متغير pdo$ الخاص بالإتصال بقاعدة البيانات , ومن ثم يمكنك استدعاء الدالة بهذا الشكل 

    
    $controllerPhoto->controllerPhoto($photo);

    فيكون كامل الكود بهذا الشكل 

    
    <?php
    class ControllerPhoto {
    	
    	public $pdo; 
    	
    	function __construct($pdo){
    		$this->pdo = $pdo // الأستعلام الخاص بقاعدة البيانات
    	}
    	function insertPhoto($itm)  {
    		$stmt = $this->pdo->prepare('INSERT INTO photos(photo_url) VALUES(:photo_url)');
    
    		$result = $stmt->execute(array('photo_url' => $itm->photo_url,));
    		
    		return $result ? true : false;
    	}
    
    	function sanitize($key) {
    		$val = "";
    		if( !empty($_POST[$key]) )
    		$val = $_POST[$key];
    
    		return $val;
    	}
    }
    $controllerPhoto = new ControllerPhoto();
    $controllerPhoto->controllerPhoto($photo);
    $extras = new Extras();
    $arrPhotos = array();
    if(count($arrPhotos) > 0) {
      for($ind = 0; $ind < count($arrPhotos); $ind++) {
    	  $photo = new Photo();
    
    	  $photo->photo_url = $arrPhotos[$ind];
    
    	  insertPhoto($itm)->insertPhoto($photo);
      }
    }
    ?>

     

    شكرا لك اخي الكريم

    • أعجبني 1
  3. السلام عليكم ورحمة الله وبركاته

    تحيه طيبه للجميع

    احاول ان اقلص عدد الكلاسات المستعمله لدي php ولكن خبرتي قليله في برمجة php  والباك اند

    كيف ممكن اضافة هذا الفكشن :

        public function insertPhoto($itm)  {
            $stmt = $this->pdo->prepare('INSERT INTO photos( 
                                                photo_url 
                                               
                                         
                                                 ) 
    
                                            VALUES(
                                                :photo_url
                                             
                                         
                                                )');
    
            $result = $stmt->execute(
                                array('photo_url' => $itm->photo_url,
                                       
                                      ) );
            
            return $result ? true : false;
        }

    في هذا الكلاس:

    <?php
    
     
    
    
      $controllerPhoto = new ControllerPhoto();
    
    
      $arrPhotos = array();
    
    
    
    
      if(count($arrPhotos) > 0) {
          for($ind = 0; $ind < count($arrPhotos); $ind++) {
              $photo = new Photo();
      
              $photo->photo_url = $arrPhotos[$ind];
     
              $controllerPhoto->insertPhoto($photo);
          }
      }
    
    
    
      function sanitize($key) {
          $val = "";
          if( !empty($_POST[$key]) )
            $val = $_POST[$key];
    
          return $val;
      }
    
    
    
    
    
    
    
    
    
    ?>

     

     

    مع العلم اني قمت بالتالي ولكن لم ينجح :

    <?php
    
    
    
    
      $controllerPhoto = new ControllerPhoto();
      $extras = new Extras();
    
    
    
    
    
      $arrPhotos = array();
    
    
    
    
      if(count($arrPhotos) > 0) {
          for($ind = 0; $ind < count($arrPhotos); $ind++) {
              $photo = new Photo();
      
              $photo->photo_url = $arrPhotos[$ind];
     
              insertPhoto($itm)->insertPhoto($photo);
          }
      }
      function insertPhoto($itm)  {
        $stmt = $this->pdo->prepare('INSERT INTO photos( 
                                            photo_url 
                                           
                                     
                                             ) 
    
                                        VALUES(
                                            :photo_url
                                         
                                     
                                            )');
    
        $result = $stmt->execute(
                            array('photo_url' => $itm->photo_url,
                                   
                                  ) );
        
        return $result ? true : false;
    }
    
    
    
      function sanitize($key) {
          $val = "";
          if( !empty($_POST[$key]) )
            $val = $_POST[$key];
    
          return $val;
      }
    
    
    
    
    
    
    
    
    
    ?>

    وبعض المحاولات المختلفه ايضا لم تنجح

    ما هو الخطاء او كيف يمكن عمل ذلك والوصول الى الفكشن insertPhoto($itm)  في هذا الكلاس

  4. السلام عليكم ورحمة الله وبركاته 

    تحيه طيبه وبعد

    احاول عمل عمليتين في نفس الوقت بمعنى  في وقت واحد / العملية الاولى من نوع ادخال insert وبعد الادخال هذا احتاج الى جلب id اخر id طبعا بيكون الخاص ب هذا الادخال في نفس الوقت 

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

    كيف يمكن عمل ذلك بحيث نعمل ادخال بعدها جلب اخر معرف لهذا الادخال ؟ ام الامر لا يمكن فعله من خلال هذا الطريقة؟

    • أعجبني 1
  5. بتاريخ 17 ساعات قال Wael Aljamal:

    سنعمل على حساب عدد الصور التي تم تحديدها، أي استدعاء الدالة _onAddImageClick حسب فهمي للشيفرة فاستدعائها يتكرر مع كل تحديد للصورة.

    يمكنك تعريف متغير قبل الدالة، وعلينا زيادته ب 1 بعد كل استدعاء أي:

    
    var _imageCounter = 0;
    ^^^^^^^^^^^^^^^^^^
    
    Future _onAddImageClick(int index, int type) async {
    	
        if (images != null)
          setState(() {
    	
    		_imageCounter ++;
     ______^^^^^^^^^^^^^^^^
    
            // ignore: deprecated_member_use
            _imageFile = ImagePicker.pickImage(
              source: type == 1 ? ImageSource.camera : ImageSource.gallery,
              imageQuality: 50,
            );
            getFileImage(index);
          });
      }

    وفي الحلقة:

    
    for(int i=0;i <  _imageCounter ;i++)
                  ^  ^^^^^^^^^^^^^

    أصغر تماما لكي لا نجلب صورة إضافية

    شكرا لك اخي الكريم

    • أعجبني 1
  6. بتاريخ 2 ساعات قال Wael Aljamal:

    هل يمكنك مشاركة التعديلات التي قمت بها من فضلك.

    imagecode تتولد تلقائيا ب 6 عنصر ومن ثم لكل عنصر ضمن حلقة for يتم عمل post، يمكنك اختبار القيمة فيما اذا كانت صالحة (الصورة تم اختيارها) قبل عمل الاتصال أو تحديد عدداد Counter بعدد الصور المختارة لتمشي إليه الحلقة ولا تمر على جميع ال 6 عناصر.

    اهلا بك اخي 

    من يومين وانا احاول فيه ولكن بدون فائدة انا عارف انه المشكلة في حلقة for ولكن بسبب نقص الخبره لم اعرف كيف ممكن اضبطها 

     

    قمت بعمل حلول مختلفه  منها وضع الكود بشكل التالي بحيث وضعت جملة شرطية:

      void SaveDate() async {
        if(imagecode!=null) {
          for (int i = 0; i < imagecode.length; i++) {
            print('Test_Code ${imagecode.length}');
            var url = uploadEndPoint;
            var response = await http.post(url, body: {
              "image": imagecode[i],
              "NameImage": name[i],
    
    
            });
            if (response.statusCode == 200) {
    
    
    
           //
            } else {
    
            }
    
          }
    
        }
    
      }

     

    ومنها وضعه بشكل التالي بحيث اضيف break; لتخرج بعد ان تنتهي من اول دوره ولكن الامر هذا جعل الكود يقوم بحفظ صوره واحده فقط من اصل 2 او اكثر:

    void SaveDate() async {
        if(imagecode!=null) {
          for (int i = 0; i < imagecode.length; i++) {
            print('Test_Code ${imagecode.length}');
            var url = uploadEndPoint;
            var response = await http.post(url, body: {
              "image": imagecode[i],
              "NameImage": name[i],
    
    
            });
            if (response.statusCode == 200) {
    
    
    
           //
            } else {
    
            }
            break;//=============================
          }
    
        }
    
      }

    ايضا قمت بمحاولة هنا وقمت بوضع جمله شرطيه :

      children: List.generate(images.length, (index) {
                      if (images[index] is ImageUploadModel) {
                        ImageUploadModel uploadModel = images[index];
                        if(uploadModel.imageFile!=null){//==============================
    
                          //base64 image
                          List<int> imageBytes = uploadModel.imageFile.readAsBytesSync();
                          // base64Image = base64Encode(snapshot.data.readAsBytesSync());
                          base64Image = base64Encode(imageBytes); //'base64Image' holds the base64 image string
                          imagecode.add(base64Image);
                          name.add(uploadModel.imageFile.path.split("/").last);}

     

     

    ايضا قمت بمحاولة تغير هنا بحيث قمت بحذف ميثود _onAddImageClick

      Future _onAddImageClick(int index, int type) async {
        if (images != null)
          setState(() {
    
            _imageFile = ImagePicker.pickImage(
              source: type == 1 ? ImageSource.camera : ImageSource.gallery,
              imageQuality: 50,
            );
            getFileImage(index);
          });
      }
    
      void getFileImage(int index) async {
        _imageFile.then((file) async {
          setState(() {
    
            ImageUploadModel imageUpload = new ImageUploadModel();
            imageUpload.imageFile = file;
            images.replaceRange(index, index + 1, [imageUpload]);
          });
        });
      }

     

     

    وتحويلها بشكل التالي:

      void getFileImage(int index,int type) async {
        _imageFile.then((file) async {
          setState(() {
    
            _imageFile = ImagePicker.pickImage(
                source: type == 1 ? ImageSource.camera : ImageSource.gallery,
                imageQuality: 50,
            );
          });
        });
      }

    ولم ينجح الامر ايضا في محاولة اخرى ايضا مختلفه مثل تغير شكل for  وغيرها ولكن كل شي لم ينجح 

  7. بتاريخ 1 ساعة قال Wael Aljamal:

    لاحظ هذه:

    
    children: List.generate(images.length, (index) {
    .
    .
    
    ..
    
    imagecode.add(base64Image);

    هنا الحلقة تمر على جميع عناصر images وهم 6 ويتم إضافة صورة ل imagecode ثم في تابع آخر يتم رفع جميع هذه ال imagecode أي 6 أيضا.

    
    for(int i=0;i<=imagecode.length;i++){
          await http.post(uploadEndPoint, body: {
            "image": imagecode[i],
            "NameImage": name[i],

    حاول اختبار القيمة المبدئية مثلا ستكون add image و إذا تغيرت قم بزيادة العداد ب 1 ثم اجعل هذه الحلقة تتكرر بعدد الصور المعدلة فقط.

    هلا بيك اخي

    انا ك تجربه قمت بحذف العناصر السته وابقيت على واحد وقمت بتحميل صورتان وحدث نفس الامر قام بحفظ بشكل متكرر

    image. add("add image);

    هذا العناصر

  8. بتاريخ الآن قال Wael Aljamal:

    سبب رفع 6 صور، بسبب تهيئة قائمة الصور ب6 عناصر في هذه الجزئية:

    
    void initState() {
        super.initState();
        setState(() {
          images.add("Add Image");
          images.add("Add Image");
          images.add("Add Image");
          images.add("Add Image");
          images.add("Add Image");
          images.add("Add Image");
        });
      }

    ثم تقوم بالمرور عليهم بحلقة for وتنفذ الشيفرة فتتكرر العملية عدة مرات

    اهلا بيك اخي

    شاكر لك ردك وافادتك ولكن اخي كيف يمكن تجنب هذا المشكله ؟ بحيث اني انا مخلي للمستخدم بالاساس 6 خيارات ما اريد اقلل يعني كيف يمكن تجنب هذا المشكله؟ بحيث لو كان مافيه صور او المستخدم ما كمل اختيار باقي الحقول لا يتم تكرار الامر؟ هل لديك فكره لو تكرمت

  9. السلام عليكم ورحمة الله وبركاته

    تحيه طيبه للجميع

    قمت بعمل كود يجلب الصور من الاستوديو للمستخدم ثم يستطيع المستخدم رفعها الى قاعدة البيانات mysql  من خلال تطبيق فلاتر

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

    مثال انا قمت بتجربة تحميل صورتان 

    وهذا النتيجة التي حصلت عليها :

    6099ddbb54a80_2021-05-11050147.png.c1d3d8e5aac5fdab92f47cda09a5be34.png

     

    تقريبا 6 اسطر والمتفرض يكون فقط اثنان

    واحصل ذلك على الخطاء التالي في الاندرويد ستوديو :

    Performing hot reload...
    Syncing files to device SM G955F...
    Reloaded 1 of 613 libraries in 963ms.
    D/ViewRootImpl@eb7fe80[MainActivity]( 7240): ViewPostIme pointer 0
    D/ViewRootImpl@eb7fe80[MainActivity]( 7240): ViewPostIme pointer 1
    I/flutter ( 7240): dddddddddddddddd 200
    I/flutter ( 7240): dddddddddddddddd 200
    I/flutter ( 7240): dddddddddddddddd 200
    I/flutter ( 7240): dddddddddddddddd 200
    I/flutter ( 7240): dddddddddddddddd 200
    I/flutter ( 7240): dddddddddddddddd 200
    E/flutter ( 7240): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: RangeError (index): Invalid value: Not in inclusive range 0..5: 6
    E/flutter ( 7240): #0      List.[] (dart:core-patch/growable_array.dart:177:60)
    E/flutter ( 7240): #1      _PickImagesState.startUpload (package:multiiamge/testpage.dart:91:27)
    E/flutter ( 7240): <asynchronous suspension>
    E/flutter ( 7240): #2      _PickImagesState.build.<anonymous closure> (package:multiiamge/testpage.dart:218:15)
    E/flutter ( 7240): #3      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19)
    E/flutter ( 7240): #4      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1111:38)
    E/flutter ( 7240): #5      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
    E/flutter ( 7240): #6      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
    E/flutter ( 7240): #7      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
    E/flutter ( 7240): #8      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:222:7)
    E/flutter ( 7240): #9      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:476:9)
    E/flutter ( 7240): #10     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:77:12)
    E/flutter ( 7240): #11     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:122:9)
    E/flutter ( 7240): #12     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
    E/flutter ( 7240): #13     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:120:18)
    E/flutter ( 7240): #14     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:106:7)
    E/flutter ( 7240): #15     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:358:19)
    E/flutter ( 7240): #16     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22)
    E/flutter ( 7240): #17     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11)
    E/flutter ( 7240): #18     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:295:7)
    E/flutter ( 7240): #19     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:240:7)
    E/flutter ( 7240): #20     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:213:7)
    E/flutter ( 7240): #21     _rootRunUnary (dart:async/zone.dart:1206:13)
    E/flutter ( 7240): #22     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
    E/flutter ( 7240): #23     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
    E/flutter ( 7240): #24     _invoke1 (dart:ui/hooks.dart:265:10)
    E/flutter ( 7240): #25     _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)
    E/flutter ( 7240): 

     

     

    الكود كامل كالتالي:

    
    
    
    void main() {
      runApp(
        MyApp(),
    
      );
    }
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: '',
          theme: ThemeData(
            primarySwatch: Colors.blue,
            visualDensity: VisualDensity.adaptivePlatformDensity,
          ),
          home: PickImages(),
        );
      }
    }
    class PickImages extends StatefulWidget {
      @override
      _PickImagesState createState() => _PickImagesState();
    }
    
    class _PickImagesState extends State<PickImages> {
      static final String uploadEndPoint = 'https://******************.php';
      List<Object> images = List<Object>();
      Future<File> _imageFile;
      bool _isVisible = false;
      String base64Image;
      List imagecode=[];
      List name=[];
      Future _onAddImageClick(int index, int type) async {
        if (images != null)
          setState(() {
            // ignore: deprecated_member_use
            _imageFile = ImagePicker.pickImage(
              source: type == 1 ? ImageSource.camera : ImageSource.gallery,
              imageQuality: 50,
            );
            getFileImage(index);
          });
      }
    
      void getFileImage(int index) async {
        _imageFile.then((file) async {
          setState(() {
            ImageUploadModel imageUpload = new ImageUploadModel();
            imageUpload.imageFile = file;
            images.replaceRange(index, index + 1, [imageUpload]);
          });
        });
      }
    
      void showImageBox() {
        setState(() {
          _isVisible = !_isVisible;
        });
      }
    
      @override
      void initState() {
        super.initState();
        setState(() {
          images.add("Add Image");
          images.add("Add Image");
          images.add("Add Image");
          images.add("Add Image");
          images.add("Add Image");
          images.add("Add Image");
        });
      }
    
    
      startUpload() async{
        String NameImage = DateTime.now().millisecondsSinceEpoch.toString();
        {for(int i=0;i<=imagecode.length;i++){
          await http.post(uploadEndPoint, body: {
            "image": imagecode[i],
            "NameImage": name[i],
    
          }).then((result) {
            if (result.statusCode == 200) {
              print('dddddddddddddddd ${result.statusCode}');
            } else {
    
            }
          });
        }}
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Post Images'),
          ),
          body: Column(
            children: <Widget>[
              Container(
                //padding: EdgeInsets.only(right: 5),
                child: Card(
                  elevation: 5,
                  child: ListTile(
                    trailing: Icon(Icons.attachment),
                    title: Text('Attachments'),
                    onTap: () {
                      showImageBox();
                    },
                  ),
                ),
              ),
              Visibility(
                visible: _isVisible,
                child: Padding(
                  padding: const EdgeInsets.only(top: 5.0, right: 5.0),
                  child: GridView.count(
                    shrinkWrap: true,
                    crossAxisCount: 3,
                    childAspectRatio: 1,
                    children: List.generate(images.length, (index) {
                      if (images[index] is ImageUploadModel) {
                        ImageUploadModel uploadModel = images[index];
                        //base64 image
                        List<int> imageBytes = uploadModel.imageFile.readAsBytesSync();
                        // base64Image = base64Encode(snapshot.data.readAsBytesSync());
                        base64Image = base64Encode(imageBytes); //'base64Image' holds the base64 image string
                        imagecode.add(base64Image);
                        name.add(uploadModel.imageFile.path.split("/").last);
                        return Card(
                          clipBehavior: Clip.antiAlias,
                          child: Stack(
                            children: <Widget>[
                              Image.file(
                                uploadModel.imageFile,
                                fit: BoxFit.cover,
                                width: 300,
                                height: 300,
                              ),
                              Positioned(
                                right: 5,
                                top: 5,
                                child: InkWell(
                                  child: Icon(
                                    Icons.remove_circle,
                                    size: 20,
                                    color: Colors.red,
                                  ),
                                  onTap: () {
                                    setState(() {
                                      images.replaceRange(
                                          index, index + 1, ['Add Image']);
                                    });
                                  },
                                ),
                              ),
    
                            ],
                          ),
                        );
                      } else {
                        return Card(
                          child: IconButton(
                            icon: Icon(Icons.camera_alt),
                            onPressed: () {
                              showModalBottomSheet(
                                context: context,
                                builder: (BuildContext context) {
                                  return SafeArea(
                                    child: Container(
                                      child: new Wrap(
                                        children: <Widget>[
                                          new ListTile(
                                            leading: new Icon(Icons.photo_camera),
                                            title: new Text('Camera'),
                                            onTap: () {
                                              _onAddImageClick(index, 1);
                                              Navigator.of(context).pop();
                                            },
                                          ),
                                          new ListTile(
                                              leading:
                                              new Icon(Icons.photo_library),
                                              title: new Text('Gallery'),
                                              onTap: () {
                                                _onAddImageClick(index, 2);
                                                Navigator.of(context).pop();
                                              }),
                                        ],
                                      ),
                                    ),
                                  );
                                },
                              );
                            },
                          ),
                        );
                      }
                    }),
                  ),
                ),
              ),
              RaisedButton(
                child: Text('send'),
                onPressed: () {
                  startUpload();
                },
              ),
            ],
          ),
        );
      }
    }
    
    class ImageUploadModel {
      File imageFile;
    
      ImageUploadModel({
        this.imageFile,
      });
    }

     

     

    ياليت اذا احد يعرف شو السبب يفيدنا بطريقة الحل لها 

    شكرا لكم

  10. بتاريخ 6 دقائق مضت قال Nuhla Almasri:

    نعم صحيح حسنا يمكنك إستعمال شئ يسمى multi_image_picker و هي طريقة لتحميل عدة صورة بنفس الوقت دون الحاجة الى عمل اكثر من كبسةهنا يوجد مثال كيفية إستخدام هذه المكتبة بدلا من المكتبة العادية :

    https://pub.dev/packages/multi_image_picker/example

     

     

     

    اهلا بك اخي الكريم نعم لقد وجدتها ولكن الشكل الخارجي لفكرتي كان مختلف لذلك لم ارغب بستعمالها

  11. بتاريخ 1 ساعة قال Nuhla Almasri:

    دائما يكون حل هذه الأمور بطريقة بسيطة يمكنك ان تقوم بعمل مصفوفة تحفظ لك الصور المحملة و بعد أن تقوم بتخميل كامل للصورة يمكنك أن تعيد الحالة الى ما كانت عليه سابقا  أي فارغة و كلما حملت صورة سيتم حفظها داخل المصفوفة و عند عرضها يمكنك أخذ جميع البيانات منها و عرض كل واحد على حدة انا لست خبيرة بالفلاتر و لكن هذا دائما ما يكون الحل لجميع الأكواد المكرره او حتى يمكنك عمل class صنف يحتوي على تعريف الامور التي ستقوم بتخزينها لكل صورة  العنوان و القيمة الحقيقة للصورة و من ثم حفظها بمصفوفة 

    اهلا بك اخي الكريم نعم انا بعد بحث طويل قمت بعمل list  لصور مع تغير بسيط على الكود وقد نجح الامر 

    كل الشكر لك اخي الكريم 

    • أعجبني 1
  12. السلام عليكم ورحمة الله وبركاته 

    تحيه طيبه للجميع 

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

    احتاج مساعده من الذي لديه خبره في الامر لختصار العملية او الكود هذا كود الصفحه كامل الان: قمت بوضع علامة // هنا ================================= على المواقع التي قمت بتكرارها للحصول على الكود هذا

    
    
    
    
    
    
    
    void main() {
      runApp(
        MyApp(),
    
      );
    }
    
    class MyApp extends StatelessWidget {
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: '',
          theme: ThemeData(
            primarySwatch: Colors.blue,
            visualDensity: VisualDensity.adaptivePlatformDensity,
          ),
          home: UploadImageDemo(),
        );
      }
    }
    class UploadImageDemo extends StatefulWidget {
      UploadImageDemo() : super();
    
      final String title = "";
    
      @override
      UploadImageDemoState createState() => UploadImageDemoState();
    }
    
    
    class UploadImageDemoState extends State<UploadImageDemo> {
    
      final _formKey = GlobalKey<FormState>();
    
      static final String uploadEndPoint = 'https://******************.php';
      Future<File> file,files,filess;// هنا =================================
      String status = '';
      String base64Image,base64Images,base64Imagess;// هنا =================================
      File tmpFile,tmpFiles,tmpFiless;// هنا =================================
      String errMessage = 'Error_Uploading';
      showAlertDialog(BuildContext context) {
        AlertDialog alert = AlertDialog(
          content: new Row(
            children: [
              CircularProgressIndicator(),
              Container(
                  margin: EdgeInsets.only(left: 5),
                  child: Text("Addingpleasewait")),
            ],
          ),
        );
        showDialog(
          barrierDismissible: false,
          context: context,
          builder: (BuildContext context) {
            return alert;
          },
        );
        // Navigator.of(context, rootNavigator: true).pop();
      }
    
    
    
    
    
      showAlertDialogs(BuildContext context) {
        AlertDialog alert = AlertDialog(
          content: new Row(
            children: [
              CircularProgressIndicator(),
              Container(
                  margin: EdgeInsets.only(left: 5),
                  child: Text("Addingpleasewait")),
            ],
          ),
        );
        showDialog(
          barrierDismissible: false,
          context: context,
          builder: (BuildContext context) {
            return alert;
          },
        );
     
      }
    
    
    // هنا =================================
      chooseImage() {
        setState(() {
          file = ImagePicker.pickImage(source: ImageSource.gallery);
        });
        setStatus('');
       
      }
      // هنا =================================
      chooseImages() {
        setState(() {
          files = ImagePicker.pickImage(source: ImageSource.gallery);
        });
        setStatus('');
       
      }
      // هنا =================================
      chooseImagess() {
        setState(() {
          filess = ImagePicker.pickImage(source: ImageSource.gallery);
        });
        setStatus('');
      
      }
      setStatus(String message) {
        setState(() {
          status = message;
        });
      }
    
    
    
    
      Future<void> showMyDialog() async {
        return showDialog<void>(
          context: context,
          barrierDismissible: false, // user must tap button!
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('Attentions'),
              content: SingleChildScrollView(
                child: ListBody(
                  children: <Widget>[
                    Text('Allfieldsarerequired'),
                    //   Text('Would you like to approve of this message?'),
                  ],
                ),
              ),
              actions: <Widget>[
                FlatButton(
                  child: Text('Closes'),
                  onPressed: () {
                    Navigator.of(context).pop();
    
                  },
                ),
              ],
            );
          },
        );
      }
    
    
    
    
    
      startUpload() {
    
        if (null == tmpFile) {
          setStatus(errMessage);
          return;
        }
        showAlertDialog(context);
    
        String NameImage = DateTime.now().millisecondsSinceEpoch.toString();// هنا =================================
        String NameImages = DateTime.now().microsecond.toString();// هنا =================================
        String NameImagess = DateTime.now().month.toString();// هنا =================================
        //=======================Date
        String DataOfToday;
        var date = new DateTime.now().toString();
        var dateParse = DateTime.parse(date);
        var formattedDate = "${dateParse.day}-${dateParse.month}-${dateParse.year}";
        setState(() {
          DataOfToday = formattedDate.toString();
        });
    
    //=======================Date
        upload(NameImage,NameImages,NameImagess);// هنا =================================
      }
    
      upload(
    
          String NameImage,NameImages,NameImagess// هنا =================================
    
    
          ) {
        http.post(uploadEndPoint, body: {
          "image": base64Image,// هنا =================================
          "images": base64Images,// هنا =================================
          "imagess": base64Imagess,// هنا =================================
          "NameImage": NameImage,// هنا =================================
          "NameImages": NameImages,// هنا =================================
          "NameImagess": NameImagess,// هنا =================================
    
        }).then((result) {
    
          if (result.statusCode == 200) {
            _ShowDialog("added");
          } else {
            _ShowDialog("UpdateFailure");
          }
        }).catchError((error) {
          setStatus(error);
        });
      }
    
    
    
    
    
    
    
    
      Future<String> _ShowDialog(String msg) async {
        return showDialog<String>(
          context: context,
          barrierDismissible: false, // user must tap button!
          builder: (BuildContext context) {
            return new AlertDialog(
              title: new Text('Attentions'),
              content: new SingleChildScrollView(
                child: new ListBody(
                  children: <Widget>[
                    new Text(msg),
                  ],
                ),
              ),
              actions: <Widget>[
                new FlatButton(
                  child: new Text('Closes'),
                  onPressed: () {
                    // Navigator.pop(context);
                    Navigator.of(context, rootNavigator: true).pop();
    
                  },
                ),
              ],
            );
          },
        );
      }
    // هنا =================================
      Widget showImage() {
        return FutureBuilder<File>(
          future: file,
          builder: (BuildContext context, AsyncSnapshot<File> snapshot) {
            if (snapshot.connectionState == ConnectionState.done &&
                null != snapshot.data) {
              tmpFile = snapshot.data;
              base64Image = base64Encode(snapshot.data.readAsBytesSync());
              return Flex(direction: Axis.horizontal, children: [
                Expanded(
                  child: Card(
                    child: SizedBox(
                      width: 400.0,
                      height: 300.0,
                      child: Image.file(snapshot.data, fit: BoxFit.cover,),
                    ),
                  ),
                ),
              ]);
            } else if (null != snapshot.error) {
              return const Text(
                'Error Picking Image',
                textAlign: TextAlign.center,
              );
            } else {
              return const Text(
                '',
                textAlign: TextAlign.center,
              );
            }
          },
        );
      }
    // هنا =================================
      Widget showImages() {
        return FutureBuilder<File>(
          future: files,
          builder: (BuildContext context, AsyncSnapshot<File> snapshot) {
            if (snapshot.connectionState == ConnectionState.done &&
                null != snapshot.data) {
              tmpFiles = snapshot.data;
              base64Images = base64Encode(snapshot.data.readAsBytesSync());
              return Flex(direction: Axis.horizontal, children: [
                Expanded(
                  child: Card(
                    child: SizedBox(
                      width: 400.0,
                      height: 300.0,
                      child: Image.file(snapshot.data, fit: BoxFit.cover,),
    
                    ),
                  ),
                ),
              ]);
            } else if (null != snapshot.error) {
              return const Text(
                'Error Picking Image',
                textAlign: TextAlign.center,
              );
            } else {
              return const Text(
                '',
                textAlign: TextAlign.center,
              );
            }
          },
        );
      }
      // هنا =================================
      Widget showImagess() {
        return FutureBuilder<File>(
          future: filess,
          builder: (BuildContext context, AsyncSnapshot<File> snapshot) {
            if (snapshot.connectionState == ConnectionState.done &&
                null != snapshot.data) {
              tmpFiless = snapshot.data;
              base64Imagess = base64Encode(snapshot.data.readAsBytesSync());
              return Flex(direction: Axis.horizontal, children: [
                Expanded(
                  child: Card(
                    child: SizedBox(
                      width: 400.0,
                      height: 300.0,
                      child: Image.file(snapshot.data, fit: BoxFit.cover,),
    
                    ),
                  ),
                ),
              ]);
            } else if (null != snapshot.error) {
              return const Text(
                'Error Picking Image',
                textAlign: TextAlign.center,
              );
            } else {
              return const Text(
                '',
                textAlign: TextAlign.center,
              );
            }
          },
        );
      }
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: AppBar(
            title: Text("Add"),
    
            actions: <Widget>[
    
              IconButton(
                icon: Icon(
                  Icons.done,
                  color: Colors.white,
                ),
                onPressed: () {
                  if (_formKey.currentState.validate()) {
    
                    startUpload();
    
                  }
    
                },
    
    
              )
    
    
            ],
          ),
          body: Form(
            key: _formKey,
            child: SingleChildScrollView(
              child: new Center(
    
    
    
    
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.stretch,
                  children: <Widget>[
    
                    Container(
                      child: Column(
                          crossAxisAlignment: CrossAxisAlignment.stretch,
                          children: <Widget>[
                            Card(
                              child: Column(
                                children: [
                                  showImage(),
                                  showImages(),
                                  showImagess(),
                                ],
                              ),
                            ),
                            Card(
                              elevation: 2,
                              child: Row(
                                crossAxisAlignment: CrossAxisAlignment.center,
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: <Widget>[
                                  Container(
                                    child: IconButton(
                                      icon: Icon(
                                        Icons.camera_alt,
                                        color: Colors.black,
                                        size: 38,
                                      ),
                                      onPressed: () {
                                        chooseImage();
                                      },
                                    ),
                                  ),
                                  Container(
                                    child: IconButton(
                                      icon: Icon(
                                        Icons.camera_alt,
                                        color: Colors.black,
                                        size: 38,
                                      ),
                                      onPressed: () {
                                        chooseImages();
                                      },
                                    ),
                                  ),
                                ],
                              ),
                            ),
    
    
    
    
    
    
                          ]
                      ),
                    ) ,
    
    
    
    
                  ],
                ),
              ),
            ),
          ),
        );
      }
    }

    ياليت اذا احد لديه الخبره الكافيه يساعدنا بارك الله فيكم

  13. بتاريخ 6 ساعات قال بلال زيادة:

    بعد إرجاع الصور من الباك أند تقوم بإضافتهن إلى  List images مثل ما هو موجود في الكود الخاص بك. هل ممكن ترفق جزء الإستعلام عن البيانات من الباك اند في flutter ؟

    اهلا بك اخي 

    هذا الكود ليس مرتبط ب قاعدة بيانات الان

    انا احصل على الصور من الهاتف وعرضها الان وارغب بتحميلها او عمل upload لها 

     

    بتاريخ 6 ساعات قال بلال زيادة:

    بعد إرجاع الصور من الباك أند تقوم بإضافتهن إلى  List images مثل ما هو موجود في الكود الخاص بك. هل ممكن ترفق جزء الإستعلام عن البيانات من الباك اند في flutter ؟

    ما احتاجه هو عكس ما فهمت انت اخي الكريم اما ارغب بطريقة عمل upload. لمجموعة الصور المختاره

  14. السلام عليكم ورحمة الله وبركاته

    تحيه طيبه للجميع

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

     

    import 'dart:io';
    
    import 'package:flutter/material.dart';
    import 'package:image_picker/image_picker.dart';
    
    void main() => runApp(new SingleImageUpload());
    
    class SingleImageUpload extends StatefulWidget {
      @override
      _SingleImageUploadState createState() {
        return _SingleImageUploadState();
      }
    }
    
    class _SingleImageUploadState extends State<SingleImageUpload> {
      List<Object> images = List<Object>();
      Future<File> _imageFile;
      @override
      void initState() {
        // TODO: implement initState
        super.initState();
        setState(() {
          images.add("Add Image");
          images.add("Add Image");
          images.add("Add Image");
          images.add("Add Image");
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          home: new Scaffold(
            appBar: new AppBar(
              centerTitle: true,
              title: const Text('Plugin example app'),
            ),
            body: Column(
              children: <Widget>[
                Expanded(
                  child: buildGridView(),
                ),
              ],
            ),
          ),
        );
      }
    
      Widget buildGridView() {
        return GridView.count(
          shrinkWrap: true,
          crossAxisCount: 3,
          childAspectRatio: 1,
          children: List.generate(images.length, (index) {
            if (images[index] is ImageUploadModel) {
              ImageUploadModel uploadModel = images[index];
      
              return Card(
                clipBehavior: Clip.antiAlias,
                child: Stack(
                  children: <Widget>[
                    Image.file(
                      uploadModel.imageFile,
                      width: 300,
                      height: 300,
                    ),
                    Positioned(
                      right: 5,
                      top: 5,
                      child: InkWell(
                        child: Icon(
                          Icons.remove_circle,
                          size: 20,
                          color: Colors.red,
                        ),
                        onTap: () {
                          setState(() {
                            images.replaceRange(index, index + 1, ['Add Image']);
                          });
                        },
                      ),
                    ),
                  ],
                ),
              );
            } else {
              return Card(
                child: IconButton(
                  icon: Icon(Icons.add),
                  onPressed: () {
                    _onAddImageClick(index);
                  },
                ),
              );
            }
          }),
        );
      }
    
      Future _onAddImageClick(int index) async {
        setState(() {
          _imageFile = ImagePicker.pickImage(source: ImageSource.gallery);
          getFileImage(index);
        });
      }
    
      void getFileImage(int index) async {
    //    var dir = await path_provider.getTemporaryDirectory();
    
        _imageFile.then((file) async {
          setState(() {
            ImageUploadModel imageUpload = new ImageUploadModel();
            imageUpload.isUploaded = false;
            imageUpload.uploading = false;
            imageUpload.imageFile = file;
            imageUpload.imageUrl = '';
    
            images.replaceRange(index, index + 1, [imageUpload]);
          });
        });
      }
    }
    
    class ImageUploadModel {
      bool isUploaded;
      bool uploading;
      File imageFile;
      String imageUrl;
    
      ImageUploadModel({
        this.isUploaded,
        this.uploading,
        this.imageFile,
        this.imageUrl,
      });
    }

     

    • أعجبني 1
  15. بتاريخ 2 ساعات قال Wael Aljamal:

    لتجميع عدة أسطر من جدول في قاعدة البيانات والاستعلام عنها سويا، يمكننا وضع حقل جديد للجدول باسم Topic مثلا ونضعه بنفس القيمة لكل الأسطر التي تنتي له بحيث تأخذ قيمته نص أو رقم .. وعند الاستعلام عن المجموعة نمرر في عبارة SELECT هذا الحقل مع القيمة المناسبة ل Topic ليعيد لنا الأسطر التي نريدها.

    
    SELECT * form PHOTOS where topic = 'e-commerce';

    بفرض لديك 4 صرور لموضوع التجارة الالكترونية سيقوم هذا الاستعلام بجلبهم.

    بعد جلب روابط الصور، يمكنك تحميلهم بأي طريقة ترغب ضمن Flutter.

    كل الشكر لك اخي على الافاده قمت بعمل جدول منفصل وربط الصور مع المواضيع من خلال id  والامر ناجح 

     

    بتاريخ 2 ساعات قال Adnane Kadri:

    يمكننا إستغلال ميزة قواعد البيانات العلائقية لتحقيق الغرض بمنطق مشابه للتالي : 

    1. لنقم بإنشاء جدول للمواضيع بقاعدة البيانات و ليكن topics .
    2. نقوم بإنشاء جدول للصور و ليحتوي على مفتاح أجنبي كعمود : topic_id , يمثل عمود الـ id بجدول المواضيع . فتكون العلاقة بين جدول المواضيع و الصور one to many . 
    3. طباعة وتنفيذ إستعلام لجلب الصور ذات موضوع محدد على هذا النحو : 
    
    SELECT * FROM PHOTOS WHERE topic_id = 'YOUR_TOPIC_ID_HERE';

    و سيسهل عرضها مباشرة عن طريق الفلاتر . 

    اهلا بك اخي

    كل الشكر على الافاده والمقترح 

    قمت بعمل جدول منفصل وربط الصور مع المواضيع من خلال id

    • أعجبني 1
  16. في حالة ارغب بتحميل مجموعة صور عددهم 4 صور ولكن كل هذيله الصور لموضوع واحد مثل التطبيقات التجاريه وتطبيقات نشر المواضيع

    كيف تكون الفكره ؟ بحيث كل الصور تكون لموضوع واحد؟

    ايضا كيف ممكن نطبقها في flutter +mysql db

    • أعجبني 1
  17. بتاريخ 6 دقائق مضت قال بلال زيادة:

    سوف تقوم بإرجاع قيمة حقل كلمة المرور وهي مشفرة و من ثم تدخل كلمة المرور وهي مثلا 123 إلى دالة md5 بهذا الشكل 

    
    md5(123)

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

    
    if(md5(123) == $row['password']){
    	//....
    }

    ملاحظ الكود توضيح.

    لن تستعمل password_verify في عملية التحقق

    اهلا بك اخي الكريم

    فعلا نجح الامر يعني المشكله كلها كانت في md5 

    ما هو الفرق لو تكرمت الذي حدث بين password_verify و md5 ؟

    • أعجبني 1
  18. قمت بعمل صفحة php من خلالها ارغب بتحقق فقط من وجود هذا الباسورد في قاعدة البيانات ام لا 

    ولكن لا اعلم ما هو الخطاء بتحديد ولكن حتى لو كان الرقم صحيح الان يرجى الى بيانات انه خطاء

    <?php
    include 'con.php';
     
     $json = file_get_contents('php://input');
     $_POST = json_decode($json,true);
     $pass =  '02cb962ac59075b964b07152d234b70';
    
    
    
    $sql = "SELECT * FROM user WHERE pass=?"; // SQL with parameters
    $stmt = $con->prepare($sql); 
    $stmt->bind_param("s", $pass);
    $stmt->execute();
    $result = $stmt->get_result(); // get the mysqli result
    $user = $result->fetch_assoc(); // fetch data   
    
    if($user){
          $pass= '02cb962ac59075b964b07152d234b70';
    
     if (password_verify($pass, $user["pass"])) {
       
         $check['result'] = 'Login Matched';
         $SuccessMSG = json_encode($check);
         echo $SuccessMSG ; 
    } else {
       $InvalidMSG= array("result"=>"Invalid Username or Pasfffffsword Please Try Again");
            $InvalidMSGJSon = json_encode($InvalidMSG);
             echo $InvalidMSGJSon ;
      }
    
    }else{
         $InvalidMSG= array("result"=>"Invalid Username or Password Please Try Again");
            $InvalidMSGJSon = json_encode($InvalidMSG);
             echo $InvalidMSGJSon ;
    
    }
    
     mysqli_close($con);
     
    
     
     
    ?>

     

    هذا الكود المستعمل والرقم السري الان 123 قمت بمحاولات مختلفه لمعرفة المشكله

    ياليت اذا احد يعرف سبب المشكله او الخطاء في الكود يفيدنا 

    المتفرض احصل على نتيجة :

      $check['result'] = 'Login Matched';

     

    • أعجبني 1
  19. بتاريخ On 5/8/2021 at 04:56 قال يوسف احمد9:

    هناك شئ أسمه Topic فى الفاير بيز هو شئ يشبه الجروب بحيث تجعل كل المستخدمين يقومون بعمل subscribe لهذا ال Topic

    ويمكنك من خلال الباك إند إرسال نوتفكيشن لهذا ال Topic

    فلو إفترضنا أنه نريد أن نرسل لكل المستخدمين أن يوجد عرض جديد أو ماشابه ذلك .. من خلال التطبيق نجعل المستخدمين يقومون بعمل subscribe ل Topic يسمى offers مثلا ... ومن خلال البوست مان أو الباك إند الخاصه بك يمكنك إرسال إشعار لهذا ال Topic

    هلا بيك اخي الكريم

    شاكر لك ردك اخي

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

    بنسبه الى الاستعمال قمت بتجربه من خلال فلاتر بنفس والامر ناجح

    الشكر لك من جديد على الافاده واعتذر على تاخر الرد

    @بلال زيادة

    اهلا بك اخي الكريم

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

    كل الشكر لك اخي الكريم على افادتك

    • أعجبني 1
  20. السلام عليكم ورحمة الله وبركاته 

    تحيه طيبه للجميع 

    ارغب بارسال رسالة لكل الاجهزة التي تم تثبيت تطبيقي عليها من خلال اشعارات FCM

    من خلال تطبيق فلاتر 

    اذا كنت برسل الى جهاز واحد الامر بسيط ناخذ التوكن فقط لذلك الاجهاز ونرسل الاشعار له خصيصا

    ولكن اذا كنت ارغب لكل الاجهزة كيف يمكن فعل ذلك؟ من خلال صفحة FCM  فقط نحدد حزمة التطبيق ولكن انا ارغب من خلال التطبيق نفسه ارسل الى باقي الاجهزة

     

    هل من افكار لفعل ذلك؟ احد يعرف الطريقة؟

    • أعجبني 1
  21. بتاريخ منذ ساعة مضت قال بلال زيادة:

    الأمر بسيط جداً , يمكنك تغيير القيمة التالية 

    
    itemCount: GetData.length,

    إلى أي رقم تريده وليكن مثلاً 6 بهذا الشكل

    
    itemCount: 6,

    بحيث سيظهر فقط 6 منتجات فقط.

    كل الشكر لك اخي الكريم 

    نجح الامر

    • أعجبني 1
  22. السلام عليكم ورحمة الله وبركاته

    تحيه طيبه للجميع

    كثير نشاهد في التطبيقات في القائمة الرئيسية او صفحه البداية يتم عرض مجموعة منتجات ولكن بشكل ناقص بمعنى قائمة تحتوي على 6 منتجات مثلا فقط ويتم وضع خط نصي يمكن الضغط عليه تحت اسم ( شاهد الكل ) او view all or see all  وما شابه

    كيف يمكن عملها او كيف يتم تحديد عدد عناصر القائمة 

    مثال على المطلوب صوره لتوضيح:

    6093ee1148b97_WhatsAppImage2021-05-06at5_20_16PM.thumb.jpg.582371f534a5d2fdaec78facb4dc51b0.jpg

     

     

    الذي تم وضع عليه لون الاحمر هذا المنطقه التي احاول معرفة طريقة برمجتها 

    ياليت الذي جرب قبل يفيدنا 

    مع العلم اني استعمل الكود التالي في برنامجي:

    import 'CategoryData.dart';
    
    void main() {
      runApp(
        MyAffpp(),
      );
    }
    
    class MyAffpp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: SecondCategryPage(),
        );
      }
    }
    
    class SecondCategryPage extends StatefulWidget {
      @override
      _HomePageState createState() => _HomePageState();
    }
    
    class _HomePageState extends State<SecondCategryPage> {
      var image;
      var apiURL;
      List<Category> GetData = List();
      @override
      void initState() {
        FetchTopic().then((value) {
          setState(() {
            GetData.addAll(value);
          });
        });
        super.initState();
      }
    
      Future<List<Category>> FetchTopic() async {
        apiURL = 'https://***********/testpage.php';
        var response = await http.get(apiURL);
        if (response.statusCode == 200) {
          final items = json.decode(response.body).cast<Map<String, dynamic>>();
          List<Category> listOfFruits = items.map<Category>((json) {
            return Category.fromJson(json);
          }).toList();
    
          return listOfFruits;
        } else {
          //   _showMessageInScaffold('no data');
          throw Exception('Failed to load data from Server.');
        }
      }
    
    
    
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Container(
            child: Center(
              child: Column(children: <Widget>[
                Flexible(
                  child: GridView.builder(
                    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                        crossAxisCount: 3,
                        crossAxisSpacing: 2.0,
                        mainAxisSpacing: 2.0,
                        childAspectRatio: 2.1 / 3),
                    itemCount: GetData.length,
                    itemBuilder: (BuildContext context, int index) {
                      return Container(
                        child: Card(
                          //  margin: EdgeInsets.all(5.0),
                          elevation: 3,
                          shape: RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(10)),
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.stretch,
                            children: <Widget>[
                              Expanded(
                                  child: GestureDetector(
                                child: Column(
                                    crossAxisAlignment: CrossAxisAlignment.stretch,
                                    children: <Widget>[
                                      ClipRRect(
                                        borderRadius: BorderRadius.vertical(
                                            top: Radius.circular(10.0)),
                                        child: Image.network(
                                            GetData[index].ImageURL,
                                            height: 120,
                                            fit: BoxFit.cover),
                                      ),
                                      // SizedBox(height: 8),
                                      // Divider(),
    
                                      Center(
                                        child: Column(
                                            crossAxisAlignment:
                                                CrossAxisAlignment.center,
                                            children: <Widget>[
                                              Text(GetData[index].Name),
                                            ]),
                                      ),
                                    ]),
                              )),
                            ],
                          ),
                        ),
                      );
                    },
                  ),
                )
              ]),
            ),
          ),
        );
      }
    }

    ولكم جزيل الشكر

     

×
×
  • أضف...