-
المساهمات
787 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
2
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
أجوبة بواسطة Flutter Dev
-
-
بتاريخ منذ ساعة مضت قال بلال زيادة:
ليس لديك أي كلاس ليتم إضافة الدالة إليه , لذلك يمكنك إنشاء كلاس بهذا الشكل
<?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
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
احاول ان اقلص عدد الكلاسات المستعمله لدي 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) في هذا الكلاس
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه وبعد
احاول عمل عمليتين في نفس الوقت بمعنى في وقت واحد / العملية الاولى من نوع ادخال insert وبعد الادخال هذا احتاج الى جلب id اخر id طبعا بيكون الخاص ب هذا الادخال في نفس الوقت
استعمله بيكون كالتالي : لدي كود اضافة بيانات مقسم الى قسمين يتم اضافة بيانات في جدولين مختلفات واحتاج الى ربط البيانات في الجدول الثاني ب نفس id اول جدول الذي سيتم ادراج البيانات فيه في بداية الامر .
كيف يمكن عمل ذلك بحيث نعمل ادخال بعدها جلب اخر معرف لهذا الادخال ؟ ام الامر لا يمكن فعله من خلال هذا الطريقة؟
- 1
-
بتاريخ 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
-
بتاريخ 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 وغيرها ولكن كل شي لم ينجح
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
الموضوع لرفع من بعد اذنكم المشكله ما زالت مستمره لم يتم ايجاد حل لها
-
بتاريخ 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);
هذا العناصر
-
بتاريخ الآن قال 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 خيارات ما اريد اقلل يعني كيف يمكن تجنب هذا المشكله؟ بحيث لو كان مافيه صور او المستخدم ما كمل اختيار باقي الحقول لا يتم تكرار الامر؟ هل لديك فكره لو تكرمت
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
قمت بعمل كود يجلب الصور من الاستوديو للمستخدم ثم يستطيع المستخدم رفعها الى قاعدة البيانات mysql من خلال تطبيق فلاتر
الكود شغال تمام ولكن توجد مشكله واحده في حالة قمت بتحميل صوره واحده الكود شغال كويس ولكن لو قمت باختيار مثلا صورتان او اكثر وقمت برفعها الى قاعدة البيانات يتم تكرار الاسم في قاعدة البيانات او تكرار الحقول اكثر من عدد الصور المرفوعه
مثال انا قمت بتجربة تحميل صورتان
وهذا النتيجة التي حصلت عليها :
تقريبا 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, }); }
ياليت اذا احد يعرف شو السبب يفيدنا بطريقة الحل لها
شكرا لكم
-
بتاريخ 6 دقائق مضت قال Nuhla Almasri:
نعم صحيح حسنا يمكنك إستعمال شئ يسمى multi_image_picker و هي طريقة لتحميل عدة صورة بنفس الوقت دون الحاجة الى عمل اكثر من كبسةهنا يوجد مثال كيفية إستخدام هذه المكتبة بدلا من المكتبة العادية :
https://pub.dev/packages/multi_image_picker/example
اهلا بك اخي الكريم نعم لقد وجدتها ولكن الشكل الخارجي لفكرتي كان مختلف لذلك لم ارغب بستعمالها
-
بتاريخ 1 ساعة قال Nuhla Almasri:
دائما يكون حل هذه الأمور بطريقة بسيطة يمكنك ان تقوم بعمل مصفوفة تحفظ لك الصور المحملة و بعد أن تقوم بتخميل كامل للصورة يمكنك أن تعيد الحالة الى ما كانت عليه سابقا أي فارغة و كلما حملت صورة سيتم حفظها داخل المصفوفة و عند عرضها يمكنك أخذ جميع البيانات منها و عرض كل واحد على حدة انا لست خبيرة بالفلاتر و لكن هذا دائما ما يكون الحل لجميع الأكواد المكرره او حتى يمكنك عمل class صنف يحتوي على تعريف الامور التي ستقوم بتخزينها لكل صورة العنوان و القيمة الحقيقة للصورة و من ثم حفظها بمصفوفة
اهلا بك اخي الكريم نعم انا بعد بحث طويل قمت بعمل list لصور مع تغير بسيط على الكود وقد نجح الامر
كل الشكر لك اخي الكريم
- 1
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
قمت بعمل كود حتى استطيع من خلاله تمكين المستخدم من اختيار الصور من الاستوديو وتحميلها الى قاعدة البيانات على السيرفر الكود شغال ولكني لدي مشكله بسيطه انا جديد على فلاتر نوعا ما وخبرتي قليله شويه حتى استطيع تمكين المستخدم من اختيار 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(); }, ), ), ], ), ), ] ), ) , ], ), ), ), ), ); } }
ياليت اذا احد لديه الخبره الكافيه يساعدنا بارك الله فيكم
-
بتاريخ 6 ساعات قال بلال زيادة:
بعد إرجاع الصور من الباك أند تقوم بإضافتهن إلى List images مثل ما هو موجود في الكود الخاص بك. هل ممكن ترفق جزء الإستعلام عن البيانات من الباك اند في flutter ؟
اهلا بك اخي
هذا الكود ليس مرتبط ب قاعدة بيانات الان
انا احصل على الصور من الهاتف وعرضها الان وارغب بتحميلها او عمل upload لها
بتاريخ 6 ساعات قال بلال زيادة:بعد إرجاع الصور من الباك أند تقوم بإضافتهن إلى List images مثل ما هو موجود في الكود الخاص بك. هل ممكن ترفق جزء الإستعلام عن البيانات من الباك اند في flutter ؟
ما احتاجه هو عكس ما فهمت انت اخي الكريم اما ارغب بطريقة عمل upload. لمجموعة الصور المختاره
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
لدي كود يعمل بشكل جميل لختيار مجموعة من الصور من الهاتف وعرضهم للمستخدم . لكني محتاج مساعده لطريقة ربطه وجعله يقوم بتحميل هذا الصور الى قاعدة بيانات 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
-
بتاريخ 2 ساعات قال Wael Aljamal:
لتجميع عدة أسطر من جدول في قاعدة البيانات والاستعلام عنها سويا، يمكننا وضع حقل جديد للجدول باسم Topic مثلا ونضعه بنفس القيمة لكل الأسطر التي تنتي له بحيث تأخذ قيمته نص أو رقم .. وعند الاستعلام عن المجموعة نمرر في عبارة SELECT هذا الحقل مع القيمة المناسبة ل Topic ليعيد لنا الأسطر التي نريدها.
SELECT * form PHOTOS where topic = 'e-commerce';
بفرض لديك 4 صرور لموضوع التجارة الالكترونية سيقوم هذا الاستعلام بجلبهم.
بعد جلب روابط الصور، يمكنك تحميلهم بأي طريقة ترغب ضمن Flutter.
كل الشكر لك اخي على الافاده قمت بعمل جدول منفصل وربط الصور مع المواضيع من خلال id والامر ناجح
بتاريخ 2 ساعات قال Adnane Kadri:يمكننا إستغلال ميزة قواعد البيانات العلائقية لتحقيق الغرض بمنطق مشابه للتالي :
- لنقم بإنشاء جدول للمواضيع بقاعدة البيانات و ليكن topics .
- نقوم بإنشاء جدول للصور و ليحتوي على مفتاح أجنبي كعمود : topic_id , يمثل عمود الـ id بجدول المواضيع . فتكون العلاقة بين جدول المواضيع و الصور one to many .
- طباعة وتنفيذ إستعلام لجلب الصور ذات موضوع محدد على هذا النحو :
SELECT * FROM PHOTOS WHERE topic_id = 'YOUR_TOPIC_ID_HERE';
و سيسهل عرضها مباشرة عن طريق الفلاتر .
اهلا بك اخي
كل الشكر على الافاده والمقترح
قمت بعمل جدول منفصل وربط الصور مع المواضيع من خلال id
- 1
-
في حالة ارغب بتحميل مجموعة صور عددهم 4 صور ولكن كل هذيله الصور لموضوع واحد مثل التطبيقات التجاريه وتطبيقات نشر المواضيع
كيف تكون الفكره ؟ بحيث كل الصور تكون لموضوع واحد؟
ايضا كيف ممكن نطبقها في flutter +mysql db
- 1
-
بتاريخ 6 دقائق مضت قال بلال زيادة:
سوف تقوم بإرجاع قيمة حقل كلمة المرور وهي مشفرة و من ثم تدخل كلمة المرور وهي مثلا 123 إلى دالة md5 بهذا الشكل
md5(123)
ثم يمكنك عمل شرط للتحقق من أن كلمة المرور المحفوظة في قاعدة البيانات تساوي كلمة المرور المدخلة بهذا الشكل
if(md5(123) == $row['password']){ //.... }
ملاحظ الكود توضيح.
لن تستعمل password_verify في عملية التحقق
اهلا بك اخي الكريم
فعلا نجح الامر يعني المشكله كلها كانت في md5
ما هو الفرق لو تكرمت الذي حدث بين password_verify و md5 ؟
- 1
-
قمت بعمل صفحة 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
-
بتاريخ On 5/8/2021 at 04:56 قال يوسف احمد9:
هناك شئ أسمه Topic فى الفاير بيز هو شئ يشبه الجروب بحيث تجعل كل المستخدمين يقومون بعمل subscribe لهذا ال Topic
ويمكنك من خلال الباك إند إرسال نوتفكيشن لهذا ال Topic
فلو إفترضنا أنه نريد أن نرسل لكل المستخدمين أن يوجد عرض جديد أو ماشابه ذلك .. من خلال التطبيق نجعل المستخدمين يقومون بعمل subscribe ل Topic يسمى offers مثلا ... ومن خلال البوست مان أو الباك إند الخاصه بك يمكنك إرسال إشعار لهذا ال Topic
هلا بيك اخي الكريم
شاكر لك ردك اخي
فعلا وجدت هذا الطريقة ووجدت اشخاص يقومون بحفظ كل توكلن المستخدمين في قاعدة البيانات وبعدها يتم استدعاء الجميع على شكل قائمة ويتم ارسال المسج للجميع ولكن من وجهة نظري هذا الطريقه بطيئه قليلا وقد تعمل ضغط على عكس نظام topic
بنسبه الى الاستعمال قمت بتجربه من خلال فلاتر بنفس والامر ناجح
الشكر لك من جديد على الافاده واعتذر على تاخر الرد
اهلا بك اخي الكريم
اعذرني على تاخر ردي نعم انا كنت ابحث في الموضوع منذ الامس الاخ يوسف تفضل بالفكره ولكن كنت ارغب بفعلها عن طريق فلاتر وفعلا وجدت طريقة حسب ما ذكرت انت هيا مثل ارسال الى جهاز واحد الفرق فقط نقوم باضافة topic المختار للمتابعة
كل الشكر لك اخي الكريم على افادتك
- 1
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
ارغب بارسال رسالة لكل الاجهزة التي تم تثبيت تطبيقي عليها من خلال اشعارات FCM
من خلال تطبيق فلاتر
اذا كنت برسل الى جهاز واحد الامر بسيط ناخذ التوكن فقط لذلك الاجهاز ونرسل الاشعار له خصيصا
ولكن اذا كنت ارغب لكل الاجهزة كيف يمكن فعل ذلك؟ من خلال صفحة FCM فقط نحدد حزمة التطبيق ولكن انا ارغب من خلال التطبيق نفسه ارسل الى باقي الاجهزة
هل من افكار لفعل ذلك؟ احد يعرف الطريقة؟
- 1
-
بتاريخ منذ ساعة مضت قال بلال زيادة:
الأمر بسيط جداً , يمكنك تغيير القيمة التالية
itemCount: GetData.length,
إلى أي رقم تريده وليكن مثلاً 6 بهذا الشكل
itemCount: 6,
بحيث سيظهر فقط 6 منتجات فقط.
كل الشكر لك اخي الكريم
نجح الامر
- 1
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
كثير نشاهد في التطبيقات في القائمة الرئيسية او صفحه البداية يتم عرض مجموعة منتجات ولكن بشكل ناقص بمعنى قائمة تحتوي على 6 منتجات مثلا فقط ويتم وضع خط نصي يمكن الضغط عليه تحت اسم ( شاهد الكل ) او view all or see all وما شابه
كيف يمكن عملها او كيف يتم تحديد عدد عناصر القائمة
مثال على المطلوب صوره لتوضيح:
الذي تم وضع عليه لون الاحمر هذا المنطقه التي احاول معرفة طريقة برمجتها
ياليت الذي جرب قبل يفيدنا
مع العلم اني استعمل الكود التالي في برنامجي:
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), ]), ), ]), )), ], ), ), ); }, ), ) ]), ), ), ); } }
ولكم جزيل الشكر
-
ربي يعطيكم الف عافيه شكرا
تقريبا اني قدرت اعملها او حصلت على نتتيجة تنفع حاليا
اعتذر على الاطاله وقل الخبره
- 2
-
بتاريخ 1 ساعة قال Wael Aljamal:
هل يمكنك عمل التالي:
- Delete your browser's cookies
- Clear your browser's cache
قمت بتغير المتصفح كامل وستعملت متصفح مكيروسفت ايدك
مع حذف بياناته كامل
المشكله نفسها تظهر ايضا
مشكلة حفظ الصور flutter
في جافا سكريبت
نشر
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
قمت بعمل كود لجلب الصور من الاستوديو وحفظها في قاعدة بيانات mysql
الكود شغال بشكل عام ولكن توجد مشكله لم استطع ايجاد حل لها
الصور يتم حفظها في مجلد الصور ولكن لا تظهر احصل على الرسالة التاليه:
وهذا شكل الصور في المجلد
ايضا الاسم في قاعدة البيانات يتكرر يعني لو عملت اول صورتين الامور رح تمشي تمام ولكن لو عملت اربع اسماء رح احصل على اثنان مع ان المفترض يكون الاسم مختلف مثال بشكل التالي:
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
الكود المستعمل كامل كالتالي:
ياليت اذا احد يعرف سبب المشكله يساعدنا ولكم جزيل الشكر