مروان مروان3

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

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

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

  • Days Won

    2

السُّمعة بالموقع

144 Excellent
  1. هلا بيك اخي انا ك تجربه قمت بحذف العناصر السته وابقيت على واحد وقمت بتحميل صورتان وحدث نفس الامر قام بحفظ بشكل متكرر image. add("add image); هذا العناصر
  2. اهلا بيك اخي شاكر لك ردك وافادتك ولكن اخي كيف يمكن تجنب هذا المشكله ؟ بحيث اني انا مخلي للمستخدم بالاساس 6 خيارات ما اريد اقلل يعني كيف يمكن تجنب هذا المشكله؟ بحيث لو كان مافيه صور او المستخدم ما كمل اختيار باقي الحقول لا يتم تكرار الامر؟ هل لديك فكره لو تكرمت
  3. السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع قمت بعمل كود يجلب الصور من الاستوديو للمستخدم ثم يستطيع المستخدم رفعها الى قاعدة البيانات 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, }); } ياليت اذا احد يعرف شو السبب يفيدنا بطريقة الحل لها شكرا لكم
  4. اهلا بك اخي الكريم نعم لقد وجدتها ولكن الشكل الخارجي لفكرتي كان مختلف لذلك لم ارغب بستعمالها
  5. اهلا بك اخي الكريم نعم انا بعد بحث طويل قمت بعمل list لصور مع تغير بسيط على الكود وقد نجح الامر كل الشكر لك اخي الكريم
  6. السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع قمت بعمل كود حتى استطيع من خلاله تمكين المستخدم من اختيار الصور من الاستوديو وتحميلها الى قاعدة البيانات على السيرفر الكود شغال ولكني لدي مشكله بسيطه انا جديد على فلاتر نوعا ما وخبرتي قليله شويه حتى استطيع تمكين المستخدم من اختيار 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(); }, ), ), ], ), ), ] ), ) , ], ), ), ), ), ); } } ياليت اذا احد لديه الخبره الكافيه يساعدنا بارك الله فيكم
  7. اهلا بك اخي هذا الكود ليس مرتبط ب قاعدة بيانات الان انا احصل على الصور من الهاتف وعرضها الان وارغب بتحميلها او عمل upload لها ما احتاجه هو عكس ما فهمت انت اخي الكريم اما ارغب بطريقة عمل upload. لمجموعة الصور المختاره
  8. السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع لدي كود يعمل بشكل جميل لختيار مجموعة من الصور من الهاتف وعرضهم للمستخدم . لكني محتاج مساعده لطريقة ربطه وجعله يقوم بتحميل هذا الصور الى قاعدة بيانات 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, }); }
  9. كل الشكر لك اخي على الافاده قمت بعمل جدول منفصل وربط الصور مع المواضيع من خلال id والامر ناجح اهلا بك اخي كل الشكر على الافاده والمقترح قمت بعمل جدول منفصل وربط الصور مع المواضيع من خلال id
  10. في حالة ارغب بتحميل مجموعة صور عددهم 4 صور ولكن كل هذيله الصور لموضوع واحد مثل التطبيقات التجاريه وتطبيقات نشر المواضيع كيف تكون الفكره ؟ بحيث كل الصور تكون لموضوع واحد؟ ايضا كيف ممكن نطبقها في flutter +mysql db
  11. اهلا بك اخي الكريم فعلا نجح الامر يعني المشكله كلها كانت في md5 ما هو الفرق لو تكرمت الذي حدث بين password_verify و md5 ؟
  12. قمت بعمل صفحة 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';
  13. هلا بيك اخي الكريم شاكر لك ردك اخي فعلا وجدت هذا الطريقة ووجدت اشخاص يقومون بحفظ كل توكلن المستخدمين في قاعدة البيانات وبعدها يتم استدعاء الجميع على شكل قائمة ويتم ارسال المسج للجميع ولكن من وجهة نظري هذا الطريقه بطيئه قليلا وقد تعمل ضغط على عكس نظام topic بنسبه الى الاستعمال قمت بتجربه من خلال فلاتر بنفس والامر ناجح الشكر لك من جديد على الافاده واعتذر على تاخر الرد @بلال زيادة اهلا بك اخي الكريم اعذرني على تاخر ردي نعم انا كنت ابحث في الموضوع منذ الامس الاخ يوسف تفضل بالفكره ولكن كنت ارغب بفعلها عن طريق فلاتر وفعلا وجدت طريقة حسب ما ذكرت انت هيا مثل ارسال الى جهاز واحد الفرق فقط نقوم باضافة topic المختار للمتابعة كل الشكر لك اخي الكريم على افادتك
  14. السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع ارغب بارسال رسالة لكل الاجهزة التي تم تثبيت تطبيقي عليها من خلال اشعارات FCM من خلال تطبيق فلاتر اذا كنت برسل الى جهاز واحد الامر بسيط ناخذ التوكن فقط لذلك الاجهاز ونرسل الاشعار له خصيصا ولكن اذا كنت ارغب لكل الاجهزة كيف يمكن فعل ذلك؟ من خلال صفحة FCM فقط نحدد حزمة التطبيق ولكن انا ارغب من خلال التطبيق نفسه ارسل الى باقي الاجهزة هل من افكار لفعل ذلك؟ احد يعرف الطريقة؟
  15. كل الشكر لك اخي الكريم نجح الامر