-
المساهمات
4657 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
30
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو بلال زيادة
-
لإنشاء عناوين URL جميلة في Laragon ، ستحتاج إلى استخدام وحدة Apache mod_rewrite وإنشاء ملف htaccess في الدليل الجذر لموقعك على الويب. فيما يلي الخطوات المحددة لإنشاء عناوين URL جميلة في Laragon: افتح إعدادات Apache في لوحة تحكم Laragon. حدد خيار "Rewrite_module" لتمكين mod_rewrite. أنشئ ملف .htaccess في الدليل الجذر لموقعك على الويب وأضف قواعد إعادة الكتابة اللازمة. يمكنك العثور على أمثلة لإعادة كتابة القواعد عبر الإنترنت والتي يمكنك تكييفها وفقًا لاحتياجاتك الخاصة. اختبر عناوين URL الجديدة للتأكد من أنها تعمل على النحو المتوقع. يمكنك استخدام قاعدة إعادة الكتابة التالية لإزالة امتداد .php من عناوين URL الخاصة بك. RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php سيؤدي هذا إلى إعادة توجيه جميع طلبات example.com/page إلى example.com/page.php يمكنك أيضًا استخدام قاعدة إعادة الكتابة التالية لإعادة توجيه الطلبات لصفحة معينة إلى صفحة مختلفة. RewriteEngine On RewriteRule ^about-us/?$ about.php [NC,L] سيؤدي هذا إلى إعادة توجيه جميع الطلبات الخاصة بـ example.com/about-us إلى example.com/about.php من المهم ملاحظة أن الخطوات الدقيقة قد تختلف وفقًا لإعدادك المحدد وإصدار Laragon الذي تستخدمه. تأكد أيضًا من قراءة ملف .htaccess بواسطة Apache ، عن طريق التحقق من ملفات تهيئة Apache أو التحقق من إعدادات Laragon.
-
هذا الأمر يرجع لك في تحديد أين تديد تعلم هذه اللغة و لكن تأكد بأن كل دورة تأخذها من أكاديمية حسوب تحصل على شهادة في نهاية الدورة بعد اجتياز الاختبار المخصص لهذه الدورة ، بالتالي هذه ميزة قوية تقدمها الأكاديمية لتعطي المطلع على هذه الشهادة بأنك اجتزت الدورة بنجاح ، خلال الدورة سوف تتعلم الجافاسكريبت من الصفر .
- 1 جواب
-
- 1
-
-
يبدو الكود الذي قدمته أنه من المفترض أن يفتح ملف Excel باستخدام وحدة filedialog ، وتحميل الورقة النشطة من المصنف workbook ، ثم استرداد قيمة خلية معينة (الصف 9 ، العمود 4) وطباعتها. ومع ذلك ، هناك مشكلتان في الكود تمنعه من العمل بشكل صحيح. يتم تعريف الورقة داخل دالة openFile () ، ولكن تتم الإشارة إليها في دالة a () . لإصلاح ذلك ، تحتاج إلى التأكد من تعريف الورقة على أنها متغير عام بحيث يمكن الوصول إليها من خلال كلتا الوظيفتين. يمكنك القيام بذلك عن طريق إضافة "global sheet" في بداية دالة openFile () .يقوم التابع filedialog.askopenfilename() بإرجاع سلسلة نصية ، لكن دالة load_workbook () تتوقع كائنًا يشبه المسار. لذلك تحتاج إلى تحويل السلسلة التي تم إرجاعها إلى كائن يشبه المسار عن طريق إضافة مكتبة "pathlib" واستخدام دالة pathlib.Path () لتحويل السلسلة إلى كائن يشبه المسار. هذا هو الكود المصحح: from pathlib import Path import openpyxl from openpyxl import load_workbook import filedialog def openFile(): global sheet filepath = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes= (("text files","*.xlsx"),("all files","*.*"))) filepath = Path(filepath) wb = load_workbook(filepath) sheet = wb.active def a(): global sheet abc=sheet.cell(row=9,column=4).value print(abc) openFile() a()
- 4 اجابة
-
- 1
-
-
لإنشاء عناوين URL جميلة في XAMPP ، ستحتاج إلى استخدام وحدة Apache mod_rewrite وإنشاء ملف htaccess في الدليل الجذر لموقعك على الويب. فيما يلي الخطوات المحددة لإنشاء عناوين URL جميلة في XAMPP: افتح ملف تكوين Apache (httpd.conf) الموجود في دليل تثبيت XAMPP. على نظام التشغيل Windows ، يوجد هذا عادةً في "C: \ xampp \ apache \ conf \ httpd.conf". ابحث عن الوحدة النمطية mod_rewrite بالبحث عن السطر الذي يحتوي على "mod_rewrite.so". أزل التعليق عن السطر بإزالة "#" في البداية. احفظ التغييرات في ملف التكوين وأعد تشغيل خادم Apache. أنشئ ملف .htaccess في الدليل الجذر لموقعك على الويب وأضف قواعد إعادة الكتابة اللازمة. يمكنك العثور على أمثلة لإعادة كتابة القواعد عبر الإنترنت والتي يمكنك تكييفها وفقًا لاحتياجاتك الخاصة. اختبر عناوين URL الجديدة للتأكد من أنها تعمل على النحو المتوقع.
-
حاولي إزالة النجمة من بين الكلمة hello world ووضع علامة التنصيص كالتالي >>> print("hello world")
- 2 اجابة
-
- 1
-
-
هناك عدة طرق لإنشاء تطبيق سطح مكتب باستخدام PHP ، وإليك طريقتان شائعتان: باستخدام امتداد PHP-GTK: PHP-GTK هو امتداد PHP يسمح لك بإنشاء واجهات مستخدم رسومية (GUIs) لتطبيقات سطح المكتب باستخدام PHP. يمكنك استخدام مكتبة GTK + لإنشاء النوافذ والأزرار والقوائم وعناصر واجهة المستخدم الرسومية الشائعة الأخرى. تتطلب هذه الطريقة أن يكون لديك بعض المعرفة بـ GTK + وامتداد PHP-GTK. استخدام إطار عمل PHP و Electron: Electron هو إطار عمل يسمح لك بإنشاء تطبيقات سطح مكتب عبر الأنظمة الأساسية باستخدام تقنيات الويب مثل HTML و CSS و JavaScript. يمكنك استخدام إطار عمل PHP ، مثل Laravel ، لإنشاء الواجهة الخلفية لتطبيقك ، واستخدام Electron لإنشاء الواجهة الأمامية وحزم تطبيقك لمنصات مختلفة. فيما يلي مثال لكيفية إنشاء تطبيق سطح مكتب بسيط PHP-GTK: قم بتثبيت ملحق PHP-GTK على نظامك. قم بإنشاء ملف PHP جديد وقم بتضمين امتداد PHP-GTK في أعلى الملف: <?php require_once 'gtk.php'; أنشئ نافذة جديدة وأضف إليها عناصر مثل الأزرار والتسميات: $window = new GtkWindow(); $button = new GtkButton("Hello World!"); $window->add($button); أظهر النافذة وقم بتشغيل الحلقة الرئيسية main loop: $window->show_all(); Gtk::main(); يرجى ملاحظة أن PHP-GTK لم يعد مطورًا بشكل نشط وغير متوافق مع PHP 8.x ، قد ترغب في التفكير في بدائل مثل Electron أو QT.
- 2 اجابة
-
- 1
-
-
تحدد هذه الشفرة وظيفة jQuery جديدة تسمى "exists" ، والتي يمكن استخدامها للتحقق مما إذا كان كائن jQuery يحتوي على أي عناصر ، وإذا كان الأمر كذلك ، لتنفيذ وظيفة رد نداء callback function. تأخذ الدالة وسيطة واحدة ، "callback" ، وهي الوظيفة التي سيتم استدعاؤها إذا كان كائن jQuery يحتوي على أي عناصر. بالإضافة إلى ذلك ، سيتم تمرير أي وسيطات إضافية إلى وظيفة "موجود" بعد "رد الاتصال callback" كوسائط إلى وظيفة رد الاتصال callback. تبدأ الوظيفة باستخدام طريقة Array.prototype.slice.call لتحويل كائن الوسائط إلى مصفوفة ، ثم تقوم بتعيين هذه المصفوفة إلى المتغير "args". بعد ذلك ، يستخدم خاصية jQuery المضمنة "length" للتحقق مما إذا كان كائن jQuery يحتوي على أي عناصر. إذا كان الطول أكبر من 0 ، فهذا يعني أن كائن jQuery يحتوي على عناصر وأن وظيفة رد الاتصال تسمى مع تعيين "this" على كائن jQuery ، وتم تمرير "args" كوسيطات لوظيفة رد الاتصال. أخيرًا ، تُرجع الدالة كائن jQuery الأصلي ، بحيث يمكن ربط طرق jQuery الأخرى به.
- 1 جواب
-
- 1
-
-
تشير رسالة الخطأ هذه إلى عدم التعرف على الاسم "countUP" في السياق الحالي لبرنامج Unity. من المحتمل أن "countUP" لم يتم تعريفه أو تعريفه بشكل صحيح في النطاق الحالي أو مساحة الاسم. تأكد من كتابة "countUP" بشكل صحيح ، يجب أن تكون "countUp" بحرف u صغير بدلاً من حرف U. تحقق أيضًا من تعريف المتغير والإعلان عنه قبل استخدامه في دالة countUpTimer () تأكد من أن البرنامج النصي الذي يحتوي على متغير "countUp" متصل بشكل صحيح بكائن GameObject المناسب في مشهد الوحدة الخاص بك. تأكد من استيراد البرنامج النصي بشكل صحيح أو الإشارة إليه في البرنامج النصي الآخر حيث تحاول الوصول إلى متغير countUp. تحقق أيضًا من عدم استدعاء البرنامج النصي قبل تهيئته. using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class TimeCount : MonoBehaviour { public int countUp = 1; public Text TimerUI; // Start is called before the first frame update void Start() { countUpTimer(); } public void countUpTimer() { if(countUp>0) { TimeSpan spanTime = TimeSpan.FromSeconds(countUp); TimerUI.text = "Timer:" + spanTime.Minutes +":"+spanTime.Seconds; countUp++; Invoke("countUpTimer", 1.0f); } } }
-
تظهر رسالة الخطأ "Invaled keystore format" عادةً عند محاولة تحميل أو استيراد ملف keystore للتوقيع على تطبيق Android ، وهذا يعني أن ملف keystore ليس بالتنسيق الصحيح أو تم إتلافه. فيما يلي بعض الأسباب والحلول المحتملة لهذا الخطأ: لم يتم إنشاء ملف تخزين المفاتيح باستخدام الأمر Java keytool. تأكد من إنشاء ملف keystore باستخدام الأمر keytool وليس باستخدام أدوات أخرى. ملف تخزين المفاتيح ليس بتنسيق الملف الصحيح. يجب أن تكون ملفات Keystore بتنسيق JKS أو PKCS12. ملف تخزين المفاتيح تالف أو تالف. حاول إنشاء ملف تخزين مفاتيح جديد وتحقق من استمرار الخطأ. كلمة المرور المقدمة للوصول إلى مخزن المفاتيح غير صحيحة. تحقق من استخدام كلمة المرور الصحيحة لإنشاء ملف تخزين المفاتيح ومن استخدام كلمة المرور الصحيحة للوصول إليه. مخزن المفاتيح ليس في المسار الصحيح ، تحقق من أن مخزن المفاتيح على المسار الصحيح. إذا لم يعمل أي من الحلول المذكورة أعلاه ، فقد يكون من الضروري استخدام ملف تخزين مفاتيح مختلف أو إعادة إنشاء ملف تخزين المفاتيح باستخدام الأمر keytool. تأكد أيضًا من التحقق من وثائق الأداة التي تستخدمها للتوقيع على تطبيقك ، حيث قد يكون لها متطلبات محددة أو خطوات إضافية يجب اتباعها. لإنشاء ملف تخزين المفاتيح في Android Studio ، يمكنك استخدام الأمر keytool ، المضمن في Java Development Kit (JDK). فيما يلي خطوات إنشاء ملف keystore في Android Studio: افتح موجه الأوامر أو المحطة الطرفية على جهاز الكمبيوتر الخاص بك. انتقل إلى الموقع الذي تريد إنشاء ملف تخزين المفاتيح فيه. قم بتشغيل الأمر التالي لإنشاء ملف تخزين مفاتيح جديد: keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000 يقوم هذا الأمر بإنشاء ملف تخزين مفاتيح جديد يسمى "my-release-key.keystore" بصلاحية 10000 يوم ، باستخدام خوارزمية RSA بحجم مفتاح 2048 بت. استبدل "alias_name" باسم فريد للمفتاح. سيُطلب منك تعيين كلمة مرور لملف تخزين المفاتيح وتقديم معلومات أخرى مثل اسمك ومؤسستك وموقعك. بمجرد تنفيذ الأمر ، سيتم إنشاء ملف تخزين المفاتيح في الموقع الذي قمت بتشغيل الأمر فيه. لاستخدام ملف keystore ، تحتاج إلى توفير مسار ملف keystore وكلمة مرور keystore في قسم android من ملف build.gradle على مستوى التطبيق. من المهم ملاحظة أنه يجب عليك الاحتفاظ بملف تخزين المفاتيح في مكان آمن وعدم مشاركته مع أي شخص ، حيث يتم استخدامه للتوقيع على تطبيقك وحمايته من العبث. تأكد أيضًا من تذكر كلمة مرور تخزين المفاتيح والاسم المستعار وكلمة المرور الرئيسية ، فستحتاجها في كل مرة تريد فيها تسجيل تطبيقك باستخدام مخزن المفاتيح هذا.
-
Laravel Breeze هو تطبيق بسيط وبسيط لجميع الميزات التي تحتاجها للتسجيل وتسجيل الدخول وإعادة تعيين كلمة المرور ، وهي مبنية على ميزات المصادقة المدمجة في Laravel. يمكن استخدامه لتنفيذ مصادقة متعددة في Laravel. فيما يلي خطوات إعداد مصادقة متعددة في Laravel باستخدام Laravel Breeze: قم بتثبيت Laravel Breeze composer require laravel/breeze --dev قم بتشغيل php artisan breeze:install أنشئ حارسًا جديدًا (guard) للمصادقة الجديدة الخاصة بك عن طريق تشغيل php artisan make:guard <guardName> قم بتسجيل الحارس الجديد في config/auth.php ضمن مجموعة guards . قم بإنشاء موفر جديد (provider ) للمصادقة الجديدة الخاصة بك عن طريق تشغيل php artisan make:provider <providerName> سجّل الموفر الجديد في config/app.php ضمن مجموعة providers . قم بإنشاء نموذج جديد (model ) للمصادقة الجديدة الخاصة بك عن طريق تشغيل php: model <modelName> قم بتحديث الحارس الذي أنشأته في الخطوة 3 لاستخدام نموذجك الجديد عن طريق تحديث خاصية النموذج في config / auth.php. قم بإنشاء وحدة تحكم تسجيل دخول جديدة توسع وحدة تحكم تسجيل الدخول الخاصة بـ Breeze وقم بتحديث الحارس المستخدم في دالة authenticate . قم بإنشاء طرق عرض جديدة للمصادقة الجديدة وقم بتحديث طرق تسجيل الدخول والتسجيل لاستخدام طرق العرض الجديدة. بعد هذه الخطوات ، يجب أن يكون لديك نظام مصادقة متعدد وظيفي بالكامل تم إعداده في تطبيق Laravel الخاص بك. يمكنك تكرار الخطوات لأنواع المصادقة الإضافية. في Laravel ، الكلاس "guard" هو فئة مسؤولة عن مصادقة الطلبات. يحدد كل حارس كيفية مصادقة المستخدمين لاسم حارس معين. يأتي Laravel مزودًا بالعديد من الحراس ، بما في ذلك حارس الجلسة وحارس الرمز المميز ، ولكن يمكنك أيضًا إنشاء حراس مخصصين خاصين بك. وظيفة guard هي وظيفة مساعدة يوفرها Laravel تتيح لك استرداد مثيل guard لاسم حارس معين. يمكن استخدامه في أماكن مختلفة في تطبيقك ، مثل وحدات التحكم والمسارات والبرمجيات الوسيطة. على سبيل المثال ، يمكنك استخدامه في وحدة تحكم لمصادقة مستخدم باستخدام حارس معين: public function index(Request $request) { $user = auth()->guard('guard-name')->user(); // do something with the user } تُستخدم وظيفة guard أيضًا في البرمجيات الوسيطة auth ، المسؤولة عن مصادقة المستخدمين للمسارات المحمية بواسطة هذه البرامج الوسيطة. بشكل افتراضي ، تستخدم البرمجيّة الوسيطة auth حارس الجلسة ، لكن يمكنك تحديد حارس مختلف بتمرير اسم guard كمعامل إلى البرمجيّة الوسيطة: Route::middleware(['auth:guard-name'])->group(function () { // routes that are protected by the guard-name guard }); يتم تعريف اسم الحارس في ملف config / auth.php ، في مصفوفة الحراس guards ، حيث يمكنك تحديد برنامج تشغيل الحارس والموفر provider. من المهم ملاحظة أنه يمكن أن يكون لديك حارس متعدد في التطبيق الخاص بك ويمكنك تحديد أي واحد تستخدمه وفقًا لمتطلباتك. في Laravel ، "الوسيط broker " هو فئة مسؤولة عن معالجة طلبات إعادة تعيين كلمة المرور. يحدد كل وسيط كيفية إعادة تعيين كلمات المرور لاسم حارس معين. يأتي Laravel مع العديد من الوسطاء ، بما في ذلك وسيط "المستخدمين" الافتراضي الذي يتم استخدامه لإعادة تعيين كلمات المرور للحارس الافتراضي ، ولكن يمكنك أيضًا إنشاء وسطاء مخصصين خاصين بك. وظيفة الوسيط broker هي وظيفة مساعدة يوفرها Laravel تتيح لك استرداد مثيل الوسيط لاسم حارس محدد. يمكن استخدامه في أماكن مختلفة في تطبيقك ، مثل وحدات التحكم والمسارات. على سبيل المثال ، يمكنك استخدامه في وحدة تحكم لإرسال رابط إعادة تعيين كلمة المرور إلى مستخدم: public function sendResetLinkEmail(Request $request) { $response = $this->broker()->sendResetLink( $request->only('email') ); return $response == Password::RESET_LINK_SENT ? $this->sendResetLinkResponse($response) : $this->sendResetLinkFailedResponse($request, $response); } تُستخدم وظيفة الوسيط broker أيضًا في البرنامج الوسيط لكلمة المرور ، وهو المسؤول عن معالجة طلبات إعادة تعيين كلمة المرور للمسارات المحمية بواسطة هذه البرامج الوسيطة. بشكل افتراضي ، تستخدم البرامج الوسيطة لكلمة المرور وسيط "المستخدمين" الافتراضي ، ولكن يمكنك تحديد وسيط مختلف عن طريق تمرير اسم guard كمعامل إلى البرنامج الوسيط: Route::middleware(['password:guard-name'])->group(function () { // routes that are protected by the guard-name broker }); يتم تحديد اسم الوسيط broker في ملف config / auth.php ، في مصفوفة كلمات المرور ، حيث يمكنك تحديد برنامج تشغيل الوسيط والبريد الإلكتروني.
- 1 جواب
-
- 1
-
-
ترتبط رسالة الخطأ هذه بخدمة Firebase Cloud Messaging (FCM) وتحديداً خدمة معرف مثيل Google (IID). هذا يعني أن هناك مشكلة في خدمة IID تمنع تطبيقك من التسجيل أو الحصول على رمز مميز لـ FCM. يمكن أن يحدث هذا الخطأ لعدة أسباب مثل: لم يتم تكوين التطبيق بشكل صحيح لـ FCM. التطبيق غير مصرح له باستخدام FCM. توجد مشكلة في خدمة IID. هناك مشكلة في الجهاز أو نظام التشغيل الذي يعمل عليه التطبيق. هناك مشكلة في خدمات Google Play على الجهاز. يمكنك تجربة الخطوات التالية لحل المشكلة: تحقق من أن تطبيقك مهيأ بشكل صحيح لـ FCM ، بما في ذلك إضافة التبعيات الضرورية وتكوين المكون الإضافي لخدمات Google. تحقق من أن تطبيقك لديه الأذونات اللازمة لاستخدام FCM. تأكد من تحديث خدمات Google Play على الجهاز. حاول إلغاء تثبيت التطبيق وإعادة تثبيته. حاول إعادة تشغيل الجهاز. إذا استمرت المشكلة ، يمكنك أيضًا التحقق من Firebase Console ومعرفة ما إذا كان هناك أي خطأ أو رسالة تحذير يمكن أن تساعدك في تحديد المشكلة.
-
إذا كنت تستخدم RecyclerView لعرض قائمة بالعناصر و ImageView و TextView داخل كل عنصر ، ولكن الصورة لا تظهر ، فهناك بعض الأشياء التي يمكنك التحقق منها: تأكد من تحديد ImageView بشكل صحيح في التخطيط لكل عنصر في القائمة. تحقق من تحميل ملف الصورة بشكل صحيح. تحقق من مسار الصورة للتأكد من أنها تشير إلى الموقع الصحيح. تأكد من ضبط الصورة على ImageView في المكان الصحيح في الكود الخاص بك ، مثل طريقة الربط لحامل العرض الخاص بك. تأكد من أن ImageView مرئي على الشاشة عن طريق التحقق من خاصية الرؤية للعرض. قد ترغب أيضًا في التحقق من عدم تحميل الصورة عبر الشبكة والتحقق مما إذا كانت الشبكة معطلة أم لا. تحقق أيضًا مما إذا كانت الصورة ليست كبيرة جدًا بحيث لا يمكن تحميلها. من خلال التحقق من هذه العناصر ، يجب أن تكون قادرًا على تحديد وإصلاح المشكلة التي تتسبب في عدم ظهور الصورة في القائمة.
-
كما اخبرتك حيدر ، تواصل مع الدعم الفني و سوف يتعاملون معك بافضل اسلوب في حل مشكلتك أو يمكنك السؤال عن أي شيء تريده.
- 3 اجابة
-
- 1
-
-
حاول التواصل مع الدعم الفني و اخبارهم بما تريد ربما يمكنهم العمل على حل مشكلتك بأفضل اسلوب لديهم.
- 3 اجابة
-
- 1
-
-
san هي شبكات منطقة التخزين و nas هي التخزين المتصل بالشبكة ، و دعينا نحدد ما هم تعد SAN (شبكات منطقة التخزين) و NAS (التخزين المتصل بالشبكة) كلاهما من حلول تخزين الشبكة وتبدو متشابهة للوهلة الأولى في كثير من الحالات يمكن استخدامها أيضًا في بيئات مماثلة كلاهما يستخدم عادة RAID وكلاهما يوفر عددًا من ميزات إدارة التخزين والحماية في حل قائم على السحابة يتم دعم كل من SAN و NAS ، مما يسمح للمستخدمين باختيار البنية الأكثر منطقية بالنسبة لهم. SAN مقابل NAS: الاتصال والبروتوكولات عند كل من SAN و NAS في واحد بيئة البنية التحتية مدعومة ، يتمتع المستخدمون بالمرونة للاستفادة من كليهما عند الحاجة. عادةً ما تستخدم SANs ملف قناة الألياف اتصال ، في حين تستخدم حلول NAS عادة واحدة شبكة TCP / IP، مثل إيثرنت. لكن الفرق الحقيقي يكمن في الطريقة التي يتم بها تناول البيانات. يوفر SAN الوصول إلى كتل البيانات التي تشكل الملفات ، بينما توفر NAS الوصول إلى البيانات كملفات كاملة. سيقوم مهندسو التخزين باختيارهم بناءً على نوع البيانات التي يتم تخزينها وأي بنية توفر أعلى مستوى من الأداء.
-
مرحباً صابر ، عليك تحديد أولاً ما هي اللغة التي تريد تعلمها مثل ionic , dart , cordova, java , swift أو أي لغة يمكنك من خلالها إنشاء تطبيق موبايل ، و من ثم يجب عليك البدأ في تعلم اساسيات هذه اللغة و من ثم محاولة تطبيق دروس قد تجدها في كثير من المراجع و يمكنك ايضا الالتحاق بالدورات لتزيد من مهاراتك. بالتوفيق
- 9 تعليقات
-
- avd
- marshmallow
- (و 12 أكثر)
-
يجب التأكد من أن ملف google-services.json بنفس الأسم بحيث لا يكون مثلاً google-services (1).json ثم يجب عليك التأكد من إضافة المكتبة التالي في ملف pubspec.ymal firebase_core: ^1.20.0 ثم في ملف build.gradle يجب وضع السطر التالي classpath 'com.google.gms:google-services:4.3.13' في أوبجكت dependencies ثم في مسار android\app\build.gradle يجب وضه السطر التالي apply plugin: 'com.google.gms.google-services' أسفل apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
-
حاول جلب المكتبة التالية firebase_core: ^1.20.0 و اخبرني بالنتيجة لو سمحت ؟
- 6 اجابة
-
- 1
-
-
حاول استخدام cmd بحيث تقوم بالدخول إلى مجلد android في مجلد المشروع E:\car_wash\android ثم يمكنك تنفيذ الأمر التالي gradlew signReport ستظهر لك جميع SHA.
-
نعم قم بإرسال الكود لو سمحت.
-
حاول وضع الويدجت الخاص بأيقونة العين داخل ويدجت Expanded أو Flexible ، كمثال على ذلك Row( children:[ Expanded( child: // Any Widget Here ) ] ) أو باستخدام Flexible Row( children:[ Flexible( child: // Any Widget Here ) ] )
-
في دالة BottomNavigationBarItem يمكنك وضع لون الخلفية للون الأحمر بهذا الشكل BottomNavigationBarItem( backgroundColor: Colors.red, icon: Icon(Icons.add_chart_sharp), label: "one", ), بخصوص المشكلة الثانية و هي عدم الأنتقال إلى الصفحات عند الضغط على الأيقونات أسفل ، لأنه لم تقوم بوضع صفحات للتنقل عليها فيمكنك إنشاء List بهذا الشكل final pages = [ const Page1(), const Page2(), const Page3(), const Page4(), ]; ووضع في body هذه القائمة بهذا الشكل body: pages[pageIndex], و الصفحات ممكن أن تكون class Page1 extends StatelessWidget { const Page1({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container( color: const Color(0xffC4DFCB), child: Center( child: Text( "Page Number 1", style: TextStyle( color: Colors.green[900], fontSize: 45, fontWeight: FontWeight.w500, ), ), ), ); } } class Page2 extends StatelessWidget { const Page2({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container( color: const Color(0xffC4DFCB), child: Center( child: Text( "Page Number 2", style: TextStyle( color: Colors.green[900], fontSize: 45, fontWeight: FontWeight.w500, ), ), ), ); } } class Page3 extends StatelessWidget { const Page3({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container( color: const Color(0xffC4DFCB), child: Center( child: Text( "Page Number 3", style: TextStyle( color: Colors.green[900], fontSize: 45, fontWeight: FontWeight.w500, ), ), ), ); } } class Page4 extends StatelessWidget { const Page4({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container( color: const Color(0xffC4DFCB), child: Center( child: Text( "Page Number 4", style: TextStyle( color: Colors.green[900], fontSize: 45, fontWeight: FontWeight.w500, ), ), ), ); } } فيكون كامل الكود import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( debugShowCheckedModeBanner: false, title: 'Welcome to Flutter', home: NewTest()); } } class NewTest extends StatefulWidget { const NewTest({Key? key}) : super(key: key); @override State<NewTest> createState() => _NewTestState(); } class _NewTestState extends State<NewTest> { @override Widget build(BuildContext context) { int _selectedIndex = 0; final pages = [ const Page1(), const Page2(), const Page3(), const Page4(), const Page4(), ]; void _onItemTapped(int index) { setState(() { _selectedIndex = index; }); } return Scaffold( appBar: AppBar(), drawer: const Drawer(), body: pages.elementAt(_selectedIndex), bottomNavigationBar: BottomNavigationBar( items: const [ BottomNavigationBarItem( backgroundColor: Colors.red, icon: Icon(Icons.add_chart_sharp), label: "one", ), BottomNavigationBarItem( backgroundColor: Colors.red, icon: Icon(Icons.add_chart_sharp), label: "two", ), BottomNavigationBarItem( icon: Icon(Icons.add_chart_sharp), label: "three", ), BottomNavigationBarItem( icon: Icon(Icons.add_chart_sharp), label: "foure", ), BottomNavigationBarItem( icon: Icon(Icons.add_chart_sharp), label: "five", ) ], // styles unselectedItemColor: Colors.black, selectedItemColor: Colors.blue, showUnselectedLabels: true, showSelectedLabels: true, // onTap doesn't working onTap: _onItemTapped, currentIndex: _selectedIndex, ), ); } } class Page1 extends StatelessWidget { const Page1({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container( color: const Color(0xffC4DFCB), child: Center( child: Text( "Page Number 1", style: TextStyle( color: Colors.green[900], fontSize: 45, fontWeight: FontWeight.w500, ), ), ), ); } } class Page2 extends StatelessWidget { const Page2({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container( color: const Color(0xffC4DFCB), child: Center( child: Text( "Page Number 2", style: TextStyle( color: Colors.green[900], fontSize: 45, fontWeight: FontWeight.w500, ), ), ), ); } } class Page3 extends StatelessWidget { const Page3({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container( color: const Color(0xffC4DFCB), child: Center( child: Text( "Page Number 3", style: TextStyle( color: Colors.green[900], fontSize: 45, fontWeight: FontWeight.w500, ), ), ), ); } } class Page4 extends StatelessWidget { const Page4({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container( color: const Color(0xffC4DFCB), child: Center( child: Text( "Page Number 4", style: TextStyle( color: Colors.green[900], fontSize: 45, fontWeight: FontWeight.w500, ), ), ), ); } }
-
هل يمكنك إرفاق كامل كود الصفحة لو سمحت ؟