-
المساهمات
4657 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
30
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو بلال زيادة
-
المشكلة في أنك تستخدم SeoResource::collection($this->whenLoaded('seo')) ولكن لديك عنصر واحد فقط وليس مجموعة وبالتالي يمكنك استبدال 'seo' => SeoResource::collection($this->whenLoaded('seo')), بالتالي 'seo' => new SeoResource($this->whenLoaded('seo')),
- 1 جواب
-
- 1
-
-
إذا كنت تريد تمكين / تعطيل شريط التصحيح في وقت التشغيل , فاستخدم \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); } }
-
يمكنك إزالتها عن طريق تنفيذ الأمر التالي 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
-
في ملف 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 يمكنك الإشارة إلى المتحكم الذي قمت بإنشاءه ليتم استخدامه.
-
تحتاج إلى تغيير دالة shouldBeDisplayed الخاصة ب Widgetعلى النحو التالي: public function shouldBeDisplayed(){ return auth()->user()->hasRole('admin'); } فهنا يتحقق من أن دور المستخدم الحالي هو المسؤول أم لا.
- 1 جواب
-
- 1
-
-
يمكنك استخدام دالة hasattr() بهذا الشكل if hasattr(a, 'property'): a.property ولكن إذا كنت تريد فقط قيمة attribute مع القيمة الافتراضية إذا لم تكن موجودة ، فإن الخيار الأفضل هو استخدام getattr () getattr(a, 'property', 'default value') property = getattr(a,"property",None) if property: print property
-
يرجى تحديث إصدار composer لديك من خلال تحميل أخر نسخة من برنامج composer. حتى يدعم PHP 8. هل يمكنك إخباري بإصدار composer لديك من خلال تنفيذ الأمر التالي composer -v أو يمكنك استخدام الأمر التالي لتحديث composer composer selfupdate
- 2 اجابة
-
- 2
-
-
قم بإنشاء مستودع على 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 من هنا سيوفر عليك الكثير, مجرد ما تختار مشروعك ستقوم برفعه بدون أي أوامر.
-
يرجى مراجعة الإجابة السابقة, ايضا يمكنك وضع مفتاح البلد و العلم بشكل يدوي. ايضا توجد حزمة country_code_picker تظهر لك البلد مع العلم مع مفتاح البلد ايضا يمكنك مراجعتها من هنا.
- 3 اجابة
-
- 1
-
-
استخدم dropdown و textformfield بحيث dropdown فيه مفتاح البلد و textformfield لإدخال رقم الجوال و ضعهم بwidget row حتى يصبحن بجانب بعض. ايضا هناك حزمة رائعة يمكنك استخدامها اسمها intl_phone_number_input يمكنك مراجعتها من هنا
- 3 اجابة
-
- 1
-
-
شوف لازم انتا في api ترجع قيمة الخطأ اذا 200 او 401 او اي قيمة تانيه بحيث اتناسب مع حالة الريكويست اي api ، طبعا تغيير القيمة يؤثر نوعا ما ولكن ممكن تغيرها بس الافضل ترجع كل حالة بقيمتها سواء 200 او غيرها افضل.
- 7 اجابة
-
- 1
-
-
يمكنك تجربة استعلام عن الريسبونس 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; } في الكود السابق الذي إرفقته في إجابتي الأولى.
- 7 اجابة
-
- 1
-
-
أعطني الرابط كاملاً لل api.
-
هل 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 ويمكنني الإطلاع عليه.
- 7 اجابة
-
- 1
-
-
لو لاحظت هنا Locale(value.locale), يمكنك جلب القيمة المخزنة في local storeage, ايضا لاحظ في Provider عند قمنا بتغيير اللغة قمنا بحفظها في Shared ثم تخزينها في local Storage _getLanguage() async { await _initialPreferences(); _locale = _preferences.getString('language') ?? 'en'; notifyListeners(); } وقمنا بوضع getter String _locale = 'en'; String get locale => _locale لو راجعت الكود جيدا, لكان سهل عليم الأمر كثير.
- 3 اجابة
-
- 1
-
-
أولا يجب تنزيل الحزم التالية من pub.dev intl: ^0.17.0 shared_preferences: ^0.5.12+4 provider: ^4.3.2+3 localstorage: ^3.0.6+9 intl_translation: git: url: https://github.com/nt4f04uNd/intl_translation ثم تنشأ واجهة لعرض اللغات مثل import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import '../../common/constants.dart'; import '../../generated/l10n.dart'; import '../../models/init_model.dart'; class Languages extends StatefulWidget { @override _LanguagesState createState() => _LanguagesState(); } class _LanguagesState extends State<Languages> { @override Widget build(BuildContext context) { List<Widget> list = []; List<Map<String, dynamic>> languages = getAlllanguages(context); for (var i = 0; i < languages.length; i++) { list.add( Card( elevation: 0, margin: EdgeInsets.all(2), child: ListTile( leading: SvgPicture.asset( 'assets/flags/${languages[i]["image"]}.svg', fit: BoxFit.cover, width: 30, height: 20, ), title: Text(languages[i]["name"]), onTap: () async { print(languages[i]["code"]); await Provider.of<InitModel>(context, listen: false) .changeLanuguage(context, languages[i]["code"]); setState(() {}); }, ), ), ); } /*return Consumer<AuthProvider>(builder: (context, user, child) { });*/ return Scaffold( appBar: AppBar( elevation: 0, title: Text( S.of(context).language, ), backgroundColor: Theme.of(context).primaryColor, ), body: SingleChildScrollView( child: Column( children: [ ...list, ], ), ), ); } } ثم تنشأ قائمة اللغات و ممكن تخزنها في ملف اسمه constants.dart و تكون القائمة بهذا الشكل Function getAlllanguages = ([context]) { return [ { "id": 1, "name": "English", "image": "en", "code": "en", }, { "id": 2, "name": "Arabic", "image": "ar", "code": "ar", }, { "id": 2, "name": "Iran", "image": "ir", "code": "fa", } ]; }; ثم يمكنك إنشاء Provider ليتم تغيير اللغة بدون إيقافه و تشغيله مرة أخرى class InitModel with ChangeNotifier { Map<String, dynamic> appConfig; bool isLoading = true; String message; String _locale = 'en'; String get locale => _locale; final String key = "theme"; SharedPreferences _preferences; bool _darkMode = false; bool get darkMode => _darkMode; InitModel() { _darkMode = false; _locale = 'en'; _loadFromPreferences(); _getLanguage(); } _initialPreferences() async { if (_preferences == null) _preferences = await SharedPreferences.getInstance(); } _savePreferences() async { await _initialPreferences(); _preferences.setBool(key, _darkMode); } _loadFromPreferences() async { await _initialPreferences(); _darkMode = _preferences.getBool(key) ?? false; notifyListeners(); } toggleChangeTheme() { _darkMode = !_darkMode; _savePreferences(); notifyListeners(); } _getLanguage() async { await _initialPreferences(); _locale = _preferences.getString('language') ?? 'en'; notifyListeners(); } Future<void> changeLanuguage(BuildContext context, String countryCode) async { await _initialPreferences(); _locale = countryCode; _preferences.setString("language", _locale); /*try { SharedPreferences preferences = await SharedPreferences.getInstance(); //_locale = countryCode; await preferences.setString('language', countryCode); final LocalStorage storage = new LocalStorage('locale'); storage.setItem('locale', countryCode); _locale = preferences.getString('language'); _savePreferences(); return true; } catch (err) { return false; }*/ notifyListeners(); } void loadAppConfig() async { try { if (kAppConfig.indexOf('http') != -1) { final appJson = await http.get(Uri.encodeFull(kAppConfig), headers: {"Accept": "application/json"}); appConfig = convert.jsonDecode(appJson.body); } else { final appJson = await rootBundle.loadString(kAppConfig); appConfig = convert.jsonDecode(appJson); } isLoading = false; notifyListeners(); } catch (e) { isLoading = false; message = e.toString(); notifyListeners(); } } } class App { Map<String, dynamic> appConfig; App(this.appConfig); } ثم إضافة الكود التالي localizationsDelegates: [ RefreshLocalizations.delegate, S.delegate, GlobalWidgetsLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, DefaultCupertinoLocalizations.delegate, ], supportedLocales: S.delegate.supportedLocales, //locale: Locale('fa'), locale: Locale(value.locale), localeResolutionCallback: (Locale locale, Iterable<Locale> supportedLocales) { return locale; }, في MaterialApp, ثم تعريف final LocalStorage storage = new LocalStorage('locale'); في نفس الكلاس الذي يحتوي MaterialApp. في البداية قد تواجهك صعوبات في تنفيذ هذا الكود لأنه متقدم جداً, وربما تواجهك بعض الأخطاء ولكن يمكننا بعد قيامك خطوة بخطوة من تنفيذ الأكواد من فعل ما تريد. ملاحظة : جميع الأكواد مجربة ومستخدمة قبل ذلك.
- 3 اجابة
-
- 1
-
-
ولكن هناك دوال في shared_preferences لتتعامل مع بيانات من نوع bool , مثل setBool , getBool لماذا لا تستخدمها مباشرة ؟ يمكنك استخدام setBool بهذا الشكل _saveOptions() async { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setBool('option', true); } ويمكنك استخدام getBool بهذا الشكل SharedPreferences prefs = await SharedPreferences.getInstance(); bool boolValue = prefs.getBool('option'); أم هل تقصد تريد إضافة بيانات بهذا الشكل ؟ final String _kNotificationsPrefs = "allowNotifications"; final String _kSortingOrderPrefs = "sortOrder"; Future<bool> getAllowsNotifications() async { final SharedPreferences prefs = await SharedPreferences.getInstance(); return prefs.getBool(_kNotificationsPrefs) ?? false; } Future<bool> setAllowsNotifications(bool value) async { final SharedPreferences prefs = await SharedPreferences.getInstance(); return prefs.setBool(_kNotificationsPrefs, value); }
- 6 اجابة
-
- 1
-
-
إذا تقصد موقع ويب, صحيح يمكنك ذلك باستخدام اللغات المذكورة ووجب التنبيه أن laravel هو إطار عمل مبني على لغة PHP.
-
لا يوجد صورة مرفقة, أرجوا ان تقوم بإرفاقها.
- 8 اجابة
-
- 1
-
-
تمام, يبدو أنك لم تقم بجلب حزمة Geolocator بشكل مناسب لأنه الخصائص هذه من الحزمة يمكنك مراجعة التوثيق من هنا, وجميع الخصائص الموجودة في الكود يمكنك التحقق منها ايضا. لم أنشئ لك كود كامل لأخفاء و إظهار الخريطة , قمت فقط بوضع كود ليفحص GPS إذا شغال أو لا, باقي التفاصيل يمكنك تطبيقها بناءاً على ما تريد. بما أنه يمكنك فحص و معرفة حالة GPS يمكنك التحكم في إظهار و إخفاء الخريطة كما تريد.
- 8 اجابة
-
- 1
-
-
يبدو أنك نسيت إضافة use Rebing\GraphQL\Support\Type as GraphQLType; إلى ملف app/GraphQL/Types/ItemType.php ثم جعل الكلاس يرث من GraphQLType, كما في الكود التالي <?php namespace App\GraphQL\Types; use App\Item; use GraphQL\Type\Definition\Type; use Rebing\GraphQL\Support\Type as GraphQLType; class ItemType extends GraphQLType { } ثم لم تقم بإنشاء ملف ItemQuery بهذا الشكل <?php namespace App\GraphQL\Queries; use App\Item; use GraphQL\Type\Definition\Type; use Rebing\GraphQL\Support\Facades\GraphQL; use Rebing\GraphQL\Support\Query; class ItemQuery extends Query { protected $attributes = [ 'name' => 'item', ]; public function type(): Type { return GraphQL::type('Item'); } public function args():array { return [ 'id' => [ 'name' => 'id', 'type' => Type::int(), 'rules' => ['required'] ], ]; } public function resolve($root, $args) { return Item::findOrFail($args['id']); } } يمكنك تجربة ذلك ومن إخبارنا بالنتيجة, ولكن بشكل عام, يمكنك إرفاق ملفات مشروعك هنا ليتم مساعدتك في حل المشكلة. او يمكنك مراجعة التوثيق الخاص بالحزمة على github من هنا.
-
لفهم ما يفعله yield , يجب أن تفهم ما هي المولدات (generators). وقبل أن تتمكن من فهم المولدات , يجب أن تفهم العناصر التكرارية (iterables). العناصر التكرارية iterables: عند إنشاء قائمة , يمكنك قراءة عناصرها واحدًا تلو الآخر >>> mylist = [1, 2, 3] >>> for i in mylist: ... print(i) 1 2 3 المولدات Generators : المولدات هي مكررات , نوع من التكرارات لا يمكنك تكرارها إلا مرة واحدة. لا تخزن المولدات جميع القيم في الذاكرة , بل تولد القيم بسرعة: >>> mygenerator = (x*x for x in range(3)) >>> for i in mygenerator: ... print(i) 0 1 4 Yield: العائد عبارة عن كلمة رئيسية تستخدم مثل return , باستثناء أن function ستعيد مولدًا (generator). >>> def create_generator(): ... mylist = range(3) ... for i in mylist: ... yield i*i ... >>> mygenerator = create_generator() # create a generator >>> print(mygenerator) # mygenerator is an object! <generator object create_generator at 0xb7555c34> >>> for i in mygenerator: ... print(i) 0 1 4
