-
المساهمات
4657 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
30
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو بلال زيادة
-
أحاول فتح الرابط المرفق و لكن لا فتح معي ، هل يمكنك التحقق من الرابط ؟
-
سوف يكون هناك مكتبة للشركة الذي تستخدمها لربطها في موقعك ، حاول العثور على التوثيق الخاص بهذه الشركة و قراءته و لكن الفكرة العامة هي عند برمجة نموذج الإدخال و تعبئة بياناته و عند ارسال هذه البيانات إلى الصفحة المقصودة ، في هذه الصفحة يكون التعامل مع هذه الشركة ( أقصد الحزمة التي تزودها الشركة لهذه الخدمة ) و من ثم يمكنك إرسال SMS أو ما تقدمه هذه الخدمة من خدمات أخرى.
-
في البداية القرار يعود لك و بناء عليك ، فإذا كنت تعلم في كيفية استخدام الحاسوب و لديك مهارات عديدة في استخدامه يمكنك الانتقال إلى دورة تطوير التطبيقات باستخدام لغة JavaScript ، لذلك حاول أتخاذ قرارك بناء على مهاراتك ، و لكن كنصيحة يمكنك البدء بدورة علوم الحاسوب و بعد الانتهاء يمكنك البدء في دورة تطوير التطبيقات باستخدام لغة JavaScript حتى يكون لديك علوم مسبقة في التعامل مع الحاسوب مثل مواد دورة علم الحاسوب وهي : مدخل إلى علوم الحاسوب أساسيات البرمجة أنظمة التشغيل ولينكس قواعد البيانات إلى عالم الويب البرمجة الكائنية الخوارزميات وبنى المعطيات أنماط التصميم ومن ثم الانتقال إلى دورة تطوير التطبيقات باستخدام لغة JavaScript
-
يبدو و كأنك تتحدث عن api , صحيح , كل لغة برمجة لديها تعامل متكامل مع apis و هناك مكتبات تتواصل مع api لجلب البيانات التي تكون على هيئة json و من ثم تقوم بعرضها في البرنامج و إذا كنت تستخدم Flutter في برمجة برنامج سطح المكتب هناك عدة برامج يمكنك التواصل مع api من خلالها مثل HTTP , DIO مثل الكود التالي var headers = { 'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9' }; var request = http.Request('GET', Uri.parse('api/user')); request.headers.addAll(headers); http.StreamedResponse response = await request.send(); if (response.statusCode == 200) { print(await response.stream.bytesToString()); } else { print(response.reasonPhrase); } , و إذا كنت تستخدم #c يمكنك استخدام RestSharp كما في الكود التالي var client = new RestClient("user"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); و البيانات المرجعة من هذه apis يمكنك عرضها في برنامج كيفما تشاء.
- 2 اجابة
-
- 1
-
-
هناك فرق حسب الاستخدام ، إذا كان تطبيقك يعتمد على api فهذا api يجلب البيانات من خلال قاعدة البيانات و يرسلها على شكل json للتطبيق ليتم التعامل معها من خلال التطبيق ، أما إذا كان التطبيق غير متصل api فيمكنك استخدام قواعد البيانات التي تكون متوفرة للتطبيق و تخزن على جهاز المستخدم مثلاً لغة فلاتر يمكنك إنشاء قاعدة بيانات على جهاز المستخدم مثل SQFlite و غيرها. فالأمر يحدده استخدام التطبيق فقط لا غير.
- 2 اجابة
-
- 1
-
-
ليس هناك أفضلية في ذلك ، حسب متطلبات المشروع الذي تعمل عليه ، و لكن من حيث السرعة يمكنك استخدام خدمات real time مثل socket io , firebase , pusher و أغلب المبرمجين يفضلون استخدام خدمات real time .
- 2 اجابة
-
- 1
-
-
هل يمكنك إرفاق الكود الذي تتوقعين أن تكون به المشكلة ؟
-
هل يمكنك ذكر ما هي المشكلة بالتفصيل أو يمكنك وضع صورة أو نص للخطأ إذا كان يظهر ، لكي نساعدك بشكلٍ أفضل ؟
-
هل يمكنك تحويل ترميز الريسبونس إلى utf8 عن طريق String body = jsonDecodeUtf8(response.bodyBytes); أو يمكنك إضافة الدالة utf8.decode إلى response.bodyBytes كما في الطريقة التالية json.decode(utf8.decode(response.bodyBytes)) إذا لم ينجح ذلك تأكد من شكل الريسبونس الي راجع من api و يكون بالعربية.
- 5 اجابة
-
- 1
-
-
هل ترميز الحقول في قاعدة البيانات utf8mb4_unicode_ci ؟
- 5 اجابة
-
- 1
-
-
يمكنك من خلال الرابط التالي من هنا ، العثور على تحديات في لغة البرمجة جافا سكريبت و يمكن العمل على حلها.
- 1 جواب
-
- 1
-
-
حاول مسح الملفات المؤقتة و ملفات build باستخدام الأمر التالي flutter clean ثم حاول تحديث فلاتر من خلال الأمر التالي flutter upgrade و تحديث الحزم من خلال الأمر التالي flutter pub upgrade ثم حاول تشغيل البرنامج مرة أخرى من خلال الأمر التالي flutter run
-
يجب التأكد من بيانات الاتصال بsmtp الخاص بك مثل MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null // MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}" وأيضا التأكد من حالة التشفير في ملف env. MAIL_ENCRYPTION=tls أو MAIL_ENCRYPTION=ssl , و التأكد من حذف الملفات المؤقتة من خلال الأمر التالي php artisan config:clear أو يمكنك استخدام الأمر التالي لحذف جميع الملفات المؤقتة php artisan optimize:clear
- 3 اجابة
-
- 1
-
-
هل هناك قيمة في account الموجودة في ملف constants.php في مجلد config يجب تغييرها للقيمة التي تريد البدء منها و لكن أنصحك بالاعتماد على قيمة id في ربما تكون أدق لجلب رقم المتجر.
-
لاحظ في الصورة الثانية السطر 70 ، أنه أفتراضياً يبدأ من العدد 100 ، هل يمكنك تعديلها و من ثم اخباري بالنتيجة. و أيضا لماذا لا تستفيد من قيمة id بحيث هي قيمة كل متجر يتم إنشائه وتكون رقمه ؟
- 7 اجابة
-
- 1
-
-
يمكنك إنشاء وسم div بهذا الشكل <div class="items"> <div class="box"> <div class="box-header"> <h3>title</h3> </div> <div class="box-body"> <img src="image1.png" /> </div> <div class="box-footer"> <p>Description here</p> </div> </div> <div class="box"> <div class="box-header"> <h3>title</h3> </div> <div class="box-body"> <img src="image1.png" /> </div> <div class="box-footer"> <p>Description here</p> </div> </div> <div class="box"> <div class="box-header"> <h3>title</h3> </div> <div class="box-body"> <img src="image1.png" /> </div> <div class="box-footer"> <p>Description here</p> </div> </div> <div class="box"> <div class="box-header"> <h3>title</h3> </div> <div class="box-body"> <img src="image1.png" /> </div> <div class="box-footer"> <p>Description here</p> </div> </div> <div> ثم نستخدم flexbox و لجعل العناصر بجانب بعض نختار الخاصية display: flex ليتم وضع العناصر بجانب بعضها مثل .items{ display: flex; } .items .box{ border: 2px solid #CCC; margin: 5px 20px; } و قمنا باستخدام الخاصية margin لجعل هوامش من الجهات الأربعة للصناديق التي تحتوي على العناصر المتمثلة في العنصر box .
- 1 جواب
-
- 1
-
-
أو يمكنك إنشاء عنصر حاوي للعناصر ( container ) بحيث يتم توسيط هذا العنصر في منتصف الصفحة باستخدام الخواص width, margin <div class="container"> // هنا العناصر الخاصة بك </div> والأن نطبق التنسيق لجعله في المنتصف .container{ width: 500px; margin: 0 auto }
-
المُنشئ ( constructor ) هو أيضًا Method في الكلاس ( class ) ، وفي ما يلي قد يجعلك تشعر بالاختلاف بشأن المُنشئ: يحمل المُنشئ نفس اسم الفئة ( class ) ، كما في المثال التالي class Person{ String name; int age; Person(){ name = new String(); age = 2; } } المُنشئ هو الطريقة الأولى التي يتم تشغيلها عند إنشاء مثيل للفئة (يسمى أيضًا الكائن). المُنشئ ، باعتباره أول طريقة يتم تشغيلها ، هو عادةً ما يُستخدم لإنشاء مثيل للكائنات وتهيئة المتغيرات ، والتي هي أعضاء في الفئة، لا يقوم المُنشئ بإرجاع أي قيمة وبالتالي لا يوجد نوع إرجاع. يمكن تحميل المُنشئ ، مثل أي وظيفة. Method هي مجموعة من العبارات التي يتم تجميعها معًا لإجراء عملية. مثل class Person{ public static int test(int x, int y) { } }
-
يمكنك استخدام مكتبة بوتستراب الذي توفر لك خصائص أكثر من رائعة في جعل الموقع متجاوب مع جميع الشاشات لذلك يمكنك الاطلاع على توثيق مكتبة بوتستراب من هنا ، و هذه المكتبة توفر مكونات جاهزة يمكنك استخدامها في موقعك بشكل كامل و هذه المكونات قابلة للتخصيص من قبل المطور أي بمعنى يمكن إجراء تعديلات عليها بشكل كلي لتناسب احتياجات المبرمج، و أيضا هناك طريقة أخرى و هي استخدام Media Queries التي تكون التركيبة العامة لها كالتالي /* هنا للشاشات الصغيرة جدا*/ @media (max-width: 576px) { ... } /* هنا لشاشات التابلت وغيرها من الأجهزة اللوحية */ @media (max-width: 768px) { ... } /* هنا لشاشات الحاسوب المكتبية*/ @media (max-width: 992px) { ... } /* هنا لشاشات الكبيرة*/ @media (max-width: 1200px) { ... } بحيث يمكن تنسيق الموقع ليكون متوافق مع شاشات الجوال كالتالي @media (max-width: 576px) { .navi a { text-decoration: none; color: #3a6cf4; font-weight: 500; font-size: 0.1em; padding-right: 23px; } .main-btn { text-align: center; display: block; } .social-icons { text-align: center; margin: 20px 0; } } بحيث يمكنك إكمال تنسيق الصفحة بناء على عرض الشاشة التي تحتاج أن يظهر عليها الموقع بالشكل الذي تريده , ويكون كامل ملف css.css @import url('https://fonts.googleapis.com/css2?family=Noto+Kufi+Arabic:wght@100;200;300;400;500;600;700;800;900&display=swap'); *{ font-family: 'Noto Kufi Arabic', sans-serif; margin: 0; padding: 0; box-sizing: border-box; scroll-behavior: smooth; direction: rtl; } header{ background-color: #f0f0f0; width: 100%; position: fixed; z-index: 999; display: flex; justify-content: space-between; align-items: center; padding: 10px 200px; } .logo{ text-decoration: none; color: #3a6cf4; font-weight: 700; font-size: 1.8em; } .navi a { text-decoration: none; color: #3a6cf4; font-weight: 500; font-size: 1.1em; padding-right: 30px; } .navi a:hover{ color: #601cfc; } section { padding: 100px 200px; } .main{ width: 100%; min-height: 100vh; display: flex; align-items: center; background: rgba(0,0,0,0.4) url(landing-image.png) no-repeat; background-blend-mode: darken; background-size: cover; background-position: center; padding-bottom: 60px; } .main h2{ color: #fff; font-size: 1.4em; font-weight: 500; } .main h2 span{ display: inline-block; margin-bottom: 10px; color: #4e9eff; font-size: 3em; font-weight: 600; } .main h3{ color: #fff; font-size: 2em; font-weight: 700; margin-top: 10px; margin-bottom: 30px; } .main-btn{ color: #fff; background-color: #3a6cf4; text-decoration: none; font-size: 1.1em; font-weight: 600; display: inline-block; padding: 0.25em 3.1875em; border-radius: 15px; margin-top: 10px; margin-bottom: 5px; transition: 0.7s ease; } .main-btn:hover{ background-color: #601cfc; transform: scale(1.1); } .social-icons a{ color: #fff; font-size: 1.7em; padding-left: 30px; margin-right: 5px; } .title{ display: flex; justify-content: center; color: #3a6cf4; font-size: 2.2em; font-weight: 800; margin-bottom: 30px; } .content{ display: flex; justify-content: center; flex-direction: row; flex-wrap: wrap; } .card{ background-color: #fff; width: 21.25em; box-shadow: 0px 5px 25px rgba(1 1 1 / 15%); border-radius: 10px; padding: 25px; margin: 15px; transition: 0.7s ease; } .card:hover{ transform: scale(1.1); } .icon{ color: #3a6cf4; font-size: 8em; text-align: center; } .info{ text-align: center; } .info h3{ color: #3a6cf4; font-size: 1.2em; font-weight: 700; margin: 10px; } .cv{ width: 100%; min-height: 100vh; background-color: #000016; } .cv-description{ color: #fff; font-size: 1.4em; font-weight: 500; } .links a:checked{ color: #f0f0f0; } p a{ color: #3a6cf4; text-decoration: none; } p a:hover{ color: #fff; } .cards-contact .content .icon{ font-size: 4.5em; } .info-2{ text-align: center; } .info-2 h3{ color: #000; font-size: 1.2em; font-weight: 700; margin: 10px; } .info-2 p{ font-size: 1.5em; font-weight: 700; } .footer{ background-color: #000016; color: #fff; padding: 2em; display: flex; justify-content: space-between; } .footer-title{ font-size: 1.3em; font-weight: 600; } .footer-title span{ color: #3a6cf4; } #menu{ width: 25; cursor: pointer; } @media (max-width: 576px) { .navi a { text-decoration: none; color: #3a6cf4; font-weight: 500; font-size: 0.1em; padding-right: 23px; } .main-btn { text-align: center; display: block; } .social-icons { text-align: center; margin: 20px 0; } } @media (max-width: 768px) { } @media (max-width: 992px) { } @media (max-width: 1200px) { } @media (max-width:300px){ body{ font-size: 10px; } } @media (max-width:1023px){ header{ padding: 12px 20px; } .navi a{ padding-left: 10px; } .title{ font-size: 1.8em; } section{ padding: 120px 20px; } .main-content h2{ font-size: 1em; } .main-content h3{ font-size: 1.0em; } .content{ flex-direction: column; align-items: center; } } @media (max-width:641px){ body{ font-size: 12px; } .main h2{ font-size: 1em; display: block; } .main-content h2{ font-size: 0.8em; } .main-content h3{ font-size: 1.4em; } }
-
يبدو أن firebase قامت بتحديث التعامل مع PhoneAuthProvider | verifyPhoneNumber يمكنك زيارة التوثيق الرسمي من هنا ، لذلك حاول تجربة إزالة الكود التالي PhoneAuthProvider.getInstance().verifyPhoneNumber( number, 10, TimeUnit.SECONDS, TaskExecutors.MAIN_THREAD, mCallBack ); إلى PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // Activity (for callback binding) .setCallbacks(mCallBack) // OnVerificationStateChangedCallbacks .build(); PhoneAuthProvider.verifyPhoneNumber(options); ثم في ملف app\gradle يمكنك استدعاء السطر التالي في dependencies implementation 'androidx.browser:browser:1.2.0'
- 5 اجابة
-
- 1
-
-
يمكنك استخدام حزمة flutter_image_compress يمكنك العثور عليها من هنا , تعمل هذه الحزمة على ضغط الصورة , وهناك توثيق كامل يمكنك قراءته للتعامل مع هذه المكتبة و هذه المكتبة تعمل على كلا النظامين ios / android ، ويمكنك تثبيت الحزمة في مشروعك من خلال فتح ملف pubspec.ymal من خلال الأمر التالي dependencies: flutter_image_compress: ^1.0.0-nullsafety ويمكنك استدعاء المكتبة في الملف الذي تعمل عليه من خلال import 'package:flutter_image_compress/flutter_image_compress.dart'; كذلك تزودك هذه الحزمة ببعض الخصائص للتعامل مع الصورة كخاصية الدوران ( rotate ) ، وخاصية autoCorrectionAngle و خاصية التحكم بجودة الصورة و خاصية العرض و الارتفاع الأقصى للصورة .
- 3 اجابة
-
- 1
-
-
فئة ArrayList عبارة عن مصفوفة يمكن تغيير حجمها ويمكن العثور عليها في حزمة java.util. يتمثل الاختلاف بين المصفوفة المضمنة و ArrayList في Java في أن حجم المصفوفة لا يمكن تعديله (إذا كنت تريد إضافة عناصر إلى / من المصفوفة أو إزالتها منها ، فيجب عليك إنشاء واحدة جديدة). بينما يمكن إضافة العناصر وإزالتها من ArrayList وقتما تشاء. يختلف بناء الجملة أيضًا قليلاً: import java.util.ArrayList; ArrayList<String> cars = new ArrayList<String>(); فئة LinkedList متطابقة تقريبًا مع ArrayList ، فئة LinkedList هي مجموعة يمكن أن تحتوي على العديد من الكائنات من نفس النوع ، تمامًا مثل ArrayList ، تحتوي فئة LinkedList على جميع الأساليب نفسها مثل فئة ArrayList لأن كلاهما يقوم بتطبيق واجهة List. هذا يعني أنه يمكنك إضافة عناصر وتغيير العناصر وإزالة العناصر ومسح القائمة بنفس الطريقة ، ومع ذلك ، بينما يمكن استخدام فئة ArrayList وفئة LinkedList بالطريقة نفسها ، إلا أنهما تم بناؤهما بشكل مختلف تمامًا. كيف تعمل ArrayList تحتوي فئة ArrayList على مصفوفة منتظمة بداخلها. عند إضافة عنصر ، يتم وضعه في المصفوفة ، إذا لم تكن المصفوفة كبيرة بما يكفي ، يتم إنشاء مصفوفة جديدة أكبر لتحل محل القديم وتتم إزالة المجموعة القديمة. كيف تعمل LinkedList تخزن LinkedList عناصرها في "حاويات". تحتوي القائمة على رابط للحاوية الأولى ولكل حاوية رابط إلى الحاوية التالية في القائمة. لإضافة عنصر إلى القائمة ، يتم وضع العنصر في حاوية جديدة وترتبط تلك الحاوية بإحدى الحاويات الأخرى في القائمة. LinkedList توفر عدة طرق ( وظائف ) للقيام بعمليات معينة بشكل أكثر كفاءة: addFirst () يضيف عنصرًا إلى بداية القائمة. addLast () أضف عنصرًا إلى نهاية القائمة. removeFirst () قم بإزالة عنصر من بداية القائمة. removeLast () قم بإزالة عنصر من نهاية القائمة. getFirst () احصل على العنصر في بداية القائمة. getLast () احصل على العنصر في نهاية القائمة.
- 2 اجابة
-
- 2
-