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

بلال زيادة

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

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

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

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

    30

إجابات الأسئلة

  1. إجابة بلال زيادة سؤال في فتح تطبيق الإتصال على الرقم مباشرة باستخدام فلاتر كانت الإجابة المقبولة   
    يمكنك استخدام حزمة 
    url_launcher ومن ثم تمرر لها الرقم 
    launch("tel://214324234"); بداخل دالة onPressed 
    onPressed: () => launch("tel://21213123123"),  
  2. إجابة بلال زيادة سؤال في مشكلة في إنشاء مشروع لارافل كانت الإجابة المقبولة   
    يرجى تحديث إصدار composer لديك من خلال تحميل أخر نسخة من برنامج composer. حتى يدعم PHP 8. 
    هل يمكنك إخباري بإصدار composer لديك من خلال تنفيذ الأمر التالي 
    composer -v أو يمكنك استخدام الأمر التالي لتحديث composer 
    composer selfupdate  
  3. إجابة بلال زيادة سؤال في وضع مفتاح الدولة و العلم الخاص بها في فلاتر كانت الإجابة المقبولة   
    يرجى مراجعة الإجابة السابقة, ايضا يمكنك وضع مفتاح البلد و العلم بشكل يدوي.
    ايضا توجد حزمة 
    country_code_picker تظهر لك البلد مع العلم مع مفتاح البلد ايضا يمكنك مراجعتها من هنا.
  4. إجابة بلال زيادة سؤال في التحقق من الحقول باستخدام flutter كانت الإجابة المقبولة   
    هل 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 ويمكنني الإطلاع عليه.

  5. إجابة بلال زيادة سؤال في تخزين لغة التطبيق المختارة وجعلها إفتراضية - فلاتر كانت الإجابة المقبولة   
    أولا يجب تنزيل الحزم التالية من 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.
    في البداية قد تواجهك صعوبات في تنفيذ هذا الكود لأنه متقدم جداً, وربما تواجهك بعض الأخطاء ولكن يمكننا بعد قيامك خطوة بخطوة من تنفيذ الأكواد من فعل ما تريد.
    ملاحظة : جميع الأكواد مجربة ومستخدمة قبل ذلك.

  6. إجابة بلال زيادة سؤال في كيفية التعامل مع Google map في Flutter كانت الإجابة المقبولة   
    ستقوم بتثبيت حزمة geolocator ثم تعمل check على gps و تظهر رسالة إذا لم يكن مفعل بهذا الشكل 
    var isGpsEnabled = await Geolocator().isLocationServiceEnabled(); Future _checkGps() async { if (!(await Geolocator().isLocationServiceEnabled())) { if (Theme.of(context).platform == TargetPlatform.android) { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: Text("لا يمكن جلب الموقع الحالي"), content: const Text('الرجاء تفعيل GPS'), actions: <Widget>[ FlatButton( child: Text('Ok'), onPressed: () { final AndroidIntent intent = AndroidIntent( action: 'android.settings.LOCATION_SOURCE_SETTINGS'); intent.launch(); Navigator.of(context, rootNavigator: true).pop(); }, ), ], ); }, ); } } } ستقوم بتثبيت الحزمتين 
    google_maps_flutter location يمكنك البحث عنهما من خلال موقع pub.dev من هنا. 
    في المسار التالي 
    android/app/src/main/directory. ستقوم بفتح ملف AndroidManifest.xml ستقوم بوضع التالي 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:location/location.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { LatLng _initialcameraposition = LatLng(20.5937, 78.9629); GoogleMapController _controller; Location _location = Location(); void _onMapCreated(GoogleMapController _cntlr) { _controller = _cntlr; _location.onLocationChanged.listen((l) { _controller.animateCamera( CameraUpdate.newCameraPosition( CameraPosition(target: LatLng(l.latitude, l.longitude),zoom: 15), ), ); }); } @override Widget build(BuildContext context) { return Scaffold( body: Container( height: MediaQuery.of(context).size.height, width: MediaQuery.of(context).size.width, child: Stack( children: [ GoogleMap( initialCameraPosition: CameraPosition(target: _initialcameraposition), mapType: MapType.normal, onMapCreated: _onMapCreated, myLocationEnabled: true, ), ], ), ), ); } } في الكود إعلاه هنا يتم وضع Lat , lng إفتراضي, ثم يأتي دور دالة 
    _onMapCreated كلما تغير موقع الجهاز, سيتم نقل الكاميرا إلى الموقع الجديد.
    أخبرنا إلى أين وصلت في الكود الخاص بك و ما هي المشاكل وسنساعدك بإذن الله.
  7. إجابة بلال زيادة سؤال في تغير كلمة مرور بواسطة tinker كانت الإجابة المقبولة   
    يمكنك تنفيذ الأمر التالي في cmd  
    php artisan tinker ثم تقوم بالأستعلام عن الحساب الذي تريد تغيير كلمة المرور له.
    $user = App\User::where('email', 'user@example.com')->first(); $user->password = Hash::make('password'); $user->save(); أو من خلال ملف web.php يمكنك وضع مسار لتغيير كلمة المرور بهذا الشكل 
    <?php Route::get('changepassword', function() { $user = App\User::where('email', 'admin@laravel.com')->first(); $user->password = Hash::make('123456'); $user->save(); echo 'Password changed successfully.'; }); ?>  
  8. إجابة بلال زيادة سؤال في وضع CountryListPick في button في flutter كانت الإجابة المقبولة   
    يمكنك إنشاء متغير باسم 
    bool hideButton = false; ثم إنشاء الزر الخاص بك و عند الضغط عليه يغير قيمة المتغير من false إلى true 
    FlatButton( onPressed: () { setState(() { hideButton = !hideButton; }); }, child: Text("Country"), ), هذا الكود كاملاً
    import 'package:country_list_pick/country_list_pick.dart'; import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { bool hideButton = false; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( appBar: AppBar( title: const Text('Country Code Pick'), backgroundColor: Colors.amber, ), body: Column( children: [ FlatButton( onPressed: () { setState(() { hideButton = !hideButton; }); }, child: Text("Country"), ), hideButton != false ? CountryListPick( appBar: AppBar( title: Text(''), ), theme: CountryTheme( isShowFlag: true, isShowTitle: true, isShowCode: false, isDownIcon: true, showEnglishName: true, ), onChanged: (CountryCode code) { setState(() {}); }, ) : Container(), ], ), ), ); } }  
  9. إجابة بلال زيادة سؤال في مشكلهLoading failed for the <script> with source كانت الإجابة المقبولة   
    في ملف header.php يجب وضع التالي 
    <!DOCTYPE html> <html> <head> <meta cherset="UTF-8"/> <title> admin</title> <link rel="stylesheet" href="<?php echo $css; ?>bootstrap.min.css"/> <link rel="stylesheet" href="<?php echo $css; ?>fontawesome.min.css"/> <link rel="stylesheet" href="<?php echo $css; ?>backend.css"/> </head> <body> ثم في ملف footer.php يجب وضع التالي 
    <div class="footer"> </div> <script src="<?php echo $js; ?>jquery-1.9.1.min.js"></script> <script src="<?php echo $js; ?>bootstrap.min.js"></script> <script src="<?php echo $js; ?>backend.js"></script> </body> </html>  
  10. إجابة بلال زيادة سؤال في إخفاء زر الرجوع في الواجهات - Flutter - Navigation كانت الإجابة المقبولة   
    ربما لا تريد أن يتمكن المستخدم من الضغط على زر الرجوع بالجهاز للعودة إلى المسار السابق. بدلاً من استدعاء pushNamed , حاول الاتصال بـ Navigator.pushReplacementNamed للتسبب في اختفاء الزر.
    onPressed: () { Navigator.pushReplacementNamed(context, "/logout"); }, أو يمكنك استخدام automaticallyImplyLeading في واجهة تسجيل الدخول
    appBar: AppBar( automaticallyImplyLeading: false, ),  
  11. إجابة بلال زيادة سؤال في ربط carousel_slider مع قاعدة بيانات flutter كانت الإجابة المقبولة   
    يمكنك من صنع دالة يكون استخدامها عند الضغط على الصورة 
    void _gotoSingleImage(ImageModel imageModel, BuildContext context) { Navigator.push( context, MaterialPageRoute(builder: (context) => SingleImage(imageModel)), ); } ثم في دالة onPressed تضع التالي 
    _gotoSingleImage(imageModel[index], context); ثم في الواجهة الثانية وليكن مثلا اسم الكلاس هو 
    class ImageCategory extends StatefulWidget { // باقي كود الواجهة } قم بإنشاء متغير وليكن هكذا 
    final ImageModel imageModel; ثم constructor يكون بهذا الشكل 
    ImageCategory(this.imageModel); أي يكون الكلاس بهذا الشكل 
    class SingleImage extends StatefulWidget { final ImageModel imageModel; SingleImage(this.imageModel); @override _SingleImageState createState() => _SingleImageState(); } class _SingleImageState extends State<SingleImage> { @override void initState() { // TODO: implement initState super.initState(); } @override Widget build(BuildContext context) { return Scaffold( // باقي كود الواجهة ); } } ثم باستخدام 
    widget. يمكنك الوصول إلى المتغير imageModel وجلب محتوياته.
    ثم يكون ImageModel بهذا الشكل 
    class ImageModel { ImageModel({ this.id, this.images, }); int id; List<ImageUrl> images; factory ImageModel.fromJson(Map<String, dynamic> json) => ImageModel( id: json["id"], images: List<ImageUrl>.from(json["images"].map((x) => ImageUrl.fromJson(x))), ); Map<String, dynamic> toJson() => { "id": id, "images": List<dynamic>.from(images.map((x) => x.toJson())), }; } class ImageUrl { ImageUrl({ this.id, this.src, this.name, this.alt, }); int id; String src; String name; String alt; factory ImageUrl.fromJson(Map<String, dynamic> json) => ImageUrl( id: json["id"], src: json["src"], name: json["name"], alt: json["alt"], ); Map<String, dynamic> toJson() => { "id": id, "src": src, "name": name, "alt": alt, }; }  
  12. إجابة بلال زيادة سؤال في بالرغم من كتابة معلومات الدخول صحيحة في نموذج الدخول إلا أنه يعيد تحويلي إلى صفحة الدخول PHP كانت الإجابة المقبولة   
    لديكي عدة اخطاء وهي أولاً: عدم تعريف خاصية name="submit" للزر و سيصبح بعد وضع الخاصية بهذا الشكل 
    <input type="submit" name="submit" value="Login" class="btn float-right login_btn"> ثم يجب وضع الأستعلامات بداخل الشرط بهذا الشكل 
    <?php include('connect.php'); error_reporting(E_ALL^E_NOTICE); if(isset($_POST['submit'])){ echo 'd'; $username=$_POST['username']; $password=$_POST['password']; $sql="SELECT * FROM xuser WHERE wUserName='".$username."' AND wPassWord='".$password."' "; $result = $conn->query($sql); //while ($row=$result->fetch_assoc()){ $count=$result->num_rows; //} if($count > 0){ header('Location: indexx.php'); } else{ header('Location: login.php'); } } ?> ثم تغيير توجيه الصفحة إلى صفحة أخرى عن طريق دالة header و يرجى التعديل وستنجح بالعمل معكِ.
  13. إجابة بلال زيادة سؤال في سؤال في php and mysql حول ثغرة ID في المتصفح كانت الإجابة المقبولة   
    حتعمل تحقق والتأكد من وجود id المضاف في الرابط انه في قاعدة البيانات أو لا و تقدر تعمل بعدها شرط صغير بحيث إذا موجود يعرض مش موجود يحوله لنص أو لصفحة خطأ كالتالي 
    <?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $id = $_GET['id']; $sql = "SELECT id, firstname, lastname FROM MyGuests WHERE id=$id"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 results"; } $conn->close(); ?> الكود مجرد مثال.
  14. إجابة بلال زيادة سؤال في كيف اضيف Animation مستمر في jquery ؟ كانت الإجابة المقبولة   
    يمكنك تقليد الطريقة المتبعة كما في المثال التالي 
    $(function() { function loop(){ $('#arrow') .animate({bottom:90},1000) .animate({bottom:40},1000, loop); } loop(); // call this wherever you want }); أو ايضا يمكنك استخدام setInterval لعمل تحديث كل وقت تريده بشكل مستمر مثل 1000 يعني كل ثانية. 
    $(function() { function loop(){ $('#arrow') .animate({bottom:90},1000) .animate({bottom:40},1000, loop); } setInterval(function(){ loop(); }, 1000); // call this wherever you want });  
     
  15. إجابة بلال زيادة سؤال في إعادة تشكيل و حشو البيانات في لارافل عند عمل migration كانت الإجابة المقبولة   
    يمكنك فعل ذلك عن طريق Seeder بحيث عند عمل migrations يتم تخزين بيانات الأختبار المخزنة في Seeder في هذا الجدول كما التالي 
    يمكنك إنشاء Seeder باستخدام هذا الأمر 
    php artisan make:seeder UserSeeder ثم في المسار التالي تجد الملف 
    your_project\database\seeds ثم بداخل الملف تضع التالي 
    user = \App\User::create([ 'username' => 'Osama', 'email' => 'a@a.com', 'password' => bcrypt('123123123'), 'phone' => '123123123', 'city' => 'الرياض', 'is_active' => 1, 'code' => substr(md5(uniqid(mt_rand(), true)) , 0, 8), ]); ثم في ملف DatabaseSeeder.php تضع التالي 
    $this->call(UserTableSeeder::class); هو الكلاس الذي أنشات الملف عن طريق الأمر المذكور سابقاً. ثم قم بتنفيذ الأمر التالي 
    php artisan db:seed php artisan db:seed --class=UserSeeder أو عمل إعادة زرع لجميع الجداول مع تخزين بيانات الأختبار باستخدام الأمر التالي 
    php artisan migrate:fresh --seed يمكنك مراجعة التوثيق الخاص بموقع لارافل من هنا.
  16. إجابة بلال زيادة سؤال في localhost لا تستقبل بيانات تسجيل الاعضاء خطأ في الاتصال بقاعدة البيانات كانت الإجابة المقبولة   
    يجب تغيير بيانات الاتصال في ملف connect.php إلى ما يوافق قاعدة بياناتك و ايضا أرفقت في الإجابة السابقة جدول الأعضاء قومي بزرعه في قاعدة البيانات و التجربة مرة اخرى. لقد أرفقت الملف كاملاً لجدول الأعضاء 
    xuser.sql
  17. إجابة بلال زيادة سؤال في فلترة البحث - php كانت الإجابة المقبولة   
    ممكن تستخدم datatable لجعل الأمر يبدو وكأنه realtime يمكنك القراءة أكثر عن datatable من هنا
    ايضا يمكنك استخدام ajax في فعل ذلك, يمكنك إرفاق الملفات كاملا لنساعدك في هذا الأمر.
  18. إجابة بلال زيادة سؤال في جلب بيانات lng, lat لنقطة عند الوقوف عليها في خرائط جوجل - فلاتر كانت الإجابة المقبولة   
    العلامة لها خاصية onDragEnd. يعطي استخدام خاصية onDragEnd خط عرض وخط طول جديدين.
    Marker( onTap: () { print('Tapped'); }, draggable: true, markerId: MarkerId('Marker'), position: LatLng(value.latitude, value.longitude), onDragEnd: ((newPosition) { print(newPosition.latitude); print(newPosition.longitude); })) ثم يمكنك استخدام 
    newPosition.latitude newPosition.longitude لتخزينهم في قاعدة البيانات.
  19. إجابة بلال زيادة سؤال في اسئلة عن محاذاة الصور في مكتبة TCPdf كانت الإجابة المقبولة   
    بخصوص الصورة يمكنك تغيير موضعها من مكان لأخر عن طريق خاصية margin باستخدام css. 
    بخصوص السؤال الثاني يمكنك استخدام writeHTMLCell بهذا الشكل 
    $pdf->writeHTMLCell(100, 50, 10, 10, 'Lorem ipsum... <img src="..." />'); يرجى إرفاق ملفات مشروعك كاملاً إذا لم ينجح الامر معك لنساعدك في ذلك.
  20. إجابة بلال زيادة سؤال في كيفية ايقاف التحقق من reCaptcha flutter كانت الإجابة المقبولة   
    يمكنك إزالة reCaptcha عن طريق Enabling the Android Device Verification API في مشروعك على google cloud console من Google. يمكنك القيام بذلك عن طريق إضافة مشروعك هناك ثم يجب عليك أيضًا إضافة مفتاح SHA-256 في مشروع Firebase الخاص بك في إعداد المشروع. 
  21. إجابة بلال زيادة سؤال في إضافة علامة مخصصة على الخريطة و تفعيل علامة GPS في Flutter كانت الإجابة المقبولة   
    يمكنك استخدام حزمة location من هنا لتستطيع تشغيل و إيقاف GPS و التحقق ايضا من أنه مفعل أو لا .
    Future checkGps() async { if (!await location.serviceEnabled()) { location.requestService(); } } import 'package:location/location.dart' as loc; loc.Location location = loc.Location();//explicit reference to the Location class Future _checkGps() async { if (!await location.serviceEnabled()) { location.requestService(); } } بخصوص العلامة الثانية, يمكنك استخدام حزمة flutter_google_maps  من هنا و هذا مثال لكيفية وضع أيقونة خاصة على الخريطة 
    class _HomeState extends State<Home> with WidgetsBindingObserver { @override void initState() { super.initState(); markers = Set.from([]); } GoogleMapController mapController; BitmapDescriptor customIcon1; Set<Marker> markers; createMarker(context) { if (customIcon1 == null) { ImageConfiguration configuration = createLocalImageConfiguration(context); BitmapDescriptor.fromAssetImage(configuration, 'assets/images/fire.png') .then((icon) { setState(() { customIcon1 = icon; }); }); } }  
  22. إجابة بلال زيادة سؤال في قواعد بيانات flutter كانت الإجابة المقبولة   
    ممكن تعتمد على firebase إذا أمكن و تبرمج فكرتك بشكل سليم. وتعتمد على التخزين باستخدام الأنترنت. أو ممكن تستخدم Hive للتخزين محلياً على الجهاز.
    ممكن تستخدم:
    SQ Lite
    Firebase
    MOOR 
    idb_sqflite
    Postgres
    Back4app
    Mysql
  23. إجابة بلال زيادة سؤال في بناء تطبيقات Flutter لنظام IOS كانت الإجابة المقبولة   
    إذا لديك حاسوب قوي يمكنك تستخدم macOS بشكل وهمي ولكن ستواجه بعض المشاكل و هي انه يجب التطبيق على موبايل حقيقي. إذا كان لديك أنترنت سريع استخدام RDP MACOS  أفضل. 
    هناك شركة macincloud يمكنك زيارة رابط موقعها على الأنترنت من هنا وتقدم هذه الشركة عدة حزم مثل:
    Pay-As-You-Go حيث معناها تدفع مقابل ما تستخدمه 1$. Managed Server: تدفع شهرياً 25$ مقابل RDP. 
    Dedicated Server: تدفع شهرياً 49$ مقابل RDP.
    هناك مميزات لكل حزمة تستخدمها ويوجد مقارنة بين الحزم بشكل كامل, يمكنك أختيار ما يناسبك و الأشتراك بأحدى هذه الحزم.
    يمكن تحميل VMware Workstation على حاسوبك من هنا أو من هنا, ومن ثم تحميل نسخة macOS High Sierra تجد روابطها من هنا أوهنا, ويمكنك استخدام تحميل xcode بشكل يدوي وتثبيته على النسخة بعد تثبيتها, وايضا تحتاج إلى Patch Tool من هنا
    بعد تحميل vmware وتثبيته على جهازك , و ايضا تحميل نسخة macOS High Sierra. قم بالخطوات التالية:
    استخراج صورة macOS High Sierra, عن طريق فك ضغط الملف بعد تحميله. قم باستخراج الملف Patch Tool من تنسيق Zip. افتح Patch Tool - Unlocker Master ثم انقر بزر الماوس الأيمن على win-install.cmd وحدد تشغيل كمسؤول. سيقوم بتثبيت ملف التصحيح في برنامج VMware لنظام التشغيل macOS High Sierra والإصدارات الأقدم من أجل فتح برنامج VMware والسماح لك بتثبيت macOS عليه. افتح الآن برنامج VMware, انقر على Create a New Virtual Machine, ثم حدد Recommended ثم Next. حدد I will install the operating system later ثم Next. اختر الآن "Apple Mac OS X" من قائمة أنظمة التشغيل ثم حدد مكان macOS High Sierra وانقر فوق التالي. لا تحدد مساحة القرص, فقط حدد Store virtual disk as a single file وانقر على التالي. تم إنشاء ملفات VM الأساسية لنظام التشغيل macOS High Sierra, فانتقل وانقر فوق Finish. افتح نافذة macOS High Sierra VM على محطة عمل VMware أو المشغل, ثم انقر فوق Edit virtual machine settings. قم بزيادة الذاكرة من 2 جيجا بايت إلى 4 جيجا بايت أو أعلى من ذاكرة الوصول العشوائي لأداء أفضل. قم بزيادة نواة وحدة المعالجة المركزية من مركزين إلى 4 أنوية أو أعلى للحصول على أداء أفضل. أخيرًا, انقر فوق موافق لحفظ جميع التغييرات التي أجريتها على إعدادات virtual machine. افتح نافذة macOS High Sierra VM ثم انقر فوق power في virtual machine. اختر الدولة وانقر على متابعة. اختر تخطيط لوحة المفاتيح وانقر على متابعة. اختر الآن طريقتك لنقل المعلومات إلى جهاز Mac هذا وانقر don’t want to transfer any information ثم انقر فوق متابعة. يمكنك تسجيل الدخول باستخدام معرف Apple الخاص بك. وافق على الشروط والأحكام. املأ الاسم الكامل واسم الحساب وكلمة المرور وحدد مربع تعيين المنطقة الزمنية بناءً على الموقع الحالي. ثم انقر أخيرًا على متابعة لإنشاء حساب المستخدم الخاص بك لنظام التشغيل macOS High Sierra, والذي سيتم تثبيته. في صفحة الإعداد السريع, لا تريد القيام بشيء ما فقط انقر فوق متابعة. انتظر قليلاً لإعداد جهاز Mac الخاص بك. ثم سيتم تشغيله على سطح مكتب macOS High Sierra.
  24. إجابة بلال زيادة سؤال في جدولة السكربت في php native كانت الإجابة المقبولة   
    يمكنك استخدام cron job في PHP, ستحتوي وظيفة cron دائمًا على خمسة أعمدة يمثل كل منها "عامل تشغيل" زمنيًا متبوعًا بالمسار الكامل والأمر المطلوب تنفيذه:
    * * * * * home/path/to/command/the_command.sh كل عمود من الأعمدة الزمنية له صلة محددة بجدول المهمة. وهم على النحو التالي:
    تمثل الدقائق الدقائق في ساعة معينة , 0-59 على التوالي. تمثل الساعات ساعات يوم معين , 0-23 على التوالي. تمثل الأيام أيام شهر معين , 1-31 على التوالي. الشهور تمثل شهور سنة معينة , 1-12 على التوالي. يمثل "يوم من الأسبوع" يوم الأسبوع , من الأحد إلى السبت , عدديًا , بالرقم 0-6 على التوالي. Minutes [0-59] | Hours [0-23] | | Days [1-31] | | | Months [1-12] | | | | Days of the Week [Numeric, 0-6] | | | | | * * * * * home/path/to/command/the_command.sh إذا أردت جدولة مهمة في الساعة 12 صباحًا في اليوم الأول من كل شهر
    0 0 1 * * home/path/to/command/the_command.sh إذا أردت جدولة مهمة للتشغيل كل يوم سبت في الساعة 8:30 صباحًا
    30 8 * * 6 home/path/to/command/the_command.sh يمكنك استخدام دالة exec لتنفيذ ملفات .sh.
     
  25. إجابة بلال زيادة سؤال في ايقاف عمل CircularProgressIndicator في فلاتر كانت الإجابة المقبولة   
    يمكنك استخدام FutureBuilder و التأكد من انه يرجع بيانات أو لا بحيث إذا يرجع بيانات تقوم بإضهارها و إذا لا يرجع تقوم بعرض واجهة فارغ أو نص يخبر المستخدم أنه لا يوجد داتا. 
    كيف يمكن ذلك FutureBuilder تمكنك من استخدام AsyncSnapshot و هذه تحتوي على خاصية hasData للتأكد من رجوع البيانات أو أنه فارغ فمثلا
    import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); /// This is the main application widget. class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); static const String _title = 'Flutter Code Sample'; @override Widget build(BuildContext context) { return const MaterialApp( title: _title, home: MyStatefulWidget(), ); } } /// This is the stateful widget that the main application instantiates. class MyStatefulWidget extends StatefulWidget { const MyStatefulWidget({Key? key}) : super(key: key); @override _MyStatefulWidgetState createState() => _MyStatefulWidgetState(); } class _MyStatefulWidgetState extends State<MyStatefulWidget> { final Future<String> _calculation = Future<String>.delayed( const Duration(seconds: 2), () => 'Data Loaded', ); @override Widget build(BuildContext context) { return DefaultTextStyle( style: Theme.of(context).textTheme.headline2!, textAlign: TextAlign.center, child: FutureBuilder<String>( future: _calculation, // a previously-obtained Future<String> or null builder: (BuildContext context, AsyncSnapshot<String> snapshot) { List<Widget> children; if (snapshot.hasData) { children = <Widget>[ const Icon( Icons.check_circle_outline, color: Colors.green, size: 60, ), Padding( padding: const EdgeInsets.only(top: 16), child: Text('Result: ${snapshot.data}'), ) ]; } else if (snapshot.hasError) { children = <Widget>[ const Icon( Icons.error_outline, color: Colors.red, size: 60, ), Padding( padding: const EdgeInsets.only(top: 16), child: Text('Error: ${snapshot.error}'), ) ]; } else { children = const <Widget>[ SizedBox( child: CircularProgressIndicator(), width: 60, height: 60, ), Padding( padding: EdgeInsets.only(top: 16), child: Text('Awaiting result...'), ) ]; } return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: children, ), ); }, ), ); } }  
×
×
  • أضف...