-
المساهمات
787 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
2
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
أجوبة بواسطة Flutter Dev
-
-
بتاريخ 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
البيانات التي يرجعها الاستعلام الان توجد بيانات ليست مرتبطه بالموضوع
كل البيانات المتوفره في الجدول الان
وهذا الكود المستعمل كامل للستعلام اعلاه
<?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(); ?>
====================
مرحبا اخي بلال @بلال زيادة
تحيه طيبه لك
ملف المشروع يتكون من ملف 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
وهذا صوره للبيانات المتوفره في قاعدة البيانات
افدني اذا كانت لديك فكره عن سبب المشكله بارك الله فيك
-
بتاريخ 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); } ?>
-
بتاريخ 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); } ?>
أنظر أخى لهذا الكود وتلك الصورة لرؤية الناتج من هذا الكود
اهلا اخي
بنسبة الى id المستخدمين انا احصل عليه من خارج الفورم يعني مش ثابت دائما على 1 او 2 مجرد مثال
قمت بارفاق صور انظر هذا الجدول من قاعدة البيانات
احصل عليهم من خلال
$topic_id= $_GET["topic_id"]; $user_Received_id=$_GET["user_Received_id"]; $user_send_id=$_GET["user_send_id"];
-
بتاريخ 14 دقائق مضت قال Adnane Kadri:
طبعا قد يعتمد هذا على نوع البيانات المدرجة بقاعدة البيانات فالظاهر أن user_Received_id و user_send_id عبارة عن strings او نوع اخر فتأكد أن تقوم بتمرير النوع الصحيح
هل يمكن الاطلاع على بنية بيانات الجدول بالphpmyadmin ؟
مرفق لك صوره اخي
بتاريخ 14 دقائق مضت قال Adnane Kadri:طبعا قد يعتمد هذا على نوع البيانات المدرجة بقاعدة البيانات فالظاهر أن user_Received_id و user_send_id عبارة عن strings او نوع اخر فتأكد أن تقوم بتمرير النوع الصحيح
هل يمكن الاطلاع على بنية بيانات الجدول بالphpmyadmin ؟
مرفق لك اخي ايضا صورة للبيانات المدرجه فيه
-
بتاريخ 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 = ?
اهلا بك عزيزي
قمت بتطبيق واستبدال الارقام ب علامة ?
حتى يتم تنفيذ الشرط ولكن الكود لم يرجع لي اي قيمة لم يرجع بيانات
-
لدي الجدول التالي وهو يحتوي على البيانات المدرجه :
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 واحد ليس مختلف
كيف يمكن عمل ذلك بطريقة الصحيحه ما هو الخطاء في الكود اعلاه لدي ياليت من لديه فكره يفيدنا جزاكم الله الف خير
-
بتاريخ 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
-
-
اعمل على فكرة اول تجربه لي من خلالها ..
ما احاول القيام به كالتالي:انشاء رسائل خاصة بين الاعضاء.
على سبيل المثال لدي مستخدم اسمه احمد ومستخدم اسمه محمد
محمد قام بنشر موضوع بعنوان : كيف نتعلم البرمجة .
ياتي احمد ويقوم بتواصل لدى محمد عن طريق الرسائل الخاصة
اول رسالة : كم احتاج وقت حتى اتعلم البرمجة؟
الرسالة الثانية : هل يمكنني التعلم خلال شهر واحد؟
الرسالة الثالثه: ما الفرق بين flutter و java ?
بحيث اصبح احمد يمتلك في جدول البيانات او قاعدة MySQL اكثر من سجل تم توجيهم الى محمد وما يربط هذا السجلات هو id واحد الخاص ب موضوع محمد بمعنى كل الاسطر التي يمتلكها احمد الان تمتلك id واحد حتى ولو اختلف محتوى المحادثه.
كيف اقوم بجلب اول رسالة قام بارسالها احمد الى محمد وعرضها في list مع امكانية لو محمد رغب بشاهدة باقي المحتوى يقوم بضغط على الرسالة الظاهره ثم ينتقل الى صفحه مختلفه ليتم عرض المحادثه كامله من خلالها ؟
ايضا لو كان في مستخدمين مختلفين غير احمد وقام بارسال رسائل مختلفه الى محمد على نفس الموضوع
-
1
-
-
بتاريخ 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.
كل الشكر الغالي لقد نجح الامر
جزاك الله الف خير يا رب
-
قمت بستعمال كود للقيام بعمليات ممتابعه بحيث اني اطلب من المستخدم انجاز مهمة قبل الانتقال الى المهمة التاليه
الكود شغال ماشي مشكله ولكن احتاج الى تغير اسم button
بمعنى الان املك زر باسم Continue
ارغب بتغيره على سبيل المثال الى GO او اي كلمة ثانية مختلفه ولكني لم اجد طريقة للقيام بذلك
صورة لتوضيح المشكله :
وهذا الكود المستعمل كامل:
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; } }
-
قمت بستعمال الباكج
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(() { }); }, );
-
كل الشكر لك اخي العزيز نجح الامر
-
بتاريخ 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);
مرحبا اخي اعتذر على تاخر الرد
لا يزال الخطاء متواجد في السطر
The argument type 'List<ImageModel>' can't be assigned to the parameter type 'ImageModel'.
-
بتاريخ 4 دقائق مضت قال بلال زيادة:
يبدو أنك اخطأت في وضع بعض الأكواد, هل ممكن ترفق كود الملف كاملاً بشكل مضغوط؟
تم ارفق المشروع بشكل مضغوط
ربي يعطيك الف عافيه
-
اهلا اخي @بلال زيادة
قمت باضافته بشكل التالي:
class _HomePageState extends State<Demo> { String SelectIdCategory; bool lodaing=true; List data; List<ImageModel> imageModel;
بدون finalلني لما وضعت فاينل احصل على خطاء في imageModel
الان اصبح ياتيني خطاء في index
-
مرحبا اخي شاكر لك ردك اخوي @بلال زيادة
قمت بتطبيق ما سبق وذكرته واصبح الكود كامل التطبيق بشكل التالي :
طبعا انا وضعت الكود في صفحه واحده ليسهل العمل الان بعدها ساقوم بتقسميه لا توجد مشكله
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, }; }
لا اعلم اذا كانت توجد مشكله في تطبيقي لكلامك ولكن ظهر المشكله التاليه فقط في الكود صوره لتوضيح :
Undefined name 'imageModel'.
-
بتاريخ 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(),
-
بتاريخ الآن قال Wael Aljamal:
مرحبا مروان،
نعم نستطيع معرفة الصورة المنقولة و الأفضل أن تستعمل shared_preference فهي الأسهل و الأسرع و لمنع تكرار الصور استخدم المكتية cached_network_image
أعتقد أن الأفضل من تخزين الصور ك imgList List احفظهم بصيغة جيسون بحيث تحوي على ال id و الرابط وأيضا يمكنك تحميلها و تخزينها في shared_preference و دائما الوصول للصورة عن طريق المعرف ومن خلال غرض json نقراء الرابط و نطلبه من خلال cached_network_image ليتم جلب الصور بسرعة
مرحبا اخي
شاكر لك ملاحظاتك الغالي
بس ياليت لو تكرمت اذا فيه اكواد لعمل هذا حقيقه الامر صعب علي قليلا بدون بعض الاكواد
ياليت اذا فيه مثال على ذلك
-
مرحبا اخي @بلال زيادة
شكرا على ردك
ولكن لم يكن قصدي بشكل الذي تفضلت به
انظر لقد قمت بتعديل الكود واصبح يعمل بشكل تمام ولكن توجد مشكله مختلفه
كيف يمكنني نقل الصوره عند الضغط عليها الى صفحه مختلفه؟ بحيث يكون لو المستخدم نقل على الصوره الصوره سوف تنتقل الى صفحه مختلفه ؟
او هل يمكن نقل ال 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)); }
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
لدي استفسار لو تكرمتو
قمت بستعمال المكون الاضافي من فلاتر 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();
فقط مشكلتي في كود لفلاتر ياليت من لديه خبره يساعدنا ولكم جزيل الشكر
-
بتاريخ On 4/10/2021 at 22:11 قال بلال زيادة:
صعب تحديد المشكلة بشكل مباشر، هل ممكن ترفق ملفات المشروع ؟
اهلا بك اخي
المشكله ان المشروع كامل وليس جزء محدد
قمت بالاستغناء عن الامر وستعمال sqlite وتم حل المشكله
لك كل الشكر اخي العزيز
-
بتاريخ 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
-
-
السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع
انا عامل ملف 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 من اي موقع في الصفحه
لا اعلم كيف ولكن مما فهمته ان الكود لا يعمل في بداية اقلاع الصفحه ويحتاج ان انتقل الى صفحه مختلفه ثم اعود لها حتى يعمل
هل يعمل احد حل لهذا المشكله ؟
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
احاول طلب بيانات من قاعدة البيانات عن طريق الاتصال لدى ملف 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();
احاول فعل شي مشابه لذلك
هل يعلم احد طريقة عمل ذلك؟
كيفية استعمال بيانات من نوع bool في shared_preferences في flutter
في جافا سكريبت
نشر
لدي كلاس shared_preferences منفصل بحيث انني استطيع استدعاه من صفحات مختلفه وتخزين فيه البيانات من حيث يتطلب ذلك كالتالي:
احتاج الى اضافة بيانات مختلفه فيه ليست من نوع Stirng
احتاج الى اضافة setBool و getBool
بحيث انني ارغب بعمل تحقق من المستخدم اذا كان عامل تسجيل دخول او لا
كيف يمكن عمل ذلك في كلاس shared_preferences
مع العلم انني ساقوم بتخزين البيانات من صفحه مختلفه