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

بلال زيادة

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

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

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

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

    30

كل منشورات العضو بلال زيادة

  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>
  2. الخطأ في الكود التالي 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() ,) ), ], ),
  3. العفو , يمكنك وضع أي سؤال هنا ويمكننا مساعدتك في حله بإذن الله .
  4. سأخبرك عن طريق الكود 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(); }
  5. يمكنك في main.dart من استدعاء الدالة حتى تجلب البيانات وتخزنها في Provider ومن ثم تستطيع جلبها عن طريق Consumer في أي مكان بالتطبيق. و ملف main هو بداية إقلاع التطبيق.
  6. الي حتعمله انك تستدعي api الي بتخزن بياناته في Provider عند إقلاع التطبيق.
  7. انت تستخدم Provider يجب عليك هنا تشغيل الProvider عند إقلاع التطبيق حتى تستطيع جلبها من API و من ثم تستخدمها في أي مكان بالتطبيق. حتى لا تسبب مشاكل بعد ذلك لك في أي مكان بالتطبيق.
  8. يمكنك وضع دالة الاتصال و الاستعلام من api في دالة initState @override void initState() { // ignore: todo // TODO: implement initState super.initState(); getAsync(); } ليتم الاتصال ب api في اول عملية بناء الواجهة وهكذا تضمن عدم تخزين قيم فارغة في المتغيرات. هناك طريقة ثانية وهي استخدام FutureBuilder بحيث تستخدم hasData التي توفرها FutureBuilder إذا كان هناك داتا أعرض الواجهة إذا لم يكن بيانات ضع shimmer لتلطيف عملية loading.
  9. ربما يجب ان تكون مسار لجلب البيانات فيكون بهذا الشكل Route::get('chart-api', 'MyControllerController@getchart')->name('getChart'); ثم بداخل المتحكم تضيف $getData = route('getChart'); ثم يمكن استخدام دالة load لجلب البيانات الجديدة بهذا الشكل $getData = route('getChart'); $chart->labels(['chart1'])->load($getData)
  10. هذا الأمر يحدث كثيراً مع استخدام فلاتر مع الأندرويد ستوديو لذلك قم بإعادة تشغيل البرنامج مرة أخرى و ستعمل معك الأقتراحات. أو قم بتحديث برنامج الأندرويد ستوديو.
  11. يمكنك استخدام حزمة url_launcher ومن ثم تمرر لها الرقم launch("tel://214324234"); بداخل دالة onPressed onPressed: () => launch("tel://21213123123"),
  12. المشكلة في أنك تستخدم SeoResource::collection($this->whenLoaded('seo')) ولكن لديك عنصر واحد فقط وليس مجموعة وبالتالي يمكنك استبدال 'seo' => SeoResource::collection($this->whenLoaded('seo')), بالتالي 'seo' => new SeoResource($this->whenLoaded('seo')),
  13. إذا كنت تريد تمكين / تعطيل شريط التصحيح في وقت التشغيل , فاستخدم \Debugbar::enable(); لتمكين شريط التصحيح و يمكنك استخدام \Debugbar::disable(); لتعطيل شريط التصحيح ,أيضا يمكنك إنشاء Middleware وليكن اسمه DebuggerMiddleware عن طريق الأمر التالي php artisan make:middleware DebuggerMiddleware ثم في المسار التالي app/Http/Kernel.php قم بفتح ملف kernel.php وفي مصفوفة middleware$ ضع \App\Http\Middleware\DebuggerMiddleware::class, سيكون DebuggerMiddleware بهذ الشكل <?php namespace App\Http\Middleware; use Closure; class DebuggerMiddleware { public function handle($request, Closure $next) { if (auth()->user() && in_array(auth()->id(), [1,2,3])) { \Debugbar::enable(); } else { \Debugbar::disable(); } return $next($request); } }
  14. يمكنك إزالتها عن طريق تنفيذ الأمر التالي composer remove tcg/voyager ثم يمكنك إزالة مستودع larapack hooks من ملف composer.json الموجود في المجلد الرئيسي للمشروع "repositories": { "hooks": { "type": "composer", "url": "https://larapack.io" } } أيضًا قم بمسح المسارات التي تكونها voyager عن طريق فتح المسار التالي routes/web.php لفتح ملف web.php و قم بإزالة التالي Route::group(['prefix' => 'admin'], function () { Voyager::routes(); }); ثم قم بفتح الملف app.php الموجود في المسار التالي config/app.php وقم بحذف التالي TCG\Voyager\VoyagerServiceProvider::class, و من ثم في المودل User.php قم بتغيير التالي class User extends \TCG\Voyager\Models\User إلى use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable ثم أحذف الملف voyager.php من المجلد config,ثم أحذف المسار التالي public/vendor/tcg
  15. في ملف voyager.php الموجود بداخل مجلد config , أضف namespace خاص بك وليكن 'controllers' => [ 'namespace' => 'App\Http\Controllers\MyNamespace', ], ثم أنشر وحدات تحكم voyageres إلى namespace الخاص بك php artisan voyager:controllers ضمن namespace, قم بإنشاء متحكم جديد مشتق من VoyagerBreadController <?php namespace App\Http\Controllers\MyNamespace; use Illuminate\Http\Request; class MyController extends VoyagerBreadController { // ..... } ثم في bread editor يمكنك الإشارة إلى المتحكم الذي قمت بإنشاءه ليتم استخدامه.
  16. تحتاج إلى تغيير دالة shouldBeDisplayed الخاصة ب Widgetعلى النحو التالي: public function shouldBeDisplayed(){ return auth()->user()->hasRole('admin'); } فهنا يتحقق من أن دور المستخدم الحالي هو المسؤول أم لا.
  17. يمكنك استخدام دالة hasattr() بهذا الشكل if hasattr(a, 'property'): a.property ولكن إذا كنت تريد فقط قيمة attribute مع القيمة الافتراضية إذا لم تكن موجودة ، فإن الخيار الأفضل هو استخدام getattr () getattr(a, 'property', 'default value') property = getattr(a,"property",None) if property: print property
  18. يرجى تحديث إصدار composer لديك من خلال تحميل أخر نسخة من برنامج composer. حتى يدعم PHP 8. هل يمكنك إخباري بإصدار composer لديك من خلال تنفيذ الأمر التالي composer -v أو يمكنك استخدام الأمر التالي لتحديث composer composer selfupdate
  19. قم بإنشاء مستودع على 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 أو يمكنك استخدام برنامج github desktop من هنا سيوفر عليك الكثير, مجرد ما تختار مشروعك ستقوم برفعه بدون أي أوامر.
  20. يرجى مراجعة الإجابة السابقة, ايضا يمكنك وضع مفتاح البلد و العلم بشكل يدوي. ايضا توجد حزمة country_code_picker تظهر لك البلد مع العلم مع مفتاح البلد ايضا يمكنك مراجعتها من هنا.
  21. استخدم dropdown و textformfield بحيث dropdown فيه مفتاح البلد و textformfield لإدخال رقم الجوال و ضعهم بwidget row حتى يصبحن بجانب بعض. ايضا هناك حزمة رائعة يمكنك استخدامها اسمها intl_phone_number_input يمكنك مراجعتها من هنا
  22. شوف لازم انتا في api ترجع قيمة الخطأ اذا 200 او 401 او اي قيمة تانيه بحيث اتناسب مع حالة الريكويست اي api ، طبعا تغيير القيمة يؤثر نوعا ما ولكن ممكن تغيرها بس الافضل ترجع كل حالة بقيمتها سواء 200 او غيرها افضل.
  23. يمكنك تجربة استعلام عن الريسبونس if (response.statusCode == 400) { if (apiResponse['message'] != null) { result['message'] = apiResponse['errors']['phone_number']; return result; } return result; } أو if (response.statusCode == 400) { if (apiResponse['message'] != null) { result['message'] = apiResponse['phone_number']; return result; } return result; } في الكود السابق الذي إرفقته في إجابتي الأولى.
  24. أعطني الرابط كاملاً لل api.
  25. هل api محلي أم على استضافة , وما هو الرابط؟ سواء استخدمت حزمة dio أو HTTP فالمنطق واحد , يمكنك إرجاع شكل response مثلا هكذا ( أنظر الصورة المرفقة) , يمكنك إنشاء Future من نوع Map واسمه register Future<Map> register(String name, String email, String password) async { final url = Config.url ; Map<String, String> body = { 'name': name, 'email': email, 'password': password, }; Map<String, dynamic> result = { "success": false, "message": 'Unknown error.' }; final response = await http.post( Uri.parse(url), body: body, ); if (response.statusCode == 200 || response.statusCode == 201) { _status = Status.Authenticated; result['success'] = true; result['message'] = 'Successfull Login'; notifyListeners(); return result; } Map apiResponse = json.decode(response.body); if (response.statusCode == 400) { if (apiResponse['message'] != null) { result['message'] = apiResponse['message']; return result; } return result; } return result; } ثم في واجهة التسجيل Future<void> submit() async { final form = _formKey.currentState; if (form.validate()) { response = await Provider.of<AuthProvider>(context, listen: false) .register(name, email, password); print(response); if (response['success'] == true) { //print(response['email']); await Provider.of<AuthProvider>(context, listen: false).login( email, password, ); Navigator.pushNamed(context, '/home'); } else { setState(() { message = response['message']; }); } } } أو يمكنك إرجاع alertDialog _showError() { showDialog( context: context, builder: (_) => new AlertDialog( title: new Text("ERROR"), content: new Text("ERROR"), actions: <Widget>[ TextButton( style: ButtonStyle( foregroundColor: MaterialStateProperty.all<Color>(Colors.blue), backgroundColor: MaterialStateProperty.all<Color>(Colors.blue), ), child: Text("Colse"), onPressed: () { Navigator.of(context).pop(); }, ), /*TextGradientButton( child: Text( S.of(context).close, style: TextStyle(color: Colors.white), ), gradient: LinearGradient( colors: <Color>[Colors.orange, Colors.red], ), onPressed: () { Navigator.of(context).pop(); }, ),*/ ], )); return Container(); } ويمكنك تغيير setState(() { message = response['message']; }); إلى _showError(); هذه مجرد فكرة للتوضيح, أو يمكنك تزويدي بملفات لارافل و مشروع flutter ويمكنني الإطلاع عليه.
×
×
  • أضف...