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

Flutter Dev

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

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

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

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

    2

كل منشورات العضو Flutter Dev

  1. تحيه طيبه للجميع اقوم بعرض مجموعة من الصور للمستخدم تم تخزينها مسبقا على قاعدة البيانات من خلال listview بالاضافة الى استعمال المكتبة : https://pub.dev/packages/wechat_assets_picker من خلالها اقوم باضافة المزيد من الصور بجانب الصور التي احصل عليها من قاعدة البيانات الى نفس listview السابقة. المشكله الان لما اذهب الى اختيار الصور واختار صور عدد (2) او (3) على سبيل المثال من الصور على الهاتف بعد الضغط على ادراج انا احصل على صوره واحده فقط وهيا اول صوره تم تحديدها من اصل (2) التي تم اختيارهم او (3) ولو رجعت لختيار مجموعة مختلفه من الصور رح اجد ان الصور تم تحديدها فعلا مسبقاً ولكن لم يتم سحبها الى listview ولو قمت بضغط على ادراج من جديد سوف يتم استكمال العملية وادراج الصوره التاليه التي سبق وتم تحديدها سابقاً. الكود المستعمل كالتالي كامل: import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:wechat_assets_picker/wechat_assets_picker.dart'; void main() { runApp( MyApp(), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: UpdateItem(), ); } } class UpdateItem extends StatefulWidget { @override _update_profiletttState createState() => new _update_profiletttState(); } class _update_profiletttState extends State<UpdateItem> { @override void initState() { super.initState(); init(); } void init() { GetImage().then((value) { setState(() { users.addAll(value); filteredUsers = users; }); }); } List<DataImage> users = []; List<DataImage> filteredUsers = []; final _formKeys = GlobalKey<FormState>(); var imagesCounter = 0; String api; Future<List<DataImage>> GetImage() async { api = '*****************************' ; var response = await http.post(Uri.parse(api)); if (response.statusCode == 200) { final items = json.decode(response.body).cast<Map<String, dynamic>>(); List<DataImage> listOfFruits = items.map<DataImage>((json) { return DataImage.fromJson(json); }).toList(); imagesCounter = listOfFruits.length; return listOfFruits; } } List<AssetEntity> assets = <AssetEntity>[]; @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Form( key: _formKeys, child: Center( child: ListView( children: <Widget>[ Card( child: new Column( children: <Widget>[ Container( child: Center( child: Column( children: <Widget>[ Padding( padding: EdgeInsets.all(0), child: SingleChildScrollView( child: SizedBox( child: Column( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Column( children: <Widget>[ AnimatedContainer( duration: kThemeAnimationDuration, curve: Curves.easeInOut, width: MediaQuery.of(context).size.width, height: filteredUsers.isNotEmpty ? 100.0 : 0.0, child: ListView.builder( physics: BouncingScrollPhysics(), scrollDirection: Axis.horizontal, itemCount: filteredUsers.length + 1 , itemBuilder: (BuildContext context, int index) { if (index < filteredUsers.length) { return Container( margin: const EdgeInsets.symmetric( horizontal: 0.5, vertical: 6.0), child: AspectRatio( aspectRatio: 1.0, child: Stack( children: <Widget>[ filteredUsers[index].isLocal ? Image( image: AssetEntityImageProvider( assets.elementAt(index-imagesCounter) , isOriginal: false, ), fit: BoxFit.cover, ) : Image.network( filteredUsers[index].ImageURL.toString(), width: double.infinity, height: 400, fit: BoxFit.cover, ), ], ), ), ); } else { return IconButton( icon: Icon(Icons.add,size: 50,), onPressed: () async { final List<AssetEntity> result = await AssetPicker.pickAssets(context, // maxAssets: 4, pathThumbSize: 84, gridCount: 4, selectedAssets: assets, maxAssets: 4 - imagesCounter, //we use this for languge textDelegate: EnglishTextDelegate()); if (result != null) { setState(() { assets = List<AssetEntity>.from(result); filteredUsers.add(DataImage( isLocal: true)); }); } }, ); } } //itemBuilder: assetItemBuilder, ), ) ], ), ], ), ), ), ), ], ), ), ), /* Card( child: showImage(), ),*/ ], ), ), ], ), )), ), ); } } class DataImage { bool isLocal; String ImageURL; DataImage( { this.ImageURL, this.isLocal = false}); factory DataImage.fromJson(Map<String, dynamic> json) { return DataImage( ImageURL: json['image'].toString(), ); } Map<String, dynamic> toJson() => { 'ImageURL': ImageURL, 'isLocal': isLocal, }; } ياليت اذا احد لديه فكره عن سبب المشكله وكيفية حلها يفيدنا بارك الله فيكم
  2. import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:wechat_assets_picker/wechat_assets_picker.dart'; void main() { runApp( MyApp(), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: UpdateItem(), ); } } class UpdateItem extends StatefulWidget { @override _update_profiletttState createState() => new _update_profiletttState(); } class _update_profiletttState extends State<UpdateItem> { @override void initState() { super.initState(); init(); } void init() { GetImage().then((value) { setState(() { users.addAll(value); filteredUsers = users; }); }); } List<DataImage> users = []; List<DataImage> filteredUsers = []; final _formKeys = GlobalKey<FormState>(); var imagesCounter = 0; String api; Future<List<DataImage>> GetImage() async { api = '*************************' ; var response = await http.post(Uri.parse(api)); if (response.statusCode == 200) { final items = json.decode(response.body).cast<Map<String, dynamic>>(); List<DataImage> listOfFruits = items.map<DataImage>((json) { return DataImage.fromJson(json); }).toList(); imagesCounter = listOfFruits.length; // هنا return listOfFruits; } } List<AssetEntity> assets = <AssetEntity>[]; @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Form( key: _formKeys, child: Center( child: ListView( children: <Widget>[ Card( child: new Column( children: <Widget>[ Container( child: Center( child: Column( children: <Widget>[ Padding( padding: EdgeInsets.all(0), child: SingleChildScrollView( child: SizedBox( child: Column( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Column( children: <Widget>[ AnimatedContainer( duration: kThemeAnimationDuration, curve: Curves.easeInOut, width: MediaQuery.of(context).size.width, height: filteredUsers.isNotEmpty ? 100.0 : 0.0, child: ListView.builder( physics: BouncingScrollPhysics(), scrollDirection: Axis.horizontal, itemCount: filteredUsers.length + 1 , itemBuilder: (BuildContext context, int index) { if (index < filteredUsers.length) { return Container( margin: const EdgeInsets.symmetric( horizontal: 0.5, vertical: 6.0), child: AspectRatio( aspectRatio: 1.0, child: Stack( children: <Widget>[ filteredUsers[index].isLocal ? Image( image: AssetEntityImageProvider( assets.elementAt(index-imagesCounter) ,// تم تعديل هنا ايضا isOriginal: false, ), fit: BoxFit.cover, ) : Image.network( filteredUsers[index].ImageURL.toString(), width: double.infinity, height: 400, fit: BoxFit.cover, ), ], ), ), ); } else { return IconButton( icon: Icon(Icons.add,size: 50,), onPressed: () async { final List<AssetEntity> result = await AssetPicker.pickAssets(context, // maxAssets: 4, pathThumbSize: 84, gridCount: 4, selectedAssets: assets, maxAssets: 4 - imagesCounter, //we use this for languge textDelegate: EnglishTextDelegate()); if (result != null) { setState(() { assets = List<AssetEntity>.from(result); filteredUsers.add(DataImage( isLocal: true)); }); } }, ); } } //itemBuilder: assetItemBuilder, ), ) ], ), ], ), ), ), ), ], ), ), ), /* Card( child: showImage(), ),*/ ], ), ), ], ), )), ), ); } } class DataImage { bool isLocal; String ImageURL; DataImage( { this.ImageURL, this.isLocal = false}); factory DataImage.fromJson(Map<String, dynamic> json) { return DataImage( ImageURL: json['image'].toString(), ); } Map<String, dynamic> toJson() => { 'ImageURL': ImageURL, 'isLocal': isLocal, }; } كل الشكر لك اخي الكريم
  3. مرحبا اخي الكريم شاكر لك ردك كقير اخوي فعلا الصور عددهم تحدد بشكل هذا ولكن المشكله لو قمت الى الان باختيار صوره واحده احصل على الخطاء المشار اليه في اول مشاركة ولو قمت باختيار صورتين في نفس الوقت او تحديد صورتين بالاصح لا تظهر ولكن ايضا تاتي الي صوره واحده فقط ولو قمت بـ الذهاب الى اختيار صور من جديد سوف اجد الصوره الثانيه تم تحديدها مسبقا في المحاولة الاولى يكفي ان اقوم بعمل تم او ادراج وستاتي هذا المشكله
  4. اهلا بك اخوي نعم انا ارغب باضافة صوره جديده من الهاتف الى list بجانب الصور التي تاتي من قاعدة البيانات هنا تحدث المشكله
  5. لدي ListView اجلب اليها مجموعة صور من قاعدة البيانات تم تخزينها مسابقا واعرضهم من خلال ListView . العرض شغال ويمكن مشاهدة الصور التي تاتي من قاعدة البيانات ولكني احاول في نفس الوقت اضافة صور جديده من الهاتف الى ListView + بجانب الصور التي تاتي من قاعدة البيانات مسبقا واستعمل المكتبه التاليه لختيار الصور: https://pub.dev/packages/wechat_assets_picker المشكله التي تحدث الان قاعدة البيانات تم وضع بها صوره واحده للاختبار فقط بعد تشغيل التطبيق الصوره تاتي من قاعدة البيانات ولكن مع محاولة اضافة صورة جديده واختيار صوره واحده من الهاتف احصل على الخطاء التالي: The following RangeError was thrown building: RangeError (index): Invalid value: Only valid value is 0: 1 When the exception was thrown, this was the stack: #0 List.[] (dart:core-patch/growable_array.dart:254:60) #1 List.elementAt (dart:core-patch/growable_array.dart:476:16) #2 _update_profiletttState.build.<anonymous closure> (package:flutter_application_1/testpage.dart:178:76) #3 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:456:22) #4 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1214:28) #5 SliverMultiBoxAdaptorElement.performRebuild.processElement (package:flutter/src/widgets/sliver.dart:1147:67) #6 Iterable.forEach (dart:core/iterable.dart:279:35) #7 SliverMultiBoxAdaptorElement.performRebuild (package:flutter/src/widgets/sliver.dart:1191:24) وهذا صوره توضح المشكله : ولكن لو قمت باختيار عدد 2 من الصور او اكثر المشكله هذا لا تحدث . باعتقادي ان سبب المشكله هو ان مكتبة جلب الصور لم يتم احتساب عدد الصور التي كانت متواجده مسابقا في القائمة حتى تستكمل العدد لست متاكد من ذلك, لا اعلم اذا كان توجد طريقه لحتساب الصور التي هيا متوفره مسبقا من خلال قاعدة البيانات. ايضا لو قمت باختيار مثلا 4 صور لن يتم جلب سوى صوره واحده فقط للقائمة. ياليت اذا احد لديه فكره عن حل للمشكله او سبق ان مر بمثلها يساعدنا في حلها ولكم جزيل الشكر. مرفق الصفحة كامل : import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:wechat_assets_picker/wechat_assets_picker.dart'; void main() { runApp( MyApp(), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: UpdateItem(), ); } } class UpdateItem extends StatefulWidget { @override _update_profiletttState createState() => new _update_profiletttState(); } class _update_profiletttState extends State<UpdateItem> { @override void initState() { super.initState(); init(); } void init() { GetImage().then((value) { setState(() { users.addAll(value); filteredUsers = users; }); }); } List<DataImage> users = []; List<DataImage> filteredUsers = []; final _formKeys = GlobalKey<FormState>(); String api; Future<List<DataImage>> GetImage() async { api = 'https://***************.php' ; var response = await http.post(Uri.parse(api)); if (response.statusCode == 200) { final items = json.decode(response.body).cast<Map<String, dynamic>>(); List<DataImage> listOfFruits = items.map<DataImage>((json) { return DataImage.fromJson(json); }).toList(); return listOfFruits; } } List<AssetEntity> assets = <AssetEntity>[]; @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Form( key: _formKeys, child: Center( child: ListView( children: <Widget>[ Card( child: new Column( children: <Widget>[ Container( child: Center( child: Column( children: <Widget>[ Padding( padding: EdgeInsets.all(0), child: SingleChildScrollView( child: SizedBox( child: Column( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Column( children: <Widget>[ AnimatedContainer( duration: kThemeAnimationDuration, curve: Curves.easeInOut, width: MediaQuery.of(context).size.width, height: filteredUsers.isNotEmpty ? 100.0 : 0.0, child: ListView.builder( physics: BouncingScrollPhysics(), scrollDirection: Axis.horizontal, itemCount: filteredUsers.length + 1 , itemBuilder: (BuildContext context, int index) { if (index < filteredUsers.length) { return Container( margin: const EdgeInsets.symmetric( horizontal: 0.5, vertical: 6.0), child: AspectRatio( aspectRatio: 1.0, child: Stack( children: <Widget>[ filteredUsers[index].isLocal ? Image( image: AssetEntityImageProvider( assets.elementAt(index) , isOriginal: false, ), fit: BoxFit.cover, ) : Image.network( filteredUsers[index].ImageURL.toString(), width: double.infinity, height: 400, fit: BoxFit.cover, ), ], ), ), ); } else { return IconButton( icon: Icon(Icons.add,size: 50,), onPressed: () async { final List<AssetEntity> result = await AssetPicker.pickAssets(context, maxAssets: 4, pathThumbSize: 84, gridCount: 4, selectedAssets: assets, //we use this for languge textDelegate: EnglishTextDelegate()); if (result != null) { setState(() { assets = List<AssetEntity>.from(result); filteredUsers.add(DataImage( isLocal: true)); }); } }, ); } } //itemBuilder: assetItemBuilder, ), ) ], ), ], ), ), ), ), ], ), ), ), /* Card( child: showImage(), ),*/ ], ), ), ], ), )), ), ); } } class DataImage { bool isLocal; String ImageURL; DataImage( { this.ImageURL, this.isLocal = false}); factory DataImage.fromJson(Map<String, dynamic> json) { return DataImage( ImageURL: json['image'].toString(), ); } Map<String, dynamic> toJson() => { 'ImageURL': ImageURL, 'isLocal': isLocal, }; }
  6. اهلا بك اخي نعم قمت بمحاولة بواسطة هذا المكتبه ولكني لا املك خبره سابقه في التعامل لديها انا استعمل http ياليت لو تكرمت تضع الكود كامل مع كود php الخاص فيها
  7. تحيه طيبه للجميع اقوم بستعمال المكتبة التاليه : https://pub.dev/packages/wechat_assets_picker لتمكين المستخدم من اختيار مجموعة من الصور وبعدها يتم رفع هذا الصور الى قاعدة البيانات على السيرفر بواسطة mysql + php +http احاول حفظ الصور التي يقوم المستخدم باختيارها الان ولكن الامر لا ينجح حتى انني لا اتلقى اي اشعار بوجود خطاء او ما شابه لا اعلم ما هيا المشكله بضبط الصفحه كامل كالتالي: import 'dart:io'; import 'package:flutter/material.dart'; import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:wechat_assets_picker/wechat_assets_picker.dart'; void main() { runApp( MyApp(), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: UploadImageDemo(), ); } } class UploadImageDemo extends StatefulWidget { @override UploadImageDemoState createState() => UploadImageDemoState(); } class UploadImageDemoState extends State<UploadImageDemo> { List<AssetEntity> assets = <AssetEntity>[]; Future<void> selectAssets() async { final List<AssetEntity> result = await AssetPicker.pickAssets( context, maxAssets: 4, pathThumbSize: 84, gridCount: 4, selectedAssets: assets, requestType: RequestType.common, ); if (result != null) { setState(() { assets = List<AssetEntity>.from(result); }); } } Widget imageWidget(int index) { return Positioned.fill( child: Image( image: AssetEntityImageProvider( assets.elementAt(index), isOriginal: false, ), fit: BoxFit.cover, ), ); } String base64Image; static final String UplodURL ='https://XXXXXXXXXXXXXXXXX.php'; void SaveDate() async { for (int i = 0; i < assets.length; i++) { if (assets[i].runtimeType == String) { final bytes = File(assets[i].toString()).readAsBytesSync(); base64Image = base64Encode(bytes); var response = await http.post(Uri.parse(UplodURL), body: { "image": base64Image, }); if (response.statusCode == 200) { setState(() { print(response.statusCode); }); } else {} } } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( actions: <Widget>[ IconButton( icon: Icon( Icons.save, color: Colors.black, ), onPressed: () { SaveDate(); }, ), IconButton( icon: Icon( Icons.add, color: Colors.black, ), onPressed: () { selectAssets(); }, ), ], ), body: Column( children: <Widget>[ AnimatedContainer( duration: kThemeAnimationDuration, curve: Curves.easeInOut, width: MediaQuery.of(context).size.width, height: assets.isNotEmpty ? 100.0 : 0.0, decoration: BoxDecoration( color: Theme.of(context).backgroundColor, ), child: ListView.builder( physics: const BouncingScrollPhysics(), scrollDirection: Axis.horizontal, itemCount: assets.length, itemBuilder: (BuildContext context, int index) { return Container( margin: const EdgeInsets.symmetric(horizontal: 5.0, vertical: 10.0), child: AspectRatio( aspectRatio: 1.0, child: ClipRRect( borderRadius: BorderRadius.circular(5.0), child: Stack( children: <Widget>[ imageWidget(index), ], ), ), ), ); } ), ), ], ), ); } } اما صفحة php كالتالي: <?php $image = $_POST['image']; include 'con.php'; $path = "img/" . uniqid() . ".png"; $actualpath = "https://***********/$path"; $sql = "INSERT INTO testtable (image) VALUES (?)"; $stmt = $con->prepare($sql); $stmt->bind_param("s",$actualpath); $stmt->execute(); $result = $stmt->get_result(); file_put_contents($path,base64_decode($image)); $stmt->close(); ?> بنسبة الى صفحة php انا واثق انها تعمل بدون اي مشكلة لنني قمت باختبار ذلك من خلال رابط الصفحه المشكله في كود حفظ الصور ()SaveDate في فلاتر ياليت اذا احد لديه فكره او معرفة بالمشكله يفيدنا لو تكرمتو
  8. من المفترض ان يقوم مطور الحزمة باضافة هذا الميزة ولا الحزمة ستعاني من مشكله + نقص لخصائص اساسيه بها كل الشكر لك اخي الكريم واعتذر على الاطاله
  9. الـ clamp تحديد حجم القائمة بمعنى لن يظهر شي اكثر من اربع عناصر لدي بنسبة الى هذا الحل : itemCount: _imageFileList !=null ? _imageFileList.length.clamp(0, 4) : _imageFileList.length, يحصل الخطاء التالي: ======== Exception caught by widgets library ======================================================= The following NoSuchMethodError was thrown building FutureBuilder<void>(dirty, state: _FutureBuilderState<void>#85b48): The getter 'length' was called on null. Receiver: null Tried calling: length اما هذا السطر اين ممكن استعمله لو تكرمت لنني قمت باكثر بوضعه اكثر من موقع ولكن يكون الموقع خطاء _imageFileList = _imageFileList != null ? (_imageFileList.length > 4 ? _imageFileList.take(4) : _imageFileList),
  10. اهلا بك اخي انا قمت بتنفيذ ما ذكرته انت وذهب الخطاء فعلا المشكله فقط هيا كالتالي: لو قمت بذهاب الى الاستوديو واختيار 6 صور على سبيل المثال سوف يتم عرض للمستخدم لدي اربع صور وذلك بسبب السطر هذا : itemCount: _imageFileList !=null ? _imageFileList.length.clamp(0, 4) : 0, ولكن المشكله ان المستخدم لو قام بضغط من جديد على زر الاضافة يستطيع الذهاب الى الاستوديو بدون ان يعمل الشرط الذي تم وضعه لا اعلم ما هو سبب حدوث ذلك قمت باختبار ثاني وقمت فقط باختيار العدد المطلوب وهو 4 صور في هذا الحالة الكود يعمل والمستخدم لا يستطيع الضغط من جديد على الزر المشكله فقط لو قام المستخدم باختيار صور اكثر من اربع في اول دخول له الى الاستوديو لا اعلم اذا كان شرحي للمشكله واضح الكود كامل اصبح بشكل التالي: import 'dart:async'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Image Picker Demo', home: MyHomePage(title: 'Image Picker Example'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { List<XFile> _imageFileList; set _imageFile(XFile value) { _imageFileList = value == null ? null : [value]; } bool isVideo = false; final ImagePicker _picker = ImagePicker(); static const int MAX_PHOTO_UPLOAD = 4; void _onImageButtonPressed(ImageSource source, {BuildContext context, bool isMultiImage = false}) async { if (isMultiImage) { try { final pickedFileList = await _picker.pickMultiImage( // maxWidth: 120, // maxHeight: 120, imageQuality: 100, ); if (_imageFileList == null ) { if (pickedFileList == null) return; setState(() { _imageFileList = pickedFileList; }); } else { if (pickedFileList != null) { setState(() { _imageFileList = [..._imageFileList, ...pickedFileList].toSet().toList(); }); } } } catch (e) { setState(() { }); } } } Future<void> retrieveLostData() async { final LostDataResponse response = await _picker.retrieveLostData(); if (response.isEmpty) { return; } if (response.file != null) { if (response.type == RetrieveType.video) { isVideo = true; } else { isVideo = false; setState(() { _imageFile = response.file; _imageFileList = response.files; }); } } } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: !kIsWeb && defaultTargetPlatform == TargetPlatform.android ? FutureBuilder<void>( future: retrieveLostData(), builder: (BuildContext context, AsyncSnapshot<void> snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: case ConnectionState.waiting: return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); case ConnectionState.done: return Column( children: [ Expanded( child: ListView.builder( scrollDirection: Axis.horizontal, key: UniqueKey(), itemBuilder: (context, index) { return Semantics( label: 'image_picker_example_picked_image', child: kIsWeb ? Image.network(_imageFileList[index].path,fit: BoxFit.cover,) : Image.file(File(_imageFileList[index].path),fit: BoxFit.cover,) ); }, itemCount: _imageFileList !=null ? _imageFileList.length.clamp(0, 4) : 0, ), ), SizedBox( height: 5, ), Padding( padding: const EdgeInsets.only( left: 3, right: 3), child: Container( height: 50, width: 100, child: Material( color: Colors.deepOrange, child: InkWell( borderRadius: BorderRadius .circular( 8), child: Icon( Icons .add_a_photo, color: Theme.of( context) .floatingActionButtonTheme .foregroundColor, ), onTap: () async { if (_imageFileList != null && _imageFileList.length == MAX_PHOTO_UPLOAD){ showDialog( context: context, builder: (ctx) => AlertDialog( content: Text( "No more can be added" ), actions: < Widget>[ TextButton( onPressed: () { Navigator.of(ctx).pop(); }, child: Text("Closes"), ), ], ), ); return; } _onImageButtonPressed( ImageSource.gallery, context: context, isMultiImage: true, ); }), )), ) ], ); default: if (snapshot.hasError) { return Text( 'Pick image/video error: ${snapshot.error}}', textAlign: TextAlign.center, ); } else { return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); } } }, ) : ListView.builder( scrollDirection: Axis.horizontal, key: UniqueKey(), itemBuilder: (context, index) { return Semantics( label: 'image_picker_example_picked_image', child: kIsWeb ? Image.network(_imageFileList[index].path,fit: BoxFit.cover, width: 100, height: 50,) : Image.file(File(_imageFileList[index].path),fit: BoxFit.cover, width: 100, height: 50,), ); }, itemCount: _imageFileList.length, ), ), ); } }
  11. مرحبا اخي الكريم @Wael Aljamal قمت بتجربه كثير بشكل التالي ولكن دائما احصل على نتيجة خطاء كالتالي: الكود المستعمل بشكل منفصل: static const int MAX_PHOTO_UPLOAD = 3; Padding( padding: const EdgeInsets.only( left: 3, right: 3), child: Container( height: 50, width: 100, child: Material( color: Colors.deepOrange, child: InkWell( borderRadius: BorderRadius .circular( 8), child: Icon( Icons .add_a_photo, color: Theme.of( context) .floatingActionButtonTheme .foregroundColor, ), onTap: () async { if (_imageFileList.length == MAX_PHOTO_UPLOAD) { showDialog( context: context, builder: (ctx) => AlertDialog( content: Text( "No more can be added" ), actions: < Widget>[ TextButton( onPressed: () { Navigator.of(ctx).pop(); }, child: Text("Closes"), ), ], ), ); return; } _onImageButtonPressed( ImageSource.gallery, context: context, isMultiImage: true, ); }), )), ) النتيجة: E/flutter (22452): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: NoSuchMethodError: The getter 'length' was called on null. E/flutter (22452): Receiver: null E/flutter (22452): Tried calling: length E/flutter (22452): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5) E/flutter (22452): #1 _MyHomePageState.build.<anonymous closure>.<anonymous closure> (package:flutter_application_1/testtwo.dart:179:56) E/flutter (22452): #2 _MyHomePageState.build.<anonymous closure>.<anonymous closure> (package:flutter_application_1/testtwo.dart:178:42) E/flutter (22452): #3 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:991:20) E/flutter (22452): #4 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24) E/flutter (22452): #5 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:607:11) E/flutter (22452): #6 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5) E/flutter (22452): #7 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:230:7) E/flutter (22452): #8 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:475:9) E/flutter (22452): #9 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:93:12) E/flutter (22452): #10 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:138:9) E/flutter (22452): #11 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:397:8) E/flutter (22452): #12 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:136:18) E/flutter (22452): #13 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:122:7) E/flutter (22452): #14 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:381:19) E/flutter (22452): #15 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:361:22) E/flutter (22452): #16 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:278:11) E/flutter (22452): #17 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:316:7) E/flutter (22452): #18 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:280:5) E/flutter (22452): #19 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:238:7) E/flutter (22452): #20 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:221:7) E/flutter (22452): #21 _rootRunUnary (dart:async/zone.dart:1370:13) E/flutter (22452): #22 _CustomZone.runUnary (dart:async/zone.dart:1265:19) E/flutter (22452): #23 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7) E/flutter (22452): #24 _invoke1 (dart:ui/hooks.dart:180:10) E/flutter (22452): #25 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:276:7) E/flutter (22452): #26 _dispatchPointerDataPacket (dart:ui/hooks.dart:96:31) E/flutter (22452): الصفحة كامله import 'dart:async'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Image Picker Demo', home: MyHomePage(title: 'Image Picker Example'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { List<XFile> _imageFileList; set _imageFile(XFile value) { _imageFileList = value == null ? null : [value]; } bool isVideo = false; final ImagePicker _picker = ImagePicker(); static const int MAX_PHOTO_UPLOAD = 3; void _onImageButtonPressed(ImageSource source, {BuildContext context, bool isMultiImage = false}) async { if (isMultiImage) { try { final pickedFileList = await _picker.pickMultiImage( // maxWidth: 120, // maxHeight: 120, imageQuality: 100, ); if (_imageFileList == null) { if (pickedFileList == null) return; setState(() { _imageFileList = pickedFileList; }); } else { if (pickedFileList != null) { setState(() { _imageFileList = [..._imageFileList, ...pickedFileList].toSet().toList(); }); } } } catch (e) { setState(() { }); } } } Future<void> retrieveLostData() async { final LostDataResponse response = await _picker.retrieveLostData(); if (response.isEmpty) { return; } if (response.file != null) { if (response.type == RetrieveType.video) { isVideo = true; } else { isVideo = false; setState(() { _imageFile = response.file; _imageFileList = response.files; }); } } } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: !kIsWeb && defaultTargetPlatform == TargetPlatform.android ? FutureBuilder<void>( future: retrieveLostData(), builder: (BuildContext context, AsyncSnapshot<void> snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: case ConnectionState.waiting: return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); case ConnectionState.done: return Column( children: [ Expanded( child: ListView.builder( scrollDirection: Axis.horizontal, key: UniqueKey(), itemBuilder: (context, index) { return Semantics( label: 'image_picker_example_picked_image', child: kIsWeb ? Image.network(_imageFileList[index].path,fit: BoxFit.cover,) : Image.file(File(_imageFileList[index].path),fit: BoxFit.cover,) ); }, itemCount: _imageFileList !=null ? _imageFileList.length : 0, ), ), SizedBox( height: 5, ), Padding( padding: const EdgeInsets.only( left: 3, right: 3), child: Container( height: 50, width: 100, child: Material( color: Colors.deepOrange, child: InkWell( borderRadius: BorderRadius .circular( 8), child: Icon( Icons .add_a_photo, color: Theme.of( context) .floatingActionButtonTheme .foregroundColor, ), onTap: () async { if (_imageFileList.length == MAX_PHOTO_UPLOAD) { showDialog( context: context, builder: (ctx) => AlertDialog( content: Text( "No more can be added" ), actions: < Widget>[ TextButton( onPressed: () { Navigator.of(ctx).pop(); }, child: Text("Closes"), ), ], ), ); return; } _onImageButtonPressed( ImageSource.gallery, context: context, isMultiImage: true, ); }), )), ) ], ); default: if (snapshot.hasError) { return Text( 'Pick image/video error: ${snapshot.error}}', textAlign: TextAlign.center, ); } else { return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); } } }, ) : ListView.builder( scrollDirection: Axis.horizontal, key: UniqueKey(), itemBuilder: (context, index) { return Semantics( label: 'image_picker_example_picked_image', child: kIsWeb ? Image.network(_imageFileList[index].path,fit: BoxFit.cover, width: 100, height: 50,) : Image.file(File(_imageFileList[index].path),fit: BoxFit.cover, width: 100, height: 50,), ); }, itemCount: _imageFileList.length, ), ), ); } }
  12. اهلا بك اخي الكريم تم اخي سوف اقوم بمشاركة تجربتي باذن الله ليله
  13. مرحبا اخي الكريم شاكر لك ردك الغالي هل ممكن مشاركة بعض الاكود لو تكرمت للفكره اذا مافيه تكليف
  14. كيف يمكن فعل ذلك اخي ياليت تشارك الكود اذا متوفر لديك
  15. اهلا بك اخي الكريم الحل جميل وممكن تطبيقه من خلال طول القائمه ولكن المشكله انني سوف احتاج الى اضافة هذا الصور الى قاعدة البيانات مما يعني ان القائمه كلها سوف يتم ادراجها وهذا الامر لا ينفع انا احتاج فقط الى 4 صور لكل موضوع
  16. تحيه طيبه للجميع اقوم بجلب صور متعدده من للاستوديو وعرضها للمستخدم الان يمكن للمستخدم جلب عدد لا محدود من الصور انا احتاج الى ان اعمل قيد او حد لعدد الصور الذي يمكن للمستخدم جلبها وختيارها مثلا اربع صور فقط لا يمكن ادراج صورة اكثر انا استعمل المكتبه التاليه : image_picker // Pick multiple images final List<XFile>? images = await _picker.pickMultiImage(); الكود كامل : import 'dart:async'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Image Picker Demo', home: MyHomePage(title: 'Image Picker Example'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { List<XFile> _imageFileList; set _imageFile(XFile value) { _imageFileList = value == null ? null : [value]; } dynamic _pickImageError; bool isVideo = false; final ImagePicker _picker = ImagePicker(); void _onImageButtonPressed(ImageSource source, {BuildContext context, bool isMultiImage = false}) async { if (isMultiImage) { try { final pickedFileList = await _picker.pickMultiImage( maxWidth: 66, maxHeight: 66, imageQuality: 66, ); if (_imageFileList == null) { if (pickedFileList == null) return; setState(() { _imageFileList = pickedFileList; }); } else { if (pickedFileList != null) { setState(() { _imageFileList = [..._imageFileList, ...pickedFileList].toSet().toList(); }); } // لا تغيير } } catch (e) { setState(() { _pickImageError = e; }); } } } Widget _previewImages() { if (_imageFileList != null) { return Semantics( child: ListView.builder( key: UniqueKey(), itemBuilder: (context, index) { return Semantics( label: 'image_picker_example_picked_image', child: kIsWeb ? Image.network(_imageFileList[index].path) : Image.file(File(_imageFileList[index].path)), ); }, itemCount: _imageFileList.length, ), label: 'image_picker_example_picked_images'); } else if (_pickImageError != null) { return Text( 'Pick image error: $_pickImageError', textAlign: TextAlign.center, ); } else { return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); } } Future<void> retrieveLostData() async { final LostDataResponse response = await _picker.retrieveLostData(); if (response.isEmpty) { return; } if (response.file != null) { if (response.type == RetrieveType.video) { isVideo = true; } else { isVideo = false; setState(() { _imageFile = response.file; _imageFileList = response.files; }); } } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: !kIsWeb && defaultTargetPlatform == TargetPlatform.android ? FutureBuilder<void>( future: retrieveLostData(), builder: (BuildContext context, AsyncSnapshot<void> snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: case ConnectionState.waiting: return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); case ConnectionState.done: return _previewImages(); default: if (snapshot.hasError) { return Text( 'Pick image/video error: ${snapshot.error}}', textAlign: TextAlign.center, ); } else { return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); } } }, ) : _previewImages(), ), floatingActionButton: Column( mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[ Padding( padding: const EdgeInsets.only(top: 16.0), child: FloatingActionButton( onPressed: () { isVideo = false; _onImageButtonPressed( ImageSource.gallery, context: context, isMultiImage: true, ); }, heroTag: 'image1', tooltip: 'Pick Multiple Image from gallery', child: const Icon(Icons.photo_library), ), ), ], ), ); } } ياليت اذا احد سبق وحصلت معه نفس هذا المشكله يفيدنا
  17. الف شكر لك يا اخوي ربي يزيدك ويبارك لك علمك من واسع فضله الكود كامل بعد التعديل للفائده import 'dart:async'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Image Picker Demo', home: MyHomePage(title: 'Image Picker Example'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { List<XFile> _imageFileList; set _imageFile(XFile value) { _imageFileList = value == null ? null : [value]; } dynamic _pickImageError; bool isVideo = false; final ImagePicker _picker = ImagePicker(); void _onImageButtonPressed(ImageSource source, {BuildContext context, bool isMultiImage = false}) async { if (isMultiImage) { try { final pickedFileList = await _picker.pickMultiImage( maxWidth: 66, maxHeight: 66, imageQuality: 66, ); if (_imageFileList == null) { if (pickedFileList == null) return; setState(() { _imageFileList = pickedFileList; }); } else { if (pickedFileList != null) { setState(() { _imageFileList = [..._imageFileList, ...pickedFileList].toSet().toList(); }); } // لا تغيير } } catch (e) { setState(() { _pickImageError = e; }); } } } Widget _previewImages() { if (_imageFileList != null) { return Semantics( child: ListView.builder( key: UniqueKey(), itemBuilder: (context, index) { return Semantics( label: 'image_picker_example_picked_image', child: kIsWeb ? Image.network(_imageFileList[index].path) : Image.file(File(_imageFileList[index].path)), ); }, itemCount: _imageFileList.length, ), label: 'image_picker_example_picked_images'); } else if (_pickImageError != null) { return Text( 'Pick image error: $_pickImageError', textAlign: TextAlign.center, ); } else { return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); } } Future<void> retrieveLostData() async { final LostDataResponse response = await _picker.retrieveLostData(); if (response.isEmpty) { return; } if (response.file != null) { if (response.type == RetrieveType.video) { isVideo = true; } else { isVideo = false; setState(() { _imageFile = response.file; _imageFileList = response.files; }); } } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: !kIsWeb && defaultTargetPlatform == TargetPlatform.android ? FutureBuilder<void>( future: retrieveLostData(), builder: (BuildContext context, AsyncSnapshot<void> snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: case ConnectionState.waiting: return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); case ConnectionState.done: return _previewImages(); default: if (snapshot.hasError) { return Text( 'Pick image/video error: ${snapshot.error}}', textAlign: TextAlign.center, ); } else { return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); } } }, ) : _previewImages(), ), floatingActionButton: Column( mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[ Padding( padding: const EdgeInsets.only(top: 16.0), child: FloatingActionButton( onPressed: () { isVideo = false; _onImageButtonPressed( ImageSource.gallery, context: context, isMultiImage: true, ); }, heroTag: 'image1', tooltip: 'Pick Multiple Image from gallery', child: const Icon(Icons.photo_library), ), ), ], ), ); } }
  18. اهلا اخي تم وضع الكود بشكل التالي : void _onImageButtonPressed(ImageSource source, {BuildContext context, bool isMultiImage = false}) async { if (isMultiImage) { try { final pickedFileList = await _picker.pickMultiImage( maxWidth: 66, maxHeight: 66, imageQuality: 66, ); setState(() { _imageFileList = [..._imageFileList, ...pickedFileList].toSet().toList(); }); } catch (e) { setState(() { _pickImageError = e; }); } } } وقد حصل الخطاء التالي: ايضا قمت تبطبيق هذا الامر : void _onImageButtonPressed(ImageSource source, {BuildContext context, bool isMultiImage = false}) async { if (isMultiImage) { try { final pickedFileList = await _picker.pickMultiImage( maxWidth: 66, maxHeight: 66, imageQuality: 66, ); final tmp = new List.from(_imageFileList)..addAll(pickedFileList); final tmp2 = tmp.toSet().toList(); setState(() { _imageFileList = tmp2; }); } catch (e) { setState(() { _pickImageError = e; }); } } } وقد حصلت على خطاء مشابه للكود السابق
  19. اهلا بك اخي الكريم قمت بتطبيق الطريقة الاولى ولكن يظهر لدي المشكله التاليه مرفق صوره :
  20. تحيه طيبه للجميع انا استعمل المكتبه التاليه : image_picker لختيار مجموعة من الصور في وقت واحد بستخدام : // Pick multiple images final List<XFile>? images = await _picker.pickMultiImage(); الكود يعمل بشكل ممتاز ولكن المشكله مثلا لو قمت باختيار 3 صور في اول مره بعدها رغبة باضافة المزيد لو قمت باضافة المزيد سوف يتم حذف الصور السابقه التي سبق وتم اختيارها ووضع الصور الجديده فقط مكانها كيف يمكن الاحتفاظ بصور السابقه في حالة اضافة صور جديده لها ياليت اذا احد واجه هذا المشكله ويعرف طريقة لحلها يفيدنا بارك الله فيكم الكود كامل: import 'dart:async'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Image Picker Demo', home: MyHomePage(title: 'Image Picker Example'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { List<XFile> _imageFileList; set _imageFile(XFile value) { _imageFileList = value == null ? null : [value]; } dynamic _pickImageError; bool isVideo = false; final ImagePicker _picker = ImagePicker(); void _onImageButtonPressed(ImageSource source, {BuildContext context, bool isMultiImage = false}) async { if (isMultiImage) { try { final pickedFileList = await _picker.pickMultiImage( maxWidth: 66, maxHeight: 66, imageQuality: 66, ); setState(() { _imageFileList = pickedFileList; }); } catch (e) { setState(() { _pickImageError = e; }); } } } Widget _previewImages() { if (_imageFileList != null) { return Semantics( child: ListView.builder( key: UniqueKey(), itemBuilder: (context, index) { return Semantics( label: 'image_picker_example_picked_image', child: kIsWeb ? Image.network(_imageFileList[index].path) : Image.file(File(_imageFileList[index].path)), ); }, itemCount: _imageFileList.length, ), label: 'image_picker_example_picked_images'); } else if (_pickImageError != null) { return Text( 'Pick image error: $_pickImageError', textAlign: TextAlign.center, ); } else { return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); } } Future<void> retrieveLostData() async { final LostDataResponse response = await _picker.retrieveLostData(); if (response.isEmpty) { return; } if (response.file != null) { if (response.type == RetrieveType.video) { isVideo = true; } else { isVideo = false; setState(() { _imageFile = response.file; _imageFileList = response.files; }); } } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: !kIsWeb && defaultTargetPlatform == TargetPlatform.android ? FutureBuilder<void>( future: retrieveLostData(), builder: (BuildContext context, AsyncSnapshot<void> snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: case ConnectionState.waiting: return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); case ConnectionState.done: return _previewImages(); default: if (snapshot.hasError) { return Text( 'Pick image/video error: ${snapshot.error}}', textAlign: TextAlign.center, ); } else { return const Text( 'You have not yet picked an image.', textAlign: TextAlign.center, ); } } }, ) : _previewImages(), ), floatingActionButton: Column( mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[ Padding( padding: const EdgeInsets.only(top: 16.0), child: FloatingActionButton( onPressed: () { isVideo = false; _onImageButtonPressed( ImageSource.gallery, context: context, isMultiImage: true, ); }, heroTag: 'image1', tooltip: 'Pick Multiple Image from gallery', child: const Icon(Icons.photo_library), ), ), ], ), ); } }
  21. اهلا بك اخي الكريم فيه نقطه حقيقه لم افهم سببها انا متعود اقوم بتحميل ملف فايربيز من خلال ويندوز 10 بحكم اني شغال على مشروع واحد مشترك فلاتر واقوم بنقل المشروع بين الحاسوبين قمت بتحميل الملف سابقا وكنت اشاهد نهاية الملف مكتوب xaml ولكن حقيقه لم اقوم بتركيز عليها ولكن بعد البحث الطويل وجدت ان الملف يجب ان لا ينتهي كذلك بل بشكل التالي: GoogleService-Info.plist لا اعلم ما هو سبب ان سابقا يقوم الويندوز بتحميل الملف بصيغه المشار لها اعلاه ولكن المشكله ان الاصدارات تحت ios 15 كانت تعمل عليه ايضا لذلك لم استطع الانتباه للمشكله كل الشكر لك اخي الكريم توجيهاتك ساعدتني كثير لكتشاف ذلك
  22. اهلا بك اخي الكريم مع الاسف انني قمت بهذا المحاولة كذا مره وبدون فائده حتى انني قمت الان ايضا بتطبيقها من جديد ولم يتم حل المشكلة
  23. اهلا بك اخي الكريم وجدت الحل في هذا المشاركة وقمت بتطبيقها المشكله ذهبت ولكن تنتج مشكله مختلفه الان https://stackoverflow.com/questions/68467306/the-code-signature-version-is-no-longer-supported حسب ما فهمت انها سياسة جديده من ابل ويجب تطبيقه او تغير جديد بالاصح ولكن المشكله بعد تطبيق ذلك ينتج التالي: 021-10-03 16:06:23.524137+0400 Runner[784:113257] Warning: Unable to create restoration in progress marker file 2021-10-03 16:06:23.526996+0400 Runner[784:113515] 8.7.0 - [Firebase/Core][I-COR000012] Could not locate configuration file: 'GoogleService-Info.plist'. 2021-10-03 16:06:23.527161+0400 Runner[784:113257] *** Terminating app due to uncaught exception 'com.firebase.core', reason: '`FirebaseApp.configure()` could not find a valid GoogleService-Info.plist in your project. Please download one from https://console.firebase.google.com/.' *** First throw call stack: طبعا ملف الفايربيز موجود وشغال ايضا لو قمت بتشغيله على ios اقل من 15 مثال 14 هاتف حقيقي او محاكي ولكن مع ios 15 تظهر هذا الرساله وقمت بحذفه كذا مره وارجاعه وقمت باضافته بطرق مختلفه لتاكد من طريقة الاضافة الصحيحه وكل شي لم ينجح
  24. اهلا بك اخي الكريم هو فعلا انا اجد مفتاحين حسب ما قمت بالاشاره انت ولكن المشكله انني في حالة احذف الغير مستهدف واروح اعمل ربط من جديد للمشروع من الاكس كود يرجع يعمل انشاء من جديد للمفتاح المحذوف ولا يذهب الى المفتاح المتاح الثاني لا اعلم السبب ايضا الغريب في الامر ان المشروع يعمل على الاصدارات الاقل من 15 بشكل طبيعي فقط ما تم تحديثه الى الاصدار 15 ا
×
×
  • أضف...