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

Flutter Dev

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

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

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

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

    2

أجوبة بواسطة Flutter Dev

  1. بتاريخ 4 دقائق مضت قال Wael Aljamal:

    يوجد بعض الخطوات في توثيق المكتبة خاصة بعملها على IOS يمكنك مراجعتها

    جلبت الخطوات الرئيسية :

    1. تأكد أن platform :ios,10.0 على الأقل
    2. تفعيل Enabling Background Fetchios_background_mode_fetch.thumb.png.521a713f6b8615075166b75502fcde64.png
    3. في ملف Info.plist أضف UIBackgroundModes بالطريقة التالية 
      
      <key>UIBackgroundModes</key>
      <array>
      	<string>fetch</string>
      </array>

       

    4. تعديل في ملف project.pbxproj 
      
      SystemCapabilities = {
      	com.apple.BackgroundModes = {
      		enabled = 1;
      	};
      };

       

    5. ضمن didFinishLaunchingWithOptions, حدد minimumBackgroundFetchInterval 
      
      class AppDelegate:UIResponder,UIApplicationDelegate{
          func application(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)->Bool{
              // Other intialization code…
              UIApplication.shared.setMinimumBackgroundFetchInterval(TimeInterval(60*15))
      
              return true
          }
      }

      بالتوفيق

    ربي يعطيك الف عافيه عزيزي

    بس سوال لو تكرمت هل هذا الاضافة من خلالها اقدر استعملها على المنصتين مثل خدمة service  في الجافا او الاندرويد بالاصح 

     

    انا ارغب بتشغيل دالة استعلام في الخلفية بشكل مستمر طوال ما المستخدم خارج التطبيق حتى تجلب لي الاشعارات من قاعدة البيانات هل هذا الطريقة بتكون مفيده الى هذا العمل؟

  2. بتاريخ 30 دقائق مضت قال Abdulhamid Hamsho:

    مرحبًا @مروان مروان3

    في البداية عليك استيراد Firebase tokens بنجاح على قاعدة البيانات الخاصة.

    من ثم ارسال notification إلى الجهاز عن طريق التابع الذي أرفقته لك في الأسفل، 

    
    function sendPushNotification()  {
    require "init.php";
    $message="Notification Details";
    $title="Notification Title";
    
    $url='https://fcm.googleapis.com/fcm/send';
    $server_key="MY_FIREBASE_KEY";
    $sql="select fcm_token from fcm_info";
    $result=mysqli_query($con,$sql);
    $row=mysqli_fetch_row($result);
    $key=$row[0];
    
    $headers=array(
    'Authorization:key ='.$server_key,
    'Content-Type: application/json'
    );
    
    $fields=array('to'=>$key,'notification'=>
    array('title'=>$title,'body'=>$message));
    
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
    
    $result = curl_exec($ch); 
    curl_close($curl_session); 
    mysqli_close($con);}

    من خلال هذا التابع يمكنك إرسال إشعار إلى أول جهاز مقيد لديك في قاعدة البيانات.

    إن لم يعمل الكود عندك يمكنك استخدام 'registration_ids' بدل من 'to'.

     

    اهلا بك اخي

    يعني الفكره اني يجب ان اقوم اول خطوه بتخزين token على mysql? في جدول التعليقات بتحديد؟او؟

     

    اذا كان فيه شرح يوتيوب اكون شاكر لو يتم وضع روابط 

    • أعجبني 1
  3. السلام عليكم ورحمة الله وبركاته

    استفسار لو تكرمتو ..

    انا اعرف اعمل اضافة ل firebase_messaging في مشروعي فلاتر وارسل الاشعارات من firebase clode

    هذا ما فيها اي مشكله ولكن لم افهم كيف يمكنني ربط Mysql مع firebase_messaging

    انا لدي جدول باسم التعليقات او تعليقات المستخدمين الفكره اني اريد كل ما اجا مستخدم مثلا Aارسل اشعار الى B

    الان صار لدينا اشعار جديد في جدول بيانات mysql احتاج ارسل اشعار الى مستخدم المستهدف

    انا اعرف اعمل ملفات php واعرف اضع الجمله الشرطيه ID=id لستهداف المستخدم عادي ولكن ما لك افهمه كيف يتم ربط اشعارات firebase_messaging مع قاعدة mysql او ما هيا الخطوات او الفكره حقيقي هذا الموضوع غامض لدي اتمنى اذا احد ممكن يوصل ويشرح لي الفكره 

     

     

    انا كنت اتعامل مع الاشعارات في الجافا عن طريق داله تقرا لي اكبر رقم اي دي واستهدف المستخدم هذا بسيطه لكني لم افهم الان في فلاتر ربط firebase_messaging مع mysql كيف الفكره تتم؟

     

    مع العلم اني اريد ارسل body و title. من mysql

     

  4. السلام عليكم ورحمة الله وبركاته

    تحيه طيبه للجميع

    قمت بعمل نموذج مشروع لتشغيل workmanager لجعل التطبيق يعمل في الخلفية اثناء ما المستخدم خارج التطبيق المشكلة الان التطبيق على الاندرويد شغال ولكن مع تشغيله في ios ومحاكي على الماك تظهر المكله التاليه:

    [VERBOSE-2:ui_dart_state.cc(166)] Unhandled Exception: MissingPluginException(No implementation found for method initialize on channel be.tramckrijte.workmanager/foreground_channel_work_manager)
    #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159:7)
    <asynchronous suspension>
    #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:334:12)
    #2      Workmanager.initialize (package:workmanager/src/workmanager.dart:100:30)
    #3      _MyHomePageState.initState (package:toios/main.dart:58:17)
    #4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4684:58)
    #5      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4520:5)
    #6      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3490:14)
    #7      Element.updateChild (package:flutter/src/widgets/framework.dart:3258:18)
    #8      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5874:14)
    #9      Element.inflat<…>
    [VERBOSE-2:ui_dart_state.cc(166)] Unhandled Exception: MissingPluginException(No implementation found for method registerPeriodicTask on channel be.tramckrijte.workmanager/foreground_channel_work_manager)
    #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159:7)
    <asynchronous suspension>
    #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:334:12)
    #2      Workmanager.registerPeriodicTask (package:workmanager/src/workmanager.dart:158:32)
    #3      _MyHomePageState.initState (package:toios/main.dart:63:17)
    #4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4684:58)
    #5      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4520:5)
    #6      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3490:14)
    #7      Element.updateChild (package:flutter/src/widgets/framework.dart:3258:18)
    #8      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5874:14)
    #9<…>

     

     

    وصفحات الكود كامل كالتالي انا عاملها:

    import 'package:flutter/material.dart';
    import 'package:geolocator/geolocator.dart';
    import 'package:workmanager/workmanager.dart';
    import 'package:toios/notification.dart' as notif;
    
    const fetchBackground = "fetchBackground";
    
    void callbackDispatcher() {
      Workmanager.executeTask((task, inputData) async {
        switch (task) {
          case fetchBackground:
            //Geolocator geoLocator = Geolocator()..forceAndroidLocationManager = true;
            Position userLocation = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
            notif.Notification notification = new notif.Notification();
            notification.showNotificationWithoutSound(userLocation);
            break;
        }
        return Future.value(true);
      });
    }
    
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
    
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
    
      @override
      void initState() {
        super.initState();
    
        // We don't need it anymore since it will be executed in background
        //this._getUserPosition();
    
        Workmanager.initialize(
          callbackDispatcher,
          isInDebugMode: true,
        );
    
        Workmanager.registerPeriodicTask(
            "1",
            fetchBackground,
            frequency: Duration(minutes: 30),
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  "",
                  style: Theme.of(context).textTheme.display1,
                ),
              ],
            ),
          ),
        );
      }
    }

     

     

    import 'package:flutter_local_notifications/flutter_local_notifications.dart';
    import 'package:geolocator/geolocator.dart';
    
    class Notification {
    
      FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin;
    
      Future showNotificationWithoutSound(Position position) async {
        print(position.toString());
        var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
            '1', 'location-bg', 'fetch location in background',
            playSound: false, importance: Importance.Max, priority: Priority.High);
        var iOSPlatformChannelSpecifics =
        new IOSNotificationDetails(presentSound: false);
        var platformChannelSpecifics = new NotificationDetails(
            androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
        await flutterLocalNotificationsPlugin.show(
          0,
          'Location fetched',
          position.toString(),
          platformChannelSpecifics,
          payload: '',
        );
      }
    
      Notification() {
        var initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher');
        var initializationSettingsIOS = new IOSInitializationSettings();
        var initializationSettings = new InitializationSettings(
            initializationSettingsAndroid, initializationSettingsIOS);
        flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
        flutterLocalNotificationsPlugin.initialize(initializationSettings);
      }
    }

     

     

    اذا احد يعرف حل للمشكله ياليت يفيدنا ابها

  5. بتاريخ 17 ساعات قال ayoubridouani:

    على الرحب والسعة أخي, الطريقة التي نجحت معك تسمى ب subqueries من هنا لو أردت أن تدرس عليها قليلا.

    بالتوفيق.

    حقيقي رغم اني دارس ماده كامله بالاضافة الى تنفيذ كم مشروع سابقا بستخدام هذا للغة من الربط بين قواعد البيانات ولكن هذا كانت اول مره اشوف هذا الطريقة او اعرف عنها 

    كل الشكر لك ي غالي

  6. بتاريخ 37 دقائق مضت قال Yomna Raouf:

    الخطأ الذي يظهر لك يدل على أن معامل ()int.parse  قيمته مساوية ل null. 

    من الحتمل أنك قمت بجلب البيانات بطريقة غير صحيحة، يمكنك أن تقوم بطباعة البيانات التي تحضرها من قاعدة البيانات حتى تتأكد من أنها البيانات الصحيحة حتى قبل أن تستخدمها في التطبيق.

    حتى نقوم بجلب الصف الذي له أعلى id من قاعدة البيانات mysql نقوم بالاستعلام باستخدام الأمر  التالي:

    
    SELECT * FROM addcomment ORDER BY id DESC LIMIT 0, 1

    إذا كنت تريد ال id فقط يمكنك استخدام التالي "مع العلم أن طريقة الاستعلام الخاصة بك صحيحة":

    
    SELECT MAX(ID) FROM tablename LIMIT 1

     

    ربي يعطيك الف صحه وعافيه شاكر لك

    بتاريخ 25 دقائق مضت قال ayoubridouani:

    مرحبا أخي, عليك أن تقوم بتغيير ال QUERY الموجودة في الملف التاني على الشكل التالي:

    
    <?php
    require_once 'connt.php';
    
    
    $query="SELECT * FROM addcomment WHERE id = (SELECT MAX(id) FROM addcomment)";
    
    $result = mysqli_query($con,$query);
    
    $array = array();
    
    while ($row  = mysqli_fetch_assoc($result))
    {
        $array[] = $row;
    }
    
    
    echo ($result) ?
    json_encode(array("code" => 1, "result"=>$array)) :
    json_encode(array("code" => 0, "message"=>"Data not found !"));
    
    
    ?>

    وبذلك تكون قد عدت بجميع البيانات لأكبر ID موجود في الجدول.

    زادك الله من واسع علمه وفضله 

    الطريقة ناجحة 100/100 شكرا لك

  7. السلام عليكم ورحمة الله وبركاته

    تحيه طيبه للجميع.

    لدي استفسار لو تكرمتو. قمت بعمل دالة للاستعلام عن حقل id من قاعدة بيانات mysql 

    كود الاستعلام كالتالي:

     Future<String> getLogin() async {
        var response = await http.get(Uri.encodeFull("http://xxxxxxxxx/Noti.php"),);
        setState(() {
          var convertDataToJson = json.decode(response.body.toString());
         data = convertDataToJson['result'];
          if (data != null) {
            User_ID =int.parse(data[0]['id']);
           
            
          }
    
        }
        );
    
    
    
      }

    وملف PHP كالتالي:

    <?php
    require_once 'connt.php';
    
    
    
    $query="SELECT * FROM addcomment";
    
    $result = mysqli_query($con,$query);
    
    $array = array();
    
    while ($row  = mysqli_fetch_assoc($result))
    {
        $array[] = $row;
    }
    
    
    echo ($result) ?
    json_encode(array("code" => 1, "result"=>$array)) :
    json_encode(array("code" => 0, "message"=>"Data not found !"));
    
    
    ?>

     

     

    الكود الذي تم ادرجه في الاعلى يعمل ولكن انا احتاج اني احصل على استعلام اعلى رقم ID من الحقل مهما كان موقعه او ترتيبه عشان كذا عملت الكود بشكل التالي:

    <?php
    require_once 'connt.php';
    
    
    
    $query="SELECT MAX( id ) FROM addcomment";
    
    $result = mysqli_query($con,$query);
    
    $array = array();
    
    while ($row  = mysqli_fetch_assoc($result))
    {
        $array[] = $row;
    }
    
    
    echo ($result) ?
    json_encode(array("code" => 1, "result"=>$array)) :
    json_encode(array("code" => 0, "message"=>"Data not found !"));
    
    
    ?>

    ولكن واجهتني المشكله التالية لما استعملت الكود اعلاه:

    E/flutter (29294): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: Invalid argument(s): The source must not be null
    E/flutter (29294): #0      int.parse (dart:core-patch/integers_patch.dart:51:25)
    E/flutter (29294): #1      AddCommentsState.getLogin.<anonymous closure> (package:flutter_apptestqeuriy/Ready.dart:89:22)
    E/flutter (29294): #2      State.setState (package:flutter/src/widgets/framework.dart:1240:30)
    E/flutter (29294): #3      AddCommentsState.getLogin (package:flutter_apptestqeuriy/Ready.dart:85:5)
    E/flutter (29294): <asynchronous suspension>
    E/flutter (29294): #4      AddCommentsState.initState.<anonymous closure> (package:flutter_apptestqeuriy/Ready.dart:58:9)
    E/flutter (29294): #5      interval.function (package:flutter_apptestqeuriy/Ready.dart:16:9)
    E/flutter (29294): #6      _rootRun (dart:async/zone.dart:1182:47)
    E/flutter (29294): #7      _CustomZone.run (dart:async/zone.dart:1093:19)
    E/flutter (29294): #8      _CustomZone.runGuarded (dart:async/zone.dart:997:7)
    E/flutter (29294): #9      _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
    E/flutter (29294): #10     _rootRun (dart:async/zone.dart:1190:13)
    E/flutter (29294): #11     _CustomZone.run (dart:async/zone.dart:1093:19)
    E/flutter (29294): #12     _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:1021:23)
    E/flutter (29294): #13     Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18:15)
    E/flutter (29294): #14     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:397:19)
    E/flutter (29294): #15     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:428:5)
    E/flutter (29294): #16     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
    E/flutter (29294): 

     

    هل يعلم احد حل للمشكلة بحيث اني احصل على اعلى ID  في حقل ID?

  8. هلاك بيك اخوي ادري اخي انا ليس لدي اي مشكلة في if بنفس حاليا مشكلتي في علامة اصغر من هنا محتاج مساعده 

    بتاريخ 4 دقائق مضت قال مروان مروان3:

     هلاك بيك اخوي ادري اخي انا ليس لدي اي مشكلة في if بنفس حاليا مشكلتي في علامة اصغر من هنا محتاج مساعده 

    The operator '<' isn't defined for the type 'String'. هذا الخطا الي يواجهين لديها

  9. السلام عليكم ورحمة الله وبركاته

    تحيه طيبه للجميع ي اخوان

    تواجهني مشكلة مع كتابة اكبر من واصغر من كالتالي :

      Future<String> getLogin() async {
        var response = await http.get(
            Uri.encodeFull("http://xxxxxxxxxxx/ApplicationP.php"),);
        setState(() {
          var convertDataToJson = json.decode(response.body);
            data = convertDataToJson['result'];
          if (data != null) {
            user_name = data[0]['id'];
            if (_myPreferences.id < user_name) {
              _myPreferences.id = user_name;
              _myPreferences.commit();
            }
           
          }
          
        });
      }

    ارغب بعمل جمله شرطيه في الاستعلام يعني if او بالعربي اذا كانت الاي دي الي جاي اكبر من الي محفوظ معي يعمل لي حفظ الجديد المشكلة الان ان >  يظهر خطا لدي لا اعلم هل انا كاتب الجمله الشرطيه غلط او ماذا 

    ياليت الي لديه خبره في الموضوع يساعدني في تعديل الكود

  10. بتاريخ الآن قال Abdulhamid Hamsho:

    عليك في البداية استخدام Firebase Cloud Messaging.

    من ثم يمكنك استدعاء ال API بواسطة PHP من خلال الكود في الأسفل فقط عليك تغير key وtoken

    
    <?php
    define('API_ACCESS_KEY','Api key from Fcm add here');
     $fcmUrl = 'https://fcm.googleapis.com/fcm/send';
     $token='235zgagasd634sdgds46436';
    
         $notification = [
                'title' =>'title',
                'body' => 'body of message.',
                'icon' =>'myIcon', 
                'sound' => 'mySound'
            ];
            $extraNotificationData = ["message" => $notification,"moredata" =>'dd'];
    
            $fcmNotification = [
                //'registration_ids' => $tokenList, //multple token array
                'to'        => $token, //single token
                'notification' => $notification,
                'data' => $extraNotificationData
            ];
    
            $headers = [
                'Authorization: key=' . API_ACCESS_KEY,
                'Content-Type: application/json'
            ];
    
    
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL,$fcmUrl);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fcmNotification));
            $result = curl_exec($ch);
            curl_close($ch);
    
    
            echo $result;

     

    زادك الله من واسع فضله عزيزي تسلم

    • أعجبني 1
  11. بتاريخ الآن قال Abdulhamid Hamsho:

    يمكنك ذلك من خلال firebase_messaging.

    ولكن عزيزي انا بياناتي على قاعدة بيانات mysql مثلا التعليقات تحفظ على جدول في هذا القاعدة وانا اريد اعطي المستخدم تنبيه انه فيه تعليق جديد كيف رح اربط الاثنين ؟هل توجد طريقة لذلك

  12. بتاريخ 21 دقائق مضت قال Abdulhamid Hamsho:

    لا توجد طريقة للقيام بذلك مباشرة من flutter في الوقت الحالي على الرغم من أن ذلك قد يتغير في مرحلة ما - يمكنك مراجعة iOS/Android Background Execution. لديك خياران رغم ذلك.

    الخيار الأول هو استخدام MethodChannels وكتابة رمز android الذي تريده لإنشاء خدمة في الخلفية.

    والخيار الثاني هو مزيج من هذين الملحقين (plugins) - android_alarm_manager و android_intent. لكن هذا لن يساعد في جميع حالات الاستخدام.

    اهلا بك عزيزي

    اذا كان لا توجد خدمة  service  كيف يتم عمل نظام الاشعارات اذن للمستخدم في فلاتر؟ 

    • أعجبني 1
  13. بتاريخ 2 ساعات قال Wael Aljamal:

    يمكنك استخدام المكتبة country code picker

    المثال المضمن من مصمم المكتبة :

    
    import 'package:country_code_picker/country_code_picker.dart';
    import 'package:country_code_picker/country_localizations.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter_localizations/flutter_localizations.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => new _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          supportedLocales: [
            Locale('en'),
            Locale('it'),
            Locale('fr'),
            Locale('es'),
            Locale('de'),
            Locale('pt'),
            Locale('ko'),
          ],
          localizationsDelegates: [
            CountryLocalizations.delegate,
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
          ],
          home: new Scaffold(
            appBar: new AppBar(
              title: const Text('CountryPicker Example'),
            ),
            body: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  CountryCodePicker(
                    onChanged: print,
                    // Initial selection and favorite can be one of code ('IT') OR dial_code('+39')
                    initialSelection: 'IT',
                    favorite: ['+39', 'FR'],
                    countryFilter: ['IT', 'FR'],
                    showFlagDialog: false,
                    comparator: (a, b) => b.name.compareTo(a.name),
                    //Get the country information relevant to the initial selection
                    onInit: (code) =>
                        print("on init ${code.name} ${code.dialCode} ${code.name}"),
                  ),
                  SizedBox(
                    width: 400,
                    height: 60,
                    child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: CountryCodePicker(
                        onChanged: print,
                        hideMainText: true,
                        showFlagMain: true,
                        showFlag: false,
                        initialSelection: 'TF',
                        hideSearch: true,
                        showCountryOnly: true,
                        showOnlyCountryWhenClosed: true,
                        alignLeft: true,
                      ),
                    ),
                  ),
                  SizedBox(
                    width: 400,
                    height: 60,
                    child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: CountryCodePicker(
                        onChanged: (e) => print(e.toLongString()),
                        initialSelection: 'TF',
                        showCountryOnly: true,
                        showOnlyCountryWhenClosed: true,
                        favorite: ['+39', 'FR'],
                      ),
                    ),
                  ),
                  SizedBox(
                    width: 100,
                    height: 60,
                    child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: CountryCodePicker(
                        enabled: false,
                        onChanged: (c) => c.name,
                        initialSelection: 'TF',
                        showCountryOnly: true,
                        showOnlyCountryWhenClosed: true,
                        favorite: ['+39', 'FR'],
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }

     

    country_code_picker.png

    اهلا بيك اخوي

    طيب جميل هيا ما نحتاج لها بس تعرف وين المفترض بي استخدامها لدى الكود الذي رفعته انا؟

  14. السلام عليكم ورحمة الله وبركاته

    تحيه طيبه للجميع 

    اقوم ببرمجة صفحة تسجيل عضوية من خلال OTP فايربيس ولكن واجهتني مشكلة بسيطه بها 

    الان يتم كتابة رقم الهاتف مع فتاح خط الدولة او كود الدولة 

    انا اريد ان اضيف بوكس اختيار كود الدولة بحيث اني لن احتاج الى كتابة كود الدولة في تكس فيلد .

    اذا احد يعرف كيف ممكن اضيفه الى الكود الذي استعمله يفيدني لو تكرمتو. 

    هذا الكود الذي استعمله حاليا:

    main

    import 'package:flutter/material.dart';
    import 'package:phnauthnew/services/authservice.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          home: AuthService().handleAuth(),
        );
      }
    }
      

    authservice page

    import 'package:firebase_auth/firebase_auth.dart';
    import 'package:flutter/material.dart';
    import 'package:phnauthnew/screens/dashboard.dart';
    import 'package:phnauthnew/screens/loginpage.dart';
    
    class AuthService {
      //Handles Auth
      handleAuth() {
        return StreamBuilder(
            stream: FirebaseAuth.instance.onAuthStateChanged,
            builder: (BuildContext context, snapshot) {
              if (snapshot.hasData) {
                return DashboardPage();
              } else {
                return LoginPage();
              }
            });
      }
    
      //Sign out
      signOut() {
        FirebaseAuth.instance.signOut();
      }
    
      //SignIn
      signIn(AuthCredential authCreds) {
        FirebaseAuth.instance.signInWithCredential(authCreds);
      }
    
      signInWithOTP(smsCode, verId) {
        AuthCredential authCreds = PhoneAuthProvider.getCredential(
            verificationId: verId, smsCode: smsCode);
        signIn(authCreds);
      }
    }

    loginpage page

    import 'package:firebase_auth/firebase_auth.dart';
    import 'package:flutter/material.dart';
    import 'package:phnauthnew/services/authservice.dart';
    
    class LoginPage extends StatefulWidget {
      @override
      _LoginPageState createState() => _LoginPageState();
    }
    
    class _LoginPageState extends State<LoginPage> {
      final formKey = new GlobalKey<FormState>();
    
      String phoneNo, verificationId, smsCode;
    
      bool codeSent = false;
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Form(
              key: formKey,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Padding(
                      padding: EdgeInsets.only(left: 25.0, right: 25.0),
                      child: TextFormField(
                        keyboardType: TextInputType.phone,
                        decoration: InputDecoration(hintText: 'Enter phone number'),
                        onChanged: (val) {
                          setState(() {
                            this.phoneNo = val;
                          });
                        },
                      )),
                      codeSent ? Padding(
                      padding: EdgeInsets.only(left: 25.0, right: 25.0),
                      child: TextFormField(
                        keyboardType: TextInputType.phone,
                        decoration: InputDecoration(hintText: 'Enter OTP'),
                        onChanged: (val) {
                          setState(() {
                            this.smsCode = val;
                          });
                        },
                      )) : Container(),
                  Padding(
                      padding: EdgeInsets.only(left: 25.0, right: 25.0),
                      child: RaisedButton(
                          child: Center(child: codeSent ? Text('Login'):Text('Verify')),
                          onPressed: () {
                            codeSent ? AuthService().signInWithOTP(smsCode, verificationId):verifyPhone(phoneNo);
                          }))
                ],
              )),
        );
      }
    
      Future<void> verifyPhone(phoneNo) async {
        final PhoneVerificationCompleted verified = (AuthCredential authResult) {
          AuthService().signIn(authResult);
        };
    
        final PhoneVerificationFailed verificationfailed =
            (AuthException authException) {
          print('${authException.message}');
        };
    
        final PhoneCodeSent smsSent = (String verId, [int forceResend]) {
          this.verificationId = verId;
          setState(() {
            this.codeSent = true;
          });
        };
    
        final PhoneCodeAutoRetrievalTimeout autoTimeout = (String verId) {
          this.verificationId = verId;
        };
    
        await FirebaseAuth.instance.verifyPhoneNumber(
            phoneNumber: phoneNo,
            timeout: const Duration(seconds: 5),
            verificationCompleted: verified,
            verificationFailed: verificationfailed,
            codeSent: smsSent,
            codeAutoRetrievalTimeout: autoTimeout);
      }
    }

    dashboard page

    import 'package:flutter/material.dart';
    import 'package:phnauthnew/services/authservice.dart';
    
    class DashboardPage extends StatefulWidget {
      @override
      _DashboardPageState createState() => _DashboardPageState();
    }
    
    class _DashboardPageState extends State<DashboardPage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: RaisedButton(
              child: Text('Signout'),
              onPressed: () {
                AuthService().signOut();
              },
            )
          )
        );
      }
    }

     

  15. بتاريخ الآن قال ياسين عناية:

    و عليكم السلام

    لا تقم بنسخ .flutter-plugins و اتبع هذه الخطوات في تشغيل مشروعك :

    
    flutter clean

    ثم

    
    flutter packages get

    و حاول حذف .packeges و نفذ الأمر التالي :

    
    flutter pub get


    أتمنى لك كل التوفيق.

    اهلا بك الغالي

    شاكر لك ردك عزيزي

    تم حل المشكلة باخراج مجلد المشروع الى سطح المكتب وذهبت المشاكل

    • أعجبني 1
  16. بتاريخ الآن قال Yomna Raouf:

    هل يمكنك إرفاق صور لهذه الأخطاء حتى نتمكن من مساعدتك بشكل أفضل؟؟ 

    و أيضا صورة لمحتويات مجلد المشروع.

    بالتوفيق.

    اهلا بك اختي

    سبحان الله انا الي 3 ساعات ابحث عن سبب المشكلة واول من طرحت المشكله لديكم وجدت الحل ..

    للفائده للجميع كانت المشكله اني واضع مجلد المشروع في مجلد ثاني قمت بوضعه مباشرتا على سطح المكتب وتم حل المشكله

    ربي يعطيك الف عافيه على سرعة تجاوبك 

    • أعجبني 1
  17. السلام عليكم ورحمة الله وبركاته

    تحيه طيبه للجميع

    ي اخوان لدي مشروع فلاتر كنت شغال عليه ف لاب توب ثاني

    قمت بتغير لاب توب وتثبيت كل شي مثل الجهاز السابق من برامج وفلاتر وغيره

    ولكن حاليا لدي مشكلة لما انقل مشروعي الى الجهاز الجديد كل صفحات المشروع يظهر لدي الخط الاحمر الذي يدل على وجود اخطاء

    مع العلم انه مشروعي لا يحتوي على الاخطاء في جهازي السابق ولكن على ما يبدو اني بجاح الى عمل امر ما بعد النقل

    هل يعلم احدكم حل لهذا المشكلة؟

  18. بتاريخ 15 دقائق مضت قال ياسين عناية:
    • في بداية الأمر يجب عليك تحديد ما سوف تنوي العمل عليه و التفنيات التي تود برمجتها.
    • هناك بعض المواصفات البسيطة التى يجب عليك مراعاتها مثل الذاكرة والمعالج والسرعة، انت بحاجة إلى رام 8 جيجا بايت على الأقل، أما إذا كنت تعمل فى مجال برمجة الألعاب أو أحد مطورى VR (الواقع الإفتراضى) فإنك ستحتاج رام تصل إلى 16 جيجا بايت على الأقل وذلك لتحمل البرامج الثقيلة و بيئة التطوير المتكاملة (IDE) وقد تضطر أحيانا إلى وضع الإقراص الصلبة فى الإعتبار لتحسين أداء عملك. أما بالنسبة لمبرمج الألعاب ومطور VR فإنه يحتاج إلى كارت رسومات بإمكانيات عالية.
    • بالنسبة للمبرمجين أصحاب الميزانية المحدودة يمكنهم العمل على أجهزة ذات معالج Intel Core i3 لكن من الأفضل أن يكون المعالج Core i5 من الجيل الثامن على الأقل، المعالج ضرورى جداً لمبرمجى الألعاب ومطورى فقد يحتاجون إلى معالج Intel Core i7 من الجيل الثامن .
    • Asus Rog Strix G15 G512LI سيكون خيار جيد لمتطلباتك و برامجك.

    اهلا بك اخي

    شاكر لك ردك اولا

    ايضا بنسبه ل نوع المعالج

    الفئه H and U حسب ما فهمت يفضل حاسوب المبرمج يكون H هذا الي فهمته لنه الاندرويد ستوديو ثقيل جدا وبذات الامليتر المرفق لديه

     

    ايضا ياليت توضحلي سبب اختيارك لاب توب asus على لينوفو

  19. السلام عليكم ورحمة الله وبركاته

    تحيه طيبه للجميع..

    حقيقه اني ذهبت لشرا لاب توب جديد كوني اعاني من بعض المشاكل في جهازي القديم ولم استطيع تطويره اكثر

    ولكن احترت في نوعين من الاجهزة المتوفره

    طبعا كل اختياراتي كانت كالتالي

    Intel i7 --10generation

    16GB--RAM

    SSD ما اقل من 500

    وكرت الشاشه ما اقل من 2GB

    ولكن يوجد نوعا الاول لاب توب الالعاب

    وثاني لاب توب العادي

    الاثنين نفس الموصفات تقريبا الفرق في لاب توب الالعاب السعر اكبر + المراوح 2 + البعض ياتي ب 4GB كرت لشاشه

    طبيعة عملي اعمال ل ساعات طوال من 4 ل 7 ساعات تقريبا بعض الايام

    استخدام اندرويد ستوديو  والفيجول ستوديو و المحاكي المرفق لدى اندرويد ستوديو  + والاهم الاله الافتراضيه اوvirtacl box لتشغيل mac os

    امثله على لاب توب الالعاب الذي وجدتهم

     

    امال لاب توبات الاخره مثال عليهم هذا

    https://www.infotec.com.pe/laptops-y-tablets/18052-hp-15-da2211nia-i7-10510u-8gb-1tb-15-6-fhd-t-video-mx130-4gb-freedos.html

    طبعا هو جاي 8 جيجا ولكن انا طلبت اضافه له حتى يصبح 16 جيجا مع قرص ssd 

    ولقد احترت في الاختيار بين النوعين لاب توب الالعاب ولاب توب العادي 

    ايضا لا اعلم هل المبرمج محتاج الى كرت شاشه بسعة 4 GB

    وهل فكرت اذا لاب جاي 8 جيجا مثلا واطلب منه يعمله 16 بيكون مثل الي جاي من المصنع 16 في الاداء؟

    ياليت الي جرب وسبق ومر بتجربه يفيدنا عن تجربته 

  20. بتاريخ 6 دقائق مضت قال Omar Haddad2:

    سيكون في فرق لكن ربما بسيط , المعالج الجيل السادس مناسب....بإعتقادي أن المشكلة ليست من المعالج  ربما هي من الram  أو الموارد المخصصة لvirtual قليلة .

    شاكر لك ي غالي

    الموارد قليله نعم لقد فهمت الامر يحتاجلي 16 جيجا من اجل ان اعطي الاله اكثر من 12 جيجا رام والباقي للحاسب الاساسي

     

     

    بنسببه للمعالج انا اسال لني محصل الاثنين بس فيه فرق بالاسعار بينهم th 6 اقل طبيعية الحال 

  21. بتاريخ 5 دقائق مضت قال Yomna Raouf:

     

    قمت باستخدام  Oracle VM virtual machine و لم أواجه أي مشكلة في الأداء.

    بالطبع الإصدار الثامن سيكون أفضل في الأداء عن الإصدار السادس بفرق ملحوظ. و لكن هذا لا يعني أن الأداء في حالة الجيل السادس سيكون سيء. 

    يمكنك العمل بهذا المعلج مع تقية الرامات و سيعمل بشكل جيد. و لكن أفضل رامات أكثر من 16GB إذا كنت تستطيع تحمُل تكلفتها سيساعدك ذلك كثيرًا على العمل بشكل أفضل.

    بالتوفيق.

    ربي يعطيك الف عافيه

    لقد فهمت الامر

    كل الشكر لك 

  22. بتاريخ 3 دقائق مضت قال Omar Haddad2:

    قم بزيادة الرام ل16  إن لم يتحسن الأداء , فتأكد من الموارد المخصصةل virtual يعني ما سعة الram  الذي خصصتها لvirtual ,

    وأيضا ما المساحة المخصصة من الديسك  .

    ساقوم بهذا التجربه باذن الله

    ولكن سوال ي غالي اعذرني ولكن هل

    معالج i7 th6

    رح يشكل فرق كبير عن معالج i7 th 9 او th10?

     

     

  23. بتاريخ 12 دقائق مضت قال Yomna Raouf:

    لا يوجد أي مشكلة في ال processor السبب في أن سعة ال RAM قليلة جدًا ف 8GB من الرام لا تطلح أبدًا لهذا الأمر.

    إذا قمت بترقية ال RAM إلى 16GB سيعمل بشكل جيد "لن تحصل على أفضل أداء في الحقيقة" و إذا كنت تستطيع ترقيتها إلى 32GB سيعمل بسلاسة أكبر و لن تلاحظ أي تعليق.

    الجهاز الخاص بي مواصفاتة كالتالي:

    core i7 8th Generation

    cores 4 

    logical processors 8 

    "لا يوجد أي مشكلة في ال processor ف أداءه ممتاز"

    RAM 8GB 

    و كنت أعاني من نفس المشكلة التي ذكرتها و عندما قمت بترقية ال RAM إلى 16GB أصبح يعمل بشكل جيد و بأداء ممتاز و بدون تعليق.

    يمكنك أن تتجه إلى إحدى مراكز الصيانة و شراء RAM إضافية و تركيبها لجهازك.

    و لكن في حالتك أنصحك بزيادتها عن 16GB لأنك ستقوم بتشغيل virtual machine فقد تواجه مشاكل أيضًا قي هذه الحالة مع ال 16GB of RAM.

    انتي لم تقومي بالعمل على virtual machicne بهذا الموصفات المذكوره بعد زيادة الرام؟اذا كنتي عملتي كيف كانت التجربه؟

     

     

    ايضا سوال لو سمحتي اذا كان i7

    ولكن الاصدار 6th هل رح يكون فيه فرق كبير بينه وبين الاصدار 8th؟في الادا؟ او حتى th9

     

    مع وجود رام 16 جيجا 

  24. بتاريخ 4 دقائق مضت قال Omar Haddad2:

    فعلاً وهذه المشكلة يعاني منها من يرغبة بتعلم الios , لكن لو زودت الرام ل 16 ستجد تحسن في الأداء .

    لدي استفسار هل أداء الجهاز  بدون المحاكي   يكون سريع ؟

     

     

    نعم بدون الاله الحاسوب ممتاز جدا

    سابقا اعتقدت انه الامر من جهازي الخاص

    اليوم لدي جهاز جديد انا بنفسي فاك كرتونه حسب موصفاته الي ف اعلى 

    ولكنه ايضا يعاني نفس الشي مع الماك الوهمي

×
×
  • أضف...