-
المساهمات
4657 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
30
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو بلال زيادة
-
صحيح هي كذلك وهنا تستطيع إضافة اكثر من سعر للمنتج الواحد ويكون كامل التحكم من خلالك.
- 11 اجابة
-
- 1
-
-
لا المنتج يكون له أكثر من سعر وبناء على العملة المخزنة أظهر المنتج بالسعر المخزن. للأسف لا أعلم هل يوجد أو لا ولكن الفكرة تعتمد على أن يكون المنتج له أكثر من سعر.
- 11 اجابة
-
- 1
-
-
لم أتعامل مع APIS يوفر مثل هذه الخاصية من قبل, ولكن أعتمد في طريقتي على api الذي استخدمه في تطبيقي من حيث يكون للمنتج أكثر من سعر مثل USD , EUR. بحيث يكون هناك واجهة أخرى يختار منه المستخدم العملة التي يريد إظهارها في المنتجات , فعند الضغط على العملة المفضلة أقوم بتخزينها في SharedPrefrence و من ثم أمررها لِ Provider المسؤول عن تحديث الواجهة بالسعر المختار و من ثم Provider يقوم بتمرير العملة إلى API ويجلب بيانات المنتجات بالعملة المرسلة, انه موضوع معقد نوعاً ما ولكن يمكن تطبيقه بشكلٍ ما. الشرح بالكود لما تم ذكره مسبقاً . أقوم بتعريف مجموعة من العملات بناء على ما يتم استخدامه في api مثل const kCurrencies = { "Currencies": [ { "symbol": "\$", "currency": "USD", }, { "symbol": "\€", "currency": "EUR" }, ], }; ثم في واجهة أختيار العملة أضع التالي List getAllCurrencies = kCurrencies["Currencies"] ?? []; ثم أقوم بعمل loop على العملات المخزنة مسبقاً for (var i = 0; i < getAllCurrencies.length; i++) Column( children: <Widget>[ Card( child: ListTile( title: Text( '${getAllCurrencies[i]["currency"]} (${getAllCurrencies[i]["symbol"]})'), onTap: () { setState(() { currency = getAllCurrencies[i]["currency"]; }); Provider.of<InitModel>(context, listen: false) .changeCurrency(getAllCurrencies[i]["currency"], context); }, trailing: currency == getAllCurrencies[i]["currency"] ? const Icon(Icons.done) : Container( width: 50, ), ), ), if (i != getAllCurrencies.length - 1) const Divider( color: Colors.black, ), ], ) ثم أمرر العملة إلى دالة changeCurrency التي بدورها أقوم بتخزين العملة و تمريرها إلى Api لأرجع بيانات المنتجات بالعملة المختارة. Future<void> changeCurrency(String item, BuildContext context) async { Provider.of<CartModel>(context, listen: false).changeCurrency(item); SharedPreferences prefs = await SharedPreferences.getInstance(); currency = item; await prefs.setString("currency", currency); notifyListeners(); }
- 11 اجابة
-
- 2
-
-
يمكنك استخدام برنامج github desktop بحيث تقومين بسحب نسخة من هذا المستودع و من ثم أي تعديلات تقومين بها تستطعين دفعها مرة أخرى على المستودع. من خلال البرنامج قومي بالضغط على File - Clone repository ثم تختارين المستودع الذي تريدين القيام بعمل نسخة منه من خلال تنزيله على الجهاز. ثم أي تعديلات تقومين بها في الملفات سوف تظهر على البرنامج و ستظهر لكِ كلمة commit master ومن ثم بعد الضغط عليها ستظهر كلمة push قومي بالضغط عليها لعمل دفع للملفات المعدلة على المستودع مرة أخرى.
-
[array[i], array[j]] = [array[j], array[i]]; ES6 الجديد يسمح بتعيين متغيرين في وقت واحد. يكون هذا مفيدًا بشكل خاص عندما نريد تبديل قيم متغيرين , حيث يمكننا القيام بذلك في سطر واحد من التعليمات البرمجية.
- 7 اجابة
-
- 1
-
-
ستقوم بإنشاء مشروع جديد وليكن اسمه excel_project. ثم ستقوم بتضمين مكتبة poi-5.0.0.jar إلى مشروعك. في ملف AndroidManifest.xml , أضف إذن "WRITE_EXTERNAL_STORAGE" حيث نطلب الوصول إلى وحدة التخزين الخارجية لحفظ ملف Excel. <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ثم في ملف MainActivity.java في دالة onCreate يمكنك إضافة زر إنشاء الملف كالتالي protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button=findViewById(R.id.exelCreate); button.setOnClickListener(this); } ثم في دالة onClick تقوم بإضافة التالي public void onClick(View v) { Workbook wb=new HSSFWorkbook(); Cell cell=null; CellStyle cellStyle=wb.createCellStyle(); cellStyle.setFillForegroundColor(HSSFColor.LIGHT_BLUE.index); cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //الآن نقوم بإنشاء ورقة Sheet sheet=null; sheet = wb.createSheet("Name of sheet"); //إنشاء الآن العمود والصف Row row =sheet.createRow(0); cell=row.createCell(0); cell.setCellValue("Name"); cell.setCellStyle(cellStyle); cell=row.createCell(1); cell.setCellValue("Number"); cell.setCellStyle(cellStyle); sheet.setColumnWidth(0,(10*200)); sheet.setColumnWidth(1,(10*200)); File file = new File(getExternalFilesDir(null),"myexcel.xls"); FileOutputStream outputStream =null; try { outputStream=new FileOutputStream(file); wb.write(outputStream); Toast.makeText(getApplicationContext(),"OK",Toast.LENGTH_LONG).show(); } catch (java.io.IOException e) { e.printStackTrace(); Toast.makeText(getApplicationContext(),"NO OK",Toast.LENGTH_LONG).show(); try { outputStream.close(); } catch (IOException ex) { ex.printStackTrace(); } } }
-
app.get() يشبه إلى حد كبير router.get() App Object عبارة عن جهاز توجيه ( router )يحتوي أيضًا على بعض الخصائص والدول الأخرى عليه. لذلك , فإن معظم أي دالة من كائن التوجيه ( route object ) تكون أيضًا على كائن app ، ولكن ليس العكس. غالبًا ما يكون من المفيد تجميع مسارات التوجيه لجزء معين من الموقع معًا والوصول إليها باستخدام route-prefix (على سبيل المثال , قد يحتوي الموقع الذي يحتوي على Wiki على جميع المسارات ذات الصلة بـ wiki في ملف واحد ويتم الوصول إليها ببادئة المسار من / ويكي /). في Express يتم تحقيق ذلك باستخدام كائن express.Router. على سبيل المثال , يمكننا إنشاء مسار wiki الخاص بنا في وحدة نمطية تسمى wiki.js , ثم تصدير كائن جهاز التوجيه , const express = require('express'); const router = express.Router(); router.get('/', function(req, res) { res.send('صفحة رئيسية'); }); router.get('/about', function(req, res) { res.send('حول wiki'); }); module.exports = router; يمكنك القراءة أكثر عن هذا الموضوع من خلال توثيق routing على expressjs من هنا.
-
يمكنك استخدام share من هنا. في تطبيقك ويمكنك استخدام Share.share('check out my website https://example.com'); تأخذ Share أيضًا موضوعًا اختياريًا سيتم استخدامه عند المشاركة في البريد الإلكتروني. Share.share('check out my website https://example.com', subject: 'Look what I made!'); لمشاركة ملف واحد أو عدة ملفات ، قم باستدعاء طريقة shareFiles الثابتة في أي مكان في رمز Dart الخاص بك. اختياريًا يمكنك أيضًا تمرير النص والموضوع. Share.shareFiles(['${directory.path}/image.jpg'], text: 'Great picture'); Share.shareFiles(['${directory.path}/image1.jpg', '${directory.path}/image2.jpg']); ومن خلال الكود الكامل import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:share/share.dart'; import 'image_previews.dart'; void main() { runApp(DemoApp()); } class DemoApp extends StatefulWidget { @override DemoAppState createState() => DemoAppState(); } class DemoAppState extends State<DemoApp> { String text = ''; String subject = ''; List<String> imagePaths = []; @override Widget build(BuildContext context) { return MaterialApp( title: 'Share Plugin Demo', home: Scaffold( appBar: AppBar( title: const Text('Share Plugin Demo'), ), body: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(24.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ TextField( decoration: const InputDecoration( labelText: 'Share text:', hintText: 'Enter some text and/or link to share', ), maxLines: 2, onChanged: (String value) => setState(() { text = value; }), ), TextField( decoration: const InputDecoration( labelText: 'Share subject:', hintText: 'Enter subject to share (optional)', ), maxLines: 2, onChanged: (String value) => setState(() { subject = value; }), ), const Padding(padding: EdgeInsets.only(top: 12.0)), ImagePreviews(imagePaths, onDelete: _onDeleteImage), ListTile( leading: Icon(Icons.add), title: Text("Add image"), onTap: () async { final imagePicker = ImagePicker(); final pickedFile = await imagePicker.getImage( source: ImageSource.gallery, ); if (pickedFile != null) { setState(() { imagePaths.add(pickedFile.path); }); } }, ), const Padding(padding: EdgeInsets.only(top: 12.0)), Builder( builder: (BuildContext context) { return ElevatedButton( child: const Text('Share'), onPressed: text.isEmpty && imagePaths.isEmpty ? null : () => _onShare(context), ); }, ), const Padding(padding: EdgeInsets.only(top: 12.0)), Builder( builder: (BuildContext context) { return ElevatedButton( child: const Text('Share With Empty Origin'), onPressed: () => _onShareWithEmptyOrigin(context), ); }, ), ], ), ), )), ); } _onDeleteImage(int position) { setState(() { imagePaths.removeAt(position); }); } _onShare(BuildContext context) async { // A builder is used to retrieve the context immediately // surrounding the ElevatedButton. // // The context's `findRenderObject` returns the first // RenderObject in its descendent tree when it's not // a RenderObjectWidget. The ElevatedButton's RenderObject // has its position and size after it's built. final RenderBox box = context.findRenderObject() as RenderBox; if (imagePaths.isNotEmpty) { await Share.shareFiles(imagePaths, text: text, subject: subject, sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size); } else { await Share.share(text, subject: subject, sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size); } } _onShareWithEmptyOrigin(BuildContext context) async { await Share.share("text"); } }
- 3 اجابة
-
- 1
-
-
الفكرة بسيطة كل ما عليك عند إرسال الكود في رسالة sms أيضا قم بتخزين الكود في جدول يحتوي على الأكواد التي تتولد مع تخزين token جهاز الشخص الذي سجل, وعند مقارنة الكود الذي وصل أنه تم إضافته من نفس التوكن للجهاز مع token المخزن تقوم بإنشاء الحدث الخاص بك.
- 7 اجابة
-
- 3
-
-
يمكنك إنشاء مستودع جديد على github وبعد إنشاء المستودع تظهر لك صفحة بها تعليمات الرفع مثل echo "# text" >> README.md git init git add README.md git commit -m "first commit" git branch -M main git remote add origin هنا رابط المستودع git push -u origin main وعليك تنفيذ التعليمات للتمكن من رفع الملفات على المستودع, بعد الرفع يمكنك الرجوع إلى صفحة التعليمات و تحديثها سوف تجد جميع ملفاتك.
- 6 اجابة
-
- 1
-
-
تأكد من تقليل حجم ملفات css, js و الصور أيضا أو تاكد من مسار الملفات انها صحيحة أو ايضا لا يوجد أخطاء في أكواد js. 2- يجب تغيير مسار الصورة header{ background-image: url(img/header-img.png); background-size: 100%; background-repeat: no-repeat; background-position: bottom center; } لأنك تستخدم تأثيرات تخرج من يمين أو يسار الصفحة لذلك يظهر شريط التمرير ويختفي مجرد إكتمال البلوك كاملاً @media (min-width: 576px) { ... } // Medium devices (tablets, 768px and up) @media (min-width: 768px) { ... } // Large devices (desktops, 992px and up) @media (min-width: 992px) { ... } // Extra large devices (large desktops, 1200px and up) @media (min-width: 1200px) { ... } لا توجد تنسيقات لإزرار المتاجر. يمكنك استخدام <script src="https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js" integrity="sha512-Eak/29OTpb36LLo2r47IpVzPBLXnAMPAVypbSZiZ4Qkf8p/7S/XRG5xp7OKWPPYfJT6metI+IORkR5G8F900+g==" crossorigin="anonymous"></script> أو <script src="https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.js" integrity="sha512-Rd5Gf5A6chsunOJte+gKWyECMqkG8MgBYD1u80LOOJBfl6ka9CtatRrD4P0P5Q5V/z/ecvOCSYC8tLoWNrCpPg==" crossorigin="anonymous"></script> أستخدم المكتبات أفضل لك و توفر عليك العناء والتعب.
- 4 اجابة
-
- 1
-
-
هل قمتي بتنفيذ جميع الخطوات؟ أو يمكنك تنفيذ الأوامر التالية git pull origin master git push origin master إذا لم ينجح الأمر تأكدي من متابعة الخطوات التالية git init git add . git commit -m "first commit" git branch -M main git remote add origin هنا الرابط git push -u origin main أو يمكنك تنفيذ الأوامر التالية git pull --rebase origin main git push origin main
-
يمكنك استخدام دالتي set, list بحيث تمرر السلسلة الأولى إلى دالة set المضمنة بداخل دالة list مثل الكود التالي t = [1, 2, 3, 1, 2, 5, 6, 7, 8] t = list(set(t)) فتعمل الدالة على حذف العناصر المكررة من السلسلة فيكون الناتج بهذا الشكل [1, 2, 3, 5, 6, 7, 8] ثم نقوم بعمل سلسلة أخرى و يكون بها العناصر الذي لا نريدها في السلسلة الناتجة وهي العناصر [1, 2, 3] فنقوم بوضع التالي s = [1, 2, 3] ثم m = list(set(t) - set(s)) ثم نطبع المتغير m print(m) فتكون النتيجة السلسلة التالية [8, 5, 6, 7] الكود كاملاً t = [1, 2, 3, 1, 2, 5, 6, 7, 8] t = list(set(t)) s = [1, 2, 3] m = list(set(t) - set(s)) print(m)
-
سأقوم بوضع مثال , يمكنك متغير لوضع السعر الإجمالي فيه فيكون كالتالي int sum = 0; ومن ثم وضع متغير List لتخزين بيانات cart بداخله List<Cart> ListCart=[]; ثم بداخل FutureBuilder FutureBuilder( future: myCart, builder: (context, snapshot) { if (snapshot.hasData) { ListCart = snapshot.data; ListCart.forEach((element) { setState((){ sum = sum + element.price; }); }); } return Container(); }); ثم يمكنك جلب السعر النهائي Container( padding: EdgeInsets.all(10), child: Row( children: <Widget>[ Text('$sum'), SizedBox( width: 10, ), Text('الإجمالي'), ], ), ), هل يمكنك رفع ملفات مشروعك بشكل مضغوط لمساعدتك بشكل أكبر, فالأكواد هكذا تكون ناقصة وبها مشاكل.
- 1 جواب
-
- 1
-
-
يمكنك استخدام خاصية overflow-y:scroll; بحيث يكون الشريط الجانبي بداخل المحتوى, يمكنك استخدام الكود التالي <!DOCTYPE html> <html> <head> <style type="text/css"> .div_chat{ overflow-y:scroll; height:300px; border: 1px solid #ccc; } </style> </head> <body> <div class="div_chat"> محتوى المحادثة <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> </div> <div> محتوى اخر </div> <div> محتوى اخر </div> </body> </html>
- 3 اجابة
-
- 1
-
-
الخطأ في الكود التالي Row( children: [ Container( constraints: BoxConstraints( maxWidth: MediaQuery.of(context).size.width * .6), padding: const EdgeInsets.all(15.0), decoration: BoxDecoration( color: Color(0xfff9f9f9), borderRadius: BorderRadius.only( topRight: Radius.circular(25), bottomLeft: Radius.circular(25), bottomRight: Radius.circular(25), ), ), child: Text(data.Messages.toString(),style: TextStyle(fontSize: 17)), ), CircleAvatar( backgroundImage: NetworkImage( data.image.toString() ,) ), ], ), فالألية كالتالي يجب فحص هل إذا العضو هو المرسل تقوم بتغيير الكود بحيث الصورة بالأول و النص الأخر, والمستقبل العكس, فممكن تقوم بتنفيذ مثل هذه الفكرة isSender ? Row( children: [ CircleAvatar( backgroundImage: NetworkImage( data.image.toString() ,) ), Container( constraints: BoxConstraints( maxWidth: MediaQuery.of(context).size.width * .6), padding: const EdgeInsets.all(15.0), decoration: BoxDecoration( color: Color(0xfff9f9f9), borderRadius: BorderRadius.only( topRight: Radius.circular(25), bottomLeft: Radius.circular(25), bottomRight: Radius.circular(25), ), ), child: Text(data.Messages.toString(),style: TextStyle(fontSize: 17)), ), ], ), : Row( children: [ Container( constraints: BoxConstraints( maxWidth: MediaQuery.of(context).size.width * .6), padding: const EdgeInsets.all(15.0), decoration: BoxDecoration( color: Color(0xfff9f9f9), borderRadius: BorderRadius.only( topRight: Radius.circular(25), bottomLeft: Radius.circular(25), bottomRight: Radius.circular(25), ), ), child: Text(data.Messages.toString(),style: TextStyle(fontSize: 17)), ), CircleAvatar( backgroundImage: NetworkImage( data.image.toString() ,) ), ], ),
- 1 جواب
-
- 1
-
-
سأخبرك عن طريق الكود Future getAsync() async { var cartProvider = Provider.of<Cart>(context, listen: false); var auth = Provider.of<AuthProvider>(context, listen: false); cartProvider.fetchShippingDetails(auth.id); } @override void initState() { // ignore: todo // TODO: implement initState super.initState(); getAsync(); }
- 13 اجابة
-
- 1
-
-
يمكنك في main.dart من استدعاء الدالة حتى تجلب البيانات وتخزنها في Provider ومن ثم تستطيع جلبها عن طريق Consumer في أي مكان بالتطبيق. و ملف main هو بداية إقلاع التطبيق.
- 13 اجابة
-
- 1
-
-
انت تستخدم Provider يجب عليك هنا تشغيل الProvider عند إقلاع التطبيق حتى تستطيع جلبها من API و من ثم تستخدمها في أي مكان بالتطبيق. حتى لا تسبب مشاكل بعد ذلك لك في أي مكان بالتطبيق.
- 13 اجابة
-
- 1
-
-
يمكنك وضع دالة الاتصال و الاستعلام من api في دالة initState @override void initState() { // ignore: todo // TODO: implement initState super.initState(); getAsync(); } ليتم الاتصال ب api في اول عملية بناء الواجهة وهكذا تضمن عدم تخزين قيم فارغة في المتغيرات. هناك طريقة ثانية وهي استخدام FutureBuilder بحيث تستخدم hasData التي توفرها FutureBuilder إذا كان هناك داتا أعرض الواجهة إذا لم يكن بيانات ضع shimmer لتلطيف عملية loading.
- 13 اجابة
-
- 1
-
-
ربما يجب ان تكون مسار لجلب البيانات فيكون بهذا الشكل Route::get('chart-api', 'MyControllerController@getchart')->name('getChart'); ثم بداخل المتحكم تضيف $getData = route('getChart'); ثم يمكن استخدام دالة load لجلب البيانات الجديدة بهذا الشكل $getData = route('getChart'); $chart->labels(['chart1'])->load($getData)
- 2 اجابة
-
- 1
-
-
هذا الأمر يحدث كثيراً مع استخدام فلاتر مع الأندرويد ستوديو لذلك قم بإعادة تشغيل البرنامج مرة أخرى و ستعمل معك الأقتراحات. أو قم بتحديث برنامج الأندرويد ستوديو.
- 3 اجابة
-
- 1
-
-
يمكنك استخدام حزمة url_launcher ومن ثم تمرر لها الرقم launch("tel://214324234"); بداخل دالة onPressed onPressed: () => launch("tel://21213123123"),
- 1 جواب
-
- 1
-
