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

Flutter Dev

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

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

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

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

    2

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

  1. لدي كلاس shared_preferences منفصل بحيث انني استطيع استدعاه من صفحات مختلفه وتخزين فيه البيانات من حيث يتطلب ذلك كالتالي:

    import 'package:shared_preferences/shared_preferences.dart';
    
    class MyPreferences {
      static const ID = "id";
      static const STATE = "state";
    
    
      static final MyPreferences instance = MyPreferences._internal();
    
      static SharedPreferences _sharedPreferences;
    
      String id = "";
      String state = "";
    
    
      MyPreferences._internal() {}
    
      factory MyPreferences() => instance;
    
      Future<SharedPreferences> get preferences async {
        if (_sharedPreferences != null) {
          return _sharedPreferences;
        } else {
          _sharedPreferences = await SharedPreferences.getInstance();
          state = _sharedPreferences.getString(STATE);
          id = _sharedPreferences.getString(ID);
          return _sharedPreferences;
        }
      }
    
      Future<bool> commit() async {
        await _sharedPreferences.setString(STATE, state);
        await _sharedPreferences.setString(ID, id);
    
      }
      Future<MyPreferences> init() async {
        _sharedPreferences = await preferences;
        return this;
      }
    
      
      
    
    }

    احتاج الى اضافة بيانات مختلفه فيه ليست من نوع Stirng

    احتاج الى اضافة setBool و getBool

    بحيث انني ارغب بعمل تحقق من المستخدم اذا كان عامل تسجيل دخول او لا 

    كيف يمكن عمل ذلك في كلاس  shared_preferences

    مع العلم انني ساقوم بتخزين البيانات من صفحه مختلفه 

  2. بتاريخ 17 ساعات قال يوسف احمد9:

    جرب أخي أن تضع سينجل كوت قبل المتغير هكذا وتأكد من القيم

    
    $sql = "SELECT * FROM conversations WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or (user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = $topic_id";

     

    مرحبا اخي @يوسف احمد9 اعتذر على تاخر الرد في البداية 

    قمت بتجربة ووضع سينل كوت الكود يعمل بشكل هذا فعلا ولكن   الان هو يرجع بيانات المستخدمين فعلا ولكن ياتي ايضا ب مواضيع ليست مرتبطه ب  topic_ id 

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

    البيانات التي يرجعها الاستعلام الان توجد بيانات ليست مرتبطه بالموضوع 

    607efcc43c76e_Screenshot2021-04-20200549.thumb.png.8fea71985fea1107c13e83d71cbfa179.png

     

    كل البيانات المتوفره في الجدول الان 

    607efcf59cca6_Screenshot2021-04-20200739.thumb.png.ede3760418f3f5f0b4a2e9213e783753.png

     

    وهذا الكود المستعمل كامل للستعلام اعلاه

    <?php
    
    
    include 'con.php';
    $topic_id= 200;
     $user_Received_id='wkFldN4TzDhczkdHMotQ';
     $user_send_id='xQVZw68SDee5ITSN2V';
     
    $sql = "SELECT * FROM conversation WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or(user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = $topic_id";
    
    
    $stmt = $con->prepare($sql); 
    
    //$stmt->bind_param("sss",$IDAd,$IDUserReceived,$IDUuserSend);
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    
     
    //$result = $con->query($sql);
     
    if ($result) {
     
     
    	 while($row[] = $result->fetch_assoc()) {
    	 
    	 $item = $row;
    	 
    	 $json = json_encode($item, JSON_NUMERIC_CHECK);
    	 
    	 }
     
    } else {
      
       echo "No Data Found.";
    }
     echo $json;
    $con->close();
    
    ?>

     

     

     

    A.PHP

    DB.txt

     

    ====================

     

    مرحبا اخي بلال @بلال زيادة

    تحيه طيبه لك

    ملف المشروع يتكون من ملف php + mysql  قمت بارفاقه لك

     

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

    <?php
    
    
    include 'con.php';
    $topic_id= 200;
     $user_Received_id='wkFldN4TzDhczkdHMotQ';
     $user_send_id='xQVZw68SDee5ITSN2V';
     
    $sql = "SELECT * FROM conversation WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or(user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = $topic_id";
    
    
    $stmt = $con->prepare($sql); 
    
    //$stmt->bind_param("sss",$IDAd,$IDUserReceived,$IDUuserSend);
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    
     
    //$result = $con->query($sql);
     
    if ($result) {
     
     
    	 while($row[] = $result->fetch_assoc()) {
    	 
    	 $item = $row;
    	 
    	 $json = json_encode($item, JSON_NUMERIC_CHECK);
    	 
    	 }
     
    } else {
      
       echo "No Data Found.";
    }
     echo $json;
    $con->close();
    
    ?>

     

    وهنا تكمن المشكله يقوم بارجاع بيانات ليست مرتبطه مع topic_id 

    Screenshot 2021-04-20 200549.png

    وهذا صوره للبيانات المتوفره في قاعدة البيانات

    Screenshot 2021-04-20 200739.png

     

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

    A.PHP

    DB.txt

  3. بتاريخ 9 دقائق مضت قال يوسف احمد9:
    
    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "xmmp-chat";
    
    $topic_id= 325;
    $user_Received_id=1;
    $user_send_id=2;
    
    // Create connection
    $con = new mysqli($servername, $username, $password, $dbname);
    
    // Check connection
    if ($con->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    
    $sql = "SELECT * FROM conversations WHERE (user_Received_id=$user_Received_id AND user_send_id=$user_send_id) or (user_Received_id=$user_send_id AND user_send_id=$user_Received_id) and topic_id = $topic_id";
    
    $stmt = $con->prepare($sql);
    
    //$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    
    
    //$result = $con->query($sql);
    
    if ($result) {
        $data = [];
    
        while ($row = $result->fetch_assoc()) {
            $data[] = $row;
    
    
        }
        echo "<pre>";
        print_r($data);
    }
    ?>
    

    جرب هذا الكود أخي

    قمت بتطبيقه بشكل التالي حسب بيانات الجدول الظاهر في الصوره ولم يرجع لي اي بيانات 

    <?php
    include 'con.php';
     
     $json = file_get_contents('php://input');
     $obj = json_decode($json,true);
     $topic_id= '200';
    $user_Received_id='wkFldN4TzDhczk********';
    $user_send_id='xQVZw68SDee5ITSN2V*******';
    
    $sql = "SELECT * FROM conversation WHERE (user_Received_id=$user_Received_id AND user_send_id=$user_send_id) or (user_Received_id=$user_send_id AND user_send_id=$user_Received_id) and topic_id = $topic_id";
    
    $stmt = $con->prepare($sql);
    
    //$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    
    
    //$result = $con->query($sql);
    
    if ($result) {
        $data = [];
    
        while ($row = $result->fetch_assoc()) {
            $data[] = $row;
    
    
        }
        echo "<pre>";
        print_r($data);
    }
    ?>

     

     

     

  4. بتاريخ 1 دقيقة مضت قال يوسف احمد9:
    
    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "xmmp-chat";
    
    // Create connection
    $con = new mysqli($servername, $username, $password, $dbname);
    
    // Check connection
    if ($con->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    
    $sql = "SELECT * FROM conversations WHERE (user_Received_id=1 AND user_send_id=2) or (user_Received_id=2 AND user_send_id=1) and topic_id = 325 ";
    
    $stmt = $con->prepare($sql);
    
    //$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    
    
    //$result = $con->query($sql);
    
    if ($result) {
        $data = [];
    
        while ($row = $result->fetch_assoc()) {
            $data[] = $row;
    
    
        }
        echo "<pre>";
        print_r($data);
    }
    ?>
    

    أنظر أخى لهذا الكود وتلك الصورة لرؤية الناتج من هذا الكود

    Capture.PNG

     

     

     اهلا اخي 

    بنسبة الى id  المستخدمين انا احصل عليه من خارج الفورم يعني مش ثابت دائما على 1 او 2 مجرد مثال 

    قمت بارفاق صور انظر هذا الجدول من قاعدة البيانات 

     

    607e099688d80_Screenshot2021-04-20024009.thumb.png.c72d6275969d616474e6bdc991cdb76f.png

     

    احصل عليهم من خلال 

     $topic_id= $_GET["topic_id"];
     $user_Received_id=$_GET["user_Received_id"];
      $user_send_id=$_GET["user_send_id"];

     

  5. بتاريخ 14 دقائق مضت قال Adnane Kadri:

    طبعا قد يعتمد هذا على نوع البيانات المدرجة بقاعدة البيانات فالظاهر أن user_Received_id و  user_send_id عبارة عن strings او نوع اخر فتأكد أن تقوم بتمرير النوع الصحيح 

    هل يمكن الاطلاع على بنية بيانات الجدول بالphpmyadmin ؟ 

    مرفق لك صوره اخي

    607e05ca31e5c_Screenshot2021-04-20023523.thumb.png.d3386f84f291ccda710b5cbee2ad710d.png

    بتاريخ 14 دقائق مضت قال Adnane Kadri:

    طبعا قد يعتمد هذا على نوع البيانات المدرجة بقاعدة البيانات فالظاهر أن user_Received_id و  user_send_id عبارة عن strings او نوع اخر فتأكد أن تقوم بتمرير النوع الصحيح 

    هل يمكن الاطلاع على بنية بيانات الجدول بالphpmyadmin ؟ 

    مرفق لك اخي ايضا صورة للبيانات المدرجه فيه

    607e07da822f5_Screenshot2021-04-20024009.thumb.png.29c1f7f072419c7091098cf93ae658b7.png

  6. بتاريخ 10 دقائق مضت قال Adnane Kadri:

    لتفحص في المشكل أكثر يمكنك تفحص الخطأ عن طريق : 

    
    <?php 
    
    $binding_params = $stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);
    
    if(! $binding_params){
        
      die( "يوجد خطأ في تمرير البيانات : (" .$conn->errno . ") " . $conn->error);
    
    }

     

    لكن يبدو أن السبب في ظهور المشكلة هو أن الدالة bind_param تقبل أن يكون البارمتر اﻷول عن نوع البيانات الممررة بالترتيب , فان كنا نقوم بتمرير 3 strings : 

    
    <?php 
    
    $stm->bind_param ('sss', $first_str ,$second_str ,$third_str)

    أما في هاته الحالة فنحن نقوم بتمرير معرفات ID فالمفروض يتم تمرير i ترميزا لinteger عوضا عن تمرير s فيقوم بتجاهل كل ما هو ليس string فتكون : 

    
    <?php 
    
    $stm->bind_param ('iii', $first_int ,$second_int ,$third_int)

     

    هلا فيك اخي

    شاكر لك ردك

    حاولت التطبيق لما اعمل الكل iii d يرجع الى  كل السجلات المرتبطه ب رقم topic_id  بدون ان ينظر الى user_Received_id   user_send_id

    وكانهم ليس من الجمله الشرطيه او ليسو موجودين

    بتاريخ 21 دقائق مضت قال يوسف احمد9:

    تلك الكويري ستقوم بإرجاع الداتا فقط من طريق واحد وهي فى حالة user_Received_id = 2 و user_send_id = 1

    ولذلك يجب أن نعدل الكويري 

    
    SELECT  * FROM conversations WHERE  (user_Received_id=1 AND user_send_id=2) or (user_Received_id=2 AND user_send_id=1) and topic_id = ?

     

    اهلا بك عزيزي

    قمت بتطبيق واستبدال الارقام ب علامة ? 

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

  7. لدي الجدول التالي وهو يحتوي على البيانات المدرجه :

    conversations table : 
    
    --------------------------------------------------------------
    id |topic_id   | user_send_id |  user_Received_id| topic
    ---------------------------------------------------------------
    1  |    325     |   1          | 2                | مرحبا لدى عدة اسئله على هذا الموضوع
    ---------------------------------------------------------------
    2  |    325     |   1          | 2                | مرحبا اخى الكريم هل لديك وقت كافى  
      ---------------------------------------------------------------
    3  |    325     |   2          | 1                | هل نستطيع التحدث في وقت مختلف
    ---------------------------------------------------------------
    4  |    325     |   2          | 1                |   انا مشغول الان  

    قمت بوضع كود الاستعلام عنه بحيث انني ارغب بجلب كل السجلات المتعلقه ب Topic_id  المتشابه التي حدثة بين المستخدم المرسل والمستقبل من خلال الكود التالي:

    <?php
    
    
    include 'con.php';
    
    
     	 $topic_id= $_GET["topic_id"];
     $user_Received_id=$_GET["user_Received_id"];
      $user_send_id=$_GET["user_send_id"];
    $sql = "SELECT  * FROM conversations WHERE topic_id=? AND user_Received_id=? AND user_send_id=? ";
    
    $stmt = $con->prepare($sql); 
    
    $stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    
     
    //$result = $con->query($sql);
     
    if ($result) {
     
     
    	 while($row[] = $result->fetch_assoc()) {
    	 
    	 $item = $row;
    	 
    	 $json = json_encode($item, JSON_NUMERIC_CHECK);
    	 
    	 }
     
    } else {
      
       echo "No Data Found.";
    }
     echo $json;
    $con->close();
    
    ?>

    اللكود بشكل هذا شغال ولكن المشكله يرجع لي بقيمة عمود واحد عمود user_send_id وانا محتاج ارجاع قيمة user_send_idو user_Received_id المتشابه مع نفس topic_id بمعنى كل الحقول التي قام المستخدمين الاثنين بتخزينهم ويمتلكون topic_id واحد ليس مختلف 

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

  8. بتاريخ 11 ساعات قال بلال زيادة:

    ستقوم بتخزين id محمد و تخزين id للرسائل بحيث عند إرسال الرسالة يتم حفظها, ويكون الاستعلام بهذا الشكل 

    
    $sql = "SELECT * FROM messages WHERE user_id = {$user_id} and msg_id = {$msg_id}";
    $sql = mysqli_query("معرف الاتصال", $sql);

    وهكذا تستطيع عمل Loop خاصة للرسائل الخاصة بمحمد و الخاصة بالرسائل.

    الفكرة بعمل جدول للإعضاء و جدول للرسائل و جدول للمحادثات داخل كل رسالة.

    أو يمكنك إرفاق ملفات مشروعك هنا لنساعدك في حلها.

    اهلا بك اخي الكريم 

    لقد فهمت الفكره ساحاول تطبيق ذلك 

    كل الشكر لك 

    بتاريخ 8 ساعات قال يوسف احمد9:

    الفكرة كالتالى اخى الكريم سنقوم بعمل جدول خاص بالمواضيع : 

    
    CREATE TABLE subjects (
        id bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(30) NOT NULL,
        description VARCHAR(30) NOT NULL,
        user_id bigint UNSIGNED,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    )

    ونقوم بعمل جدول يسمى المحادثات ويكون كالتالى : 

    
    CREATE TABLE conversations (
        id bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        subject_id bigint UNSIGNED,
        tile VARCHAR(190) NOT NULL,
        user_id bigint UNSIGNED,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    )

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

    ومن ثم نقوم بعمل جدول نقوم بتخزين الرسائل فية ويكون بالشكل التالى : 

    
    CREATE TABLE messages (
        id bigint UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        conversation_id bigint UNSIGNED,
        msg text NOT NULL,
        user_id bigint UNSIGNED,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    )
    
    subjects table :
    
    ---------------------
    id | title | user_id
    ---------------------
    1  | title | 5
    
    
    conversations table : 
    
    --------------------------------------------------------------
    id | subject_id | user_id | title
    ---------------------------------------------------------------
    1  | 1          | 1       | مرحبا لدى عدة اسئله على هذا الموضوع
    ---------------------------------------------------------------
    2  | 1          | 2       | مرحبا اخى الكريم هل لديك وقت كافى  
    
    
    messages table : 
    
    -----------------------------------------------------------------
    id | conversation_id | user_id | title
    -----------------------------------------------------------------
    1  | 1               | 1       | كم احتاج وقت حتى اتعلم البرمجة؟
    -----------------------------------------------------------------
    2  | 1               | 5       | تحتاج خمس شهور  
    

    واخيرا اذا اردت ان تسترجع الشات لست يمكن تنفيذ هذه الكويرى : 

    
    SELECT conversations.* FROM `conversations` 
    JOIN subjects on subjects.id = conversations.subject_id
    WHERE subjects.user_id = 5

    وشكرا .

    كل الشكر لك اخي الكريم

    لقد فهمت الفكره وشرحك كافي ووافي لقد تم ايضاح الفكره بشكل كامل

    جزاك الله الف خير 

    بتاريخ 13 ساعات قال Nuhla Almasri:

    هل يمكنك ارسال السكيما schema لقاعدة البينات حتى اتعرف اكثر كيف قمت بربط المحادثة مع الاشخاص ؟

    شكرا لك لقد تم حل المشكله واعتذر على تاخر ردي

    • أعجبني 1
  9. اعمل على فكرة اول تجربه لي من خلالها ..

    ما احاول القيام به كالتالي:انشاء رسائل خاصة بين الاعضاء.

    على سبيل المثال لدي مستخدم اسمه احمد ومستخدم اسمه محمد

    محمد قام بنشر موضوع بعنوان : كيف نتعلم البرمجة .

    ياتي احمد ويقوم بتواصل لدى محمد عن طريق الرسائل الخاصة

    اول رسالة : كم احتاج وقت حتى اتعلم البرمجة؟

    الرسالة الثانية : هل يمكنني التعلم خلال شهر واحد؟

    الرسالة الثالثه: ما الفرق بين flutter  و java ?

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

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

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

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

    يمكن ذلك من خلال الدالتين:

    • onStepContinue 
    • onStepCancel

    نحتاج لتعريف controlsBuilder callback والذي يأخذ بدوره الدالتين السابقتين و من ثم يمكننا تغيير الاسم:

    هذا مثال عن  stepper:

    
    Stepper(
          controlsBuilder: (BuildContext context,
              {VoidCallback onStepContinue, VoidCallback onStepCancel}) {
            return Row(
              children: <Widget>[
                TextButton(
                  onPressed: onStepContinue,
                  child: const Text('NEXT'),
                ),
                TextButton(
                  onPressed: onStepCancel,
                  child: const Text('EXIT'),
                ),
              ],
            );
          },
          steps: const <Step>[
            Step(
              title: Text('A'),
              content: SizedBox(
                width: 100.0,
                height: 100.0,
              ),
            ),
            Step(
              title: Text('B'),
              content: SizedBox(
                width: 100.0,
                height: 100.0,
              ),
            ),
          ],
        );

     

    كل الشكر اخي لقد نجح الامر 

    بتاريخ 11 ساعات قال بلال زيادة:

    يمكنك تغيير label النص من خلال Widget Text بهذا الشكل 

    
    Text('NEXT')
    
    Text('CANCEL'),

    يمكنك وضع زرين بهذا الشكل 

    
    TextButton(
      onPressed: onStepContinue,
      child: const Text('NEXT'),
    ),
    TextButton(
      onPressed: onStepCancel,
      child: const Text('CANCEL'),
    ),

    بحيث child تأخذ Widget النص و onPressed تأخذ قيمة الدالة أو الأنتقال. بحيث الدالتين 

    
    onStepContinue
    onStepCancel

    تستخدمان في التحكم في Stepper.

    كل الشكر الغالي لقد نجح الامر 

    جزاك الله الف خير يا رب

  11. قمت بستعمال كود للقيام بعمليات ممتابعه بحيث اني اطلب من المستخدم انجاز مهمة قبل الانتقال الى المهمة التاليه

    الكود شغال ماشي مشكله ولكن احتاج الى تغير اسم button 

    بمعنى الان املك زر باسم Continue

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

    صورة لتوضيح المشكله :

    607b3cc21d3bc_Screenshot2021-04-17235320.thumb.png.71b10c7239c785cecf83a4d7a8e29a80.png

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

    import 'package:fa_stepper/fa_stepper.dart';
    import 'package:flutter/material.dart';
    import 'first.dart';
    import 'second.dart';
    import 'third.dart';
    
    void main() {
      runApp(MaterialApp(
          // Title
          title: "Simple Material App",
          // Home
          home: StepperEx()));
    }
    
    
    class StepperEx extends StatefulWidget {
      @override
      _StepperExState createState() => _StepperExState();
    }
    
    class _StepperExState extends State<StepperEx> {
      int _currentStep = 0;
      StepperType stepperType = StepperType.vertical;
    
      switchStepType() {
        setState(() => stepperType == StepperType.vertical
            ? stepperType = StepperType.horizontal
            : stepperType = StepperType.vertical);
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          resizeToAvoidBottomPadding: false,
          appBar: AppBar(
            title: Text('Stepper Example'),
          ),
          body:
    
          Column(
            children: <Widget>[
              Expanded(
                child: Stepper(
                  //physics: ClampingScrollPhysics(),
                  steps: _stepper(),
                  type: stepperType,
                  currentStep: this._currentStep,
                  onStepTapped: (step) {
                    setState(() {
                      this._currentStep = step;
                    });
                  },
                  onStepContinue: () {
                    setState(() {
                      if (this._currentStep < this._stepper().length - 1) {
                        this._currentStep = this._currentStep + 1;
                      } else {
                        //Logic
                        print('complete');
                      }
                    });
                  },
                  onStepCancel: () {
                    setState(() {
                      if (this._currentStep > 0) {
                        this._currentStep = this._currentStep - 1;
                      } else {
                        this._currentStep = 0;
                      }
                    });
                  },
                ),
              ),
            ],
          ),
    
        );
      }
    
      List<Step> _stepper() {
        List<Step> _steps = [
          Step(
              title: Text('Name'),
              content: Column(
                children: <Widget>[
    
    
    
    
    
    
                ],
              ),
              isActive: _currentStep >= 0,
              state: StepState.complete),
          Step(
              title: Text('Email'),
              content: Column(
                children: <Widget>[
    
    
    
    
    
                ],
              ),
              isActive: _currentStep >= 1,
              state: StepState.disabled),
    
        ];
        return _steps;
      }
    }

     

  12. قمت بستعمال الباكج 

    country_list_pick: ^1.0.1+4

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

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

    هل توجد طريقة لفعل ذلك؟

     CountryListPick(
                appBar: AppBar(
                  backgroundColor: CustomColors.Background,
                  title: Text(''),
                ),
                theme: CountryTheme(
                  isShowFlag: true,
                  isShowTitle: true,
                  isShowCode: false,
                  isDownIcon: true,
                  showEnglishName: true,
                ),
    
             
                onChanged: (CountryCode code) {
                  setState(() {
                   
                  });
    
    
             
                },
              );

     

  13. بتاريخ 5 ساعات قال بلال زيادة:

    يمكنك تعديل Model ليصبح 

    
    class ImageModel {
      int id;
      String src;
    
      ImageModel({
        this.id,
        this.src,
      });
    
      factory ImageModel.fromJson(Map<String, dynamic> json) => ImageModel(
            id: json["id"],
            src: json["src"],
          );
    
      Map<String, dynamic> toJson() => {
            "id": id,
            "src": src,
          };
    }

    ثم تعديل دالة _gotoSingleImage 

    
    _gotoSingleImage(imageModel, context);

     

    مرحبا اخي اعتذر على تاخر الرد

    لا يزال الخطاء متواجد في السطر 

    6075e36b18729_Screenshot2021-04-13223050.png.b67b6c5f7a2a1c5e824a097d4b155ba7.png

    The argument type 'List<ImageModel>' can't be assigned to the parameter type 'ImageModel'.

     

  14. اهلا اخي @بلال زيادة

    قمت باضافته بشكل التالي:

    class _HomePageState extends State<Demo> {
    String SelectIdCategory;
    bool lodaing=true;
      List data;
    List<ImageModel> imageModel;

     بدون finalلني لما وضعت فاينل احصل على خطاء في imageModel 

    الان اصبح ياتيني خطاء في index 

    60757e85a9408_Screenshot2021-04-13152029.png.3ad7ed5a100902338c77f647c2c3944a.png

  15. مرحبا اخي شاكر لك ردك اخوي @بلال زيادة

    قمت بتطبيق ما سبق وذكرته واصبح الكود كامل التطبيق بشكل التالي :

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

    
    
    void main() => runApp(MaterialApp(home: Demo()));
    
    class Demo extends StatefulWidget {
      @override
      _HomePageState createState() => _HomePageState();
    }
    
    class _HomePageState extends State<Demo> {
    String SelectIdCategory;
    bool lodaing=true;
      List data;
      Future GetAllCategory()async{
        var response=await http.get("https://******************.php"
            , headers: {"Accept": "application/json"}
        );
        var jsoBody = response.body;
        var jsoData =json.decode(jsoBody);
        setState(() {
          data= jsoData;
          lodaing=false;
        });
          print('show all data $jsoData');
      }
    @override
      void initState() {
        // TODO: implement initState
        super.initState();
    
        GetAllCategory();
      }
    
    var getId;
    
    void _gotoSingleImage(ImageModel imageModel, BuildContext context) {
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => SingleImage(imageModel)),
      );
    }
    
    
      @override
      Widget build(BuildContext context) {
    
    
        return Scaffold(
          body:lodaing?   CircularProgressIndicator() :
    
          GestureDetector(
    
            child:
    
            Center(
            child: SizedBox(
              height: 150.0,
              width: 300.0,
    
              child: InkWell(
                onTap: () {
    
                  _gotoSingleImage(imageModel[index], context);
               
    
                },
    
                child: Carousel(
    
         
                  boxFit: BoxFit.cover,
                  autoplay: true,
                  dotSize: 4.0,
                  dotSpacing: 15.0,
                  dotColor: Colors.lightGreenAccent,
                  indicatorBgPadding: 5.0,
                  dotBgColor: Colors.purple.withOpacity(0.5),
                  borderRadius: true,
    
               
                  images:
    
                  data  .map(
                        (list) {
    
                  
    
                      return Image.network(list['image']);
    
    
    
                    },
    
                  )
                      .toList(),
    
    
                ),
    
    
    
              ),
    
            ),
          ),
          )
    
    
    
    
        );
      }
    }
    
    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();
    
        print(widget.imageModel);
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text('ImageScreen'),
            ),
            body: Center(
             
            ));
      }
    }
    
    
    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["image"].map((x) => ImageUrl.fromJson(x))),
    
          );
    
      Map<String, dynamic> toJson() => {
        "id": id,
        "image": 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,
      };
    }

     

     

    لا اعلم اذا كانت توجد مشكله في تطبيقي لكلامك ولكن ظهر المشكله التاليه فقط في الكود صوره لتوضيح :

    607566daee4f7_Screenshot2021-04-13133926.thumb.png.3613b041f2bb8815bd111d301dfa2a11.png

     

     

    Undefined name 'imageModel'.

     

    هل توجد مشكله في ما فعلته ام يوجد شي ناقص؟
     

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

    أعتذر لا يوجد شيفرات برمجية إنما أخبرتك بأفضل طريقة حل بالنسبة لي:

    رابط المكتبة : cached_network_image

    إذا كانت الفكرة صعبة .. قم فقط بتخزين رقم الصورة التي نقر عليها المستخدم ثم حفظها في shared_preference ومن ثم استدعاء نفس الصورة لنفس الدليل ضمن imgList.

    يمكنك استخدام التأثير HERO في flutter الذي يعطي تأثير انتقال جميل بين الشاشات بتكبير الصورة و عمل تأثيرات حركية.

    بالتوفيق

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

     images:
    
                  data  .map(
                        (list) {
    
                     
                      return Image.network(list['image']+list['id'].toString());
    
    
    
                    },
    
                  )
                      .toList(),

     

  17. بتاريخ الآن قال Wael Aljamal:

    مرحبا مروان،

    نعم نستطيع معرفة الصورة المنقولة و الأفضل أن تستعمل shared_preference فهي الأسهل و الأسرع و لمنع تكرار الصور استخدم المكتية cached_network_image

     أعتقد أن الأفضل من تخزين الصور ك imgList List احفظهم بصيغة جيسون بحيث تحوي على ال id و الرابط وأيضا يمكنك تحميلها و تخزينها في shared_preference و دائما الوصول للصورة عن طريق المعرف ومن خلال غرض json نقراء الرابط و نطلبه من خلال cached_network_image ليتم جلب الصور بسرعة

    مرحبا اخي

    شاكر لك ملاحظاتك الغالي

    بس ياليت لو تكرمت اذا فيه اكواد لعمل هذا حقيقه الامر صعب علي قليلا بدون بعض الاكواد 

    ياليت اذا فيه مثال على ذلك 

  18.  

    مرحبا اخي @بلال زيادة

    شكرا على ردك 

    ولكن لم يكن قصدي بشكل الذي تفضلت به 

    انظر لقد قمت بتعديل الكود واصبح يعمل بشكل تمام ولكن توجد مشكله مختلفه 

    كيف يمكنني نقل الصوره عند الضغط عليها الى صفحه مختلفه؟ بحيث يكون لو المستخدم نقل على الصوره الصوره سوف تنتقل الى صفحه مختلفه ؟

    او هل يمكن نقل ال id الخاص ب صوره؟

    كل صوره في قاعدة البيانات لدي تمتلك id منفرد لو امكن نقل id مع النقر على الصوره استطيع استعماله لجلب بيانات الصوره في الصفحة التاليه 

    هل يمكن نقله ؟ 

     

    
    
    
    void main() => runApp(MaterialApp(home: Demo()));
    
    class Demo extends StatefulWidget {
      @override
      _HomePageState createState() => _HomePageState();
    }
    
    class _HomePageState extends State<Demo> {
    String SelectIdCategory;
    bool lodaing=true;
      List data;
      Future GetAllCategory()async{
        var response=await http.get("https://**********************.php"
            , headers: {"Accept": "application/json"}
        );
        var jsoBody = response.body;
        var jsoData =json.decode(jsoBody);
        setState(() {
          data= jsoData;
          lodaing=false;
        });
       //   print('cvdddbnm$jsoData');
      }
    @override
      void initState() {
        // TODO: implement initState
        super.initState();
    
        GetAllCategory();
      }
    
      @override
      Widget build(BuildContext context) {
    
    
        return Scaffold(
          body:lodaing?   CircularProgressIndicator() :
    
          GestureDetector(
    
            child: Center(
            child: SizedBox(
              height: 150.0,
              width: 300.0,
    
              child: InkWell(
                onTap: () {
                  
    
                },
    
                child: Carousel(
                //    onImageTap:(index) { print(index.toString()); } ,
                  boxFit: BoxFit.cover,
                  autoplay: true,
                  dotSize: 4.0,
                  dotSpacing: 15.0,
                  dotColor: Colors.lightGreenAccent,
                  indicatorBgPadding: 5.0,
                  dotBgColor: Colors.purple.withOpacity(0.5),
                  borderRadius: true,
                  //   onImageChange: (prev, next) {_selectedIndex = next;}, initialIndex: selectedItem,
                  images:
    
                  data  .map(
                        (list) {
    
                      return Image.network(list['image']);
    
    
                    },
                  ).toList(),
    
    
                ),
    
    
    
              ),
            ),
          ),
          )
    
    
    
    
        );
      }
    }
    class ImageScreen extends StatefulWidget {
      final String url;
      ImageScreen(this.url);
    
      @override
      _MyImageScreen createState() => _MyImageScreen(url);
    }
    
    class _MyImageScreen extends State<ImageScreen> {
      final String url;
      _MyImageScreen(this.url);
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text('ImageScreen'),
            ),
            body: Image.network(url, width: double.infinity));
      }

     

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

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

    لدي استفسار لو تكرمتو 

    قمت بستعمال المكون الاضافي من فلاتر carousel_slider

    المشكله انني حاولت القيام بربطه مع قاعدة بيانات mysql ولكن لم ينجح الامر لدي 

    احتاج الى مساعده في ربطه مع قاعدة بيانات mysql  

    هذا الكود المستعمل بشكل كامل وهو الان شغال 100%100 ولكن الان ليس من قاعدة بيانات ياتي بصور 

    قمت بانشاء قاعدة البيانات وقمت باضافة 3 حقول بشكل التالي

    id  - image - name

    import 'package:carousel_slider/carousel_slider.dart';
    import 'package:flutter/material.dart';
    
    final List<String> imgList = [
      'https://images.unsplash.com/photo-1520342868574-5fa3804e551c?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=6ff92caffcdd63681a35134a6770ed3b&auto=format&fit=crop&w=1951&q=80',
      'https://images.unsplash.com/photo-1522205408450-add114ad53fe?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=368f45b0888aeb0b7b08e3a1084d3ede&auto=format&fit=crop&w=1950&q=80',
      'https://images.unsplash.com/photo-1519125323398-675f0ddb6308?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=94a1e718d89ca60a6337a6008341ca50&auto=format&fit=crop&w=1950&q=80',
      'https://images.unsplash.com/photo-1523205771623-e0faa4d2813d?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=89719a0d55dd05e2deae4120227e6efc&auto=format&fit=crop&w=1953&q=80',
      'https://images.unsplash.com/photo-1508704019882-f9cf40e475b4?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=8c6e5e3aba713b17aa1fe71ab4f0ae5b&auto=format&fit=crop&w=1352&q=80',
      'https://images.unsplash.com/photo-1519985176271-adb1088fa94c?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=a0c8d632e977f94e5d312d9893258f59&auto=format&fit=crop&w=1355&q=80'
    ];
    
    void main() => runApp(CarouselWithIndicator());
    
    
    
    final List child = map<Widget>(
      imgList,
          (index, i) {
        return Container(
          margin: EdgeInsets.all(5.0),
          child: ClipRRect(
            borderRadius: BorderRadius.all(Radius.circular(5.0)),
            child: Stack(children: <Widget>[
              Image.network(i, fit: BoxFit.cover, width: 1000.0),
              Positioned(
                bottom: 0.0,
                left: 0.0,
                right: 0.0,
                child: Container(
                  decoration: BoxDecoration(
                    gradient: LinearGradient(
                      colors: [Color.fromARGB(200, 0, 0, 0), Color.fromARGB(0, 0, 0, 0)],
                      begin: Alignment.bottomCenter,
                      end: Alignment.topCenter,
                    ),
                  ),
                  padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0),
                  child: Text(
                    'No. $index image',
                    style: TextStyle(
                      color: Colors.white,
                      fontSize: 20.0,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              ),
            ]),
          ),
        );
      },
    ).toList();
    
    List<T> map<T>(List list, Function handler) {
      List<T> result = [];
      for (var i = 0; i < list.length; i++) {
        result.add(handler(i, list[i]));
      }
    
      return result;
    }
    
    class CarouselWithIndicator extends StatefulWidget {
      @override
      _CarouselWithIndicatorState createState() => _CarouselWithIndicatorState();
    }
    
    class _CarouselWithIndicatorState extends State<CarouselWithIndicator> {
      int _current = 0;
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'demo',
          home: Scaffold(
            appBar: AppBar(title: Text('Carousel slider demo')),
            body: ListView(
              children: <Widget>[
    
             Column(children: [
              CarouselSlider(
              items: child,
              autoPlay: true,
              enlargeCenterPage: true,
              aspectRatio: 2.0,
              onPageChanged: (index) {
                setState(() {
                  _current = index;
                });
              },
            ),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: map<Widget>(
                  imgList,
                      (index, url) {
                    return Container(
                      width: 8.0,
                      height: 8.0,
                      margin: EdgeInsets.symmetric(vertical: 10.0, horizontal: 2.0),
                      decoration: BoxDecoration(
                          shape: BoxShape.circle,
                          color: _current == index
                              ? Color.fromRGBO(0, 0, 0, 0.9)
                              : Color.fromRGBO(0, 0, 0, 0.4)),
                    );
                  },
                ),
              ),
              ]),
    
              ],
            ),
          ),
        );
    
      }
    }
    

     

     

    ايضا ملف php جاهز لدي وهو يعمل 100%100:

     

    <?php
    
    
    include 'con.php';
    
    
    $sql = "SELECT * FROM SlideShow";
    
    $stmt = $con->prepare($sql); 
    
    
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    
     
    
     
    if ($result) {
     
     
    	 while($row[] = $result->fetch_assoc()) {
    	 
    	 $item = $row;
    	 
    	 $json = json_encode($item, JSON_NUMERIC_CHECK);
    	 
    	 }
     
    } else {
      
       echo "No Data Found.";
    }
     echo $json;
    $con->close();

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

  20. بتاريخ On 4/10/2021 at 22:11 قال بلال زيادة:

    صعب تحديد المشكلة بشكل مباشر، هل ممكن ترفق ملفات المشروع ؟

    اهلا بك اخي

    المشكله ان المشروع كامل وليس جزء محدد

    قمت بالاستغناء عن الامر وستعمال sqlite  وتم حل المشكله 

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

  21. بتاريخ 10 دقائق مضت قال بلال زيادة:

    الحالة الثانية يتم الطباعة بشكل صحيح لأن الطباعة تمت داخل دالة setState , ثم إذا أردت تشغيل الدالة قبل عمل build للواجهة يمكنك استخدام WidgetsBinding بالشكل التالي 

    
    void initState() {
        super.initState();
        WidgetsBinding.instance
            .addPostFrameCallback((_) => mYFucntion(context));
      }

     أو استخدام SchedulerBinding بالشكل التالي 

    
    import 'package:flutter/scheduler.dart';
    SchedulerBinding.instance.addPostFrameCallback((_) => myFunction(context));

     

    مرحبا اخي قمت بعمل الكود بشكل التالي

      @override
      void initState() {
        // TODO: implement initState
        super.initState();
    
        WidgetsBinding.instance.addPostFrameCallback((_) {
          _myPreferences.init().then((value) {
            setState(() {
              _myPreferences = value;
    
              gatNameCUNTRY=_myPreferences.NameCuntry;
    
            });
          });
    
    
        });
        print('testgetname ${gatNameCUNTRY.toString()}');

    ولا تزال النتيجة null 

    هل يوجد حل مختلف؟

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

    انا عامل ملف shared_preferences عام او كلاس منفصل بحيث اني استعمله من اي موقع في مشروعي الكلاس شغال وبشكل ممتاز

    ولكن لدي مشكله مع واحد من البيانات المخزنه فيه كالتالي:

    لو قمت بوضع الكود ليعمل مع بداية تشغيل الصفحه بشكل التالي احصل على null  

      @override
      void initState() {
        // TODO: implement initState
        super.initState();
    
    
    
    
        setState(() {
    
          _myPreferences.init().then((value) {
            setState(() {
              _myPreferences = value;
              gatNameCUNTRY=_myPreferences.NameCuntry;
    
            });
          });
    
        });
        print('testgetname ${gatNameCUNTRY.toString()}');

    ولو قمت بوضعه بشكل التالي لا احصل على اي نتيجه حتى null  لا تظهر :

        gatNameCUNTRY=_myPreferences.NameCuntry;
        print('testgetname ${gatNameCUNTRY.toString()}');

     

     

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

     هذا الشكل احصل على البيانات
    
    
    @override
      void initState() {
        // TODO: implement initState
        super.initState();
    
    
    
    
        setState(() {
    
          _myPreferences.init().then((value) {
            setState(() {
              _myPreferences = value;
              gatNameCUNTRY=_myPreferences.NameCuntry;
              print('testgetname ${gatNameCUNTRY.toString()}');
            });
          });
    
        });

    كيف يمكن حل هذا المشكله ؟ مع العلم انني عاملbottomNavigationBar ولو قمت بتغير الصفحه من هذا الصفحه التي تحتوي على المشكله الى صفحه مختلفه والعوده لها الكود يصبح شغال 100%100 من اي موقع في الصفحه 

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

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

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

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

    احاول طلب بيانات من قاعدة البيانات عن طريق الاتصال لدى ملف PHP 

    المشكله انني احتاج الى ارسال اثنان String في URL 

     

     Future<List<list>> Fetch() async {
        
        apiURL = 'https://**********/list.php?id=' + widget.id.toString();
        var response = await http.get(apiURL);
        var flowers = List<list>();
    
        if (response.statusCode == 200) {
    
          final items = json.decode(response.body).cast<Map<String, dynamic>>();
    
          List<list> listOfFruits = items.map<list>((json) {
    
            return list.fromJson(json);
    
    
          }).toList();
    
          return listOfFruits;
        }
        else {
    
          
          throw Exception('Failed to load data from Server.');
    
    
    
        }
      }

     

    الان انا اقوم بارسال طلب id  ولكن ارغب ايضا بطلب سترينج اضافي  مثال على ذلك  :

    apiURL = 'https://**********/list.php?id=' + widget.id.toString()+state=+widget.state.toString();

    احاول فعل شي مشابه لذلك 

    هل يعلم احد طريقة عمل ذلك؟

×
×
  • أضف...