4US⌚️Tech
رفتن به کانال در Telegram
قناة لنشر كل ما هو جديد في مجال التكنولوجيا والمعلومات والذكاء الاصطناعي.
نمایش بیشتر480
مشترکین
اطلاعاتی وجود ندارد24 ساعت
اطلاعاتی وجود ندارد7 روز
+430 روز
آرشیو پست ها
480
### مميزات StatelessWidget:
1. بسيط وسريع: نظرًا لعدم وجود حالة داخلية، فإن
StatelessWidget يكون أبسط وأسرع في الإنشاء والرسم.
2. إعادة البناء أقل: لا يتم إعادة بنائه إلا إذا تغيرت الخصائص الخارجية، مما يعني أداء أفضل في بعض الحالات.
3. سهولة الصيانة: الكود يكون أبسط وأسهل في الفهم والصيانة لأنه لا يحتاج لإدارة حالة.
### مميزات StatefulWidget:
1. إدارة الحالة الداخلية: يمكنه الاحتفاظ بحالة داخلية وتغييرها بمرور الوقت، مما يتيح تفاعلات ديناميكية أكثر.
2. تحديثات ديناميكية: يمكنه تحديث واجهته بناءً على تفاعلات المستخدم أو الأحداث الأخرى.
3. تفاعل أكبر: مناسب للعناصر التي تتطلب تغييرات تفاعلية مثل الأزرار، النماذج، وأي واجهة تتطلب تحديثات مستمرة.
### متى تستخدم كل نوع:
#### استخدم StatelessWidget عندما:
- لا تحتاج لإدارة حالة داخلية.
- تعرض محتويات ثابتة أو محتويات تتغير فقط عند تغيير الخصائص الخارجية.
- تريد إنشاء عناصر بسيطة وسريعة.
أمثلة:
- النصوص الثابتة.
- الأيقونات.
- الصور الثابتة.
- التخطيطات الثابتة (layout).
#### استخدم StatefulWidget عندما:
- تحتاج لإدارة حالة داخلية.
- تحتاج لتحديث الواجهة بناءً على تفاعلات المستخدم.
- تتعامل مع بيانات ديناميكية تتغير بمرور الوقت.
أمثلة:
- النماذج التي تحتاج إلى إدخال المستخدم وتفاعل.
- الأزرار التي تغير حالتها عند الضغط.
- القوائم التي تتحدث بناءً على بيانات يتم جلبها من الشبكة.
- العناصر التفاعلية التي تعتمد على الزمن مثل العدادات.
باختصار، إذا كانت الواجهة ثابتة أو تتغير فقط بناءً على المدخلات الخارجية، استخدم StatelessWidget. إذا كانت تتطلب تفاعلات ديناميكية أو إدارة حالة، استخدم StatefulWidget.480
في إطار عمل Flutter لتطوير التطبيقات، هناك نوعان رئيسيان من الأدوات (Widgets) هما:
1. StatelessWidget:
- هو ويدجيت لا يحتفظ بأي حالة داخلية (state).
- يتم استخدامه لعرض محتويات ثابتة أو محتويات لا تتغير بمرور الوقت.
- يُعاد بناء هذا الوديجيت فقط عندما يتغير أحد خصائصه الخارجية (props).
- أمثلة على ذلك: النصوص الثابتة، الأيقونات، والصور.
class MyStatelessWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text('Hello, World!');
}
}
2. StatefulWidget:
- هو ويدجيت يحتفظ بحالة داخلية يمكن أن تتغير بمرور الوقت.
- يتم استخدامه لعرض محتويات يمكن أن تتغير نتيجة لتفاعلات المستخدم أو بمرور الوقت.
- يتكون من فئة رئيسية تمثل الوديجيت وفئة ثانوية تمثل الحالة (State) التي تحتفظ بالبيانات وتدير التغييرات.
- يُعاد بناء الوديجيت كلما تغيرت الحالة الداخلية.
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Text('Counter: $_counter'),
ElevatedButton(
onPressed: _incrementCounter,
child: Text('Increment'),
),
],
);
}
}
بالمختصر، الفرق الرئيسي بينهما هو أن StatelessWidget لا يمكنه تغيير حالته بنفسه بعد الإنشاء، بينما StatefulWidget يمكنه تغيير حالته وإعادة بناء نفسه عند الحاجة.480
https://chatgpt.com/search
نصيحة قم بالتسجيل في قائمه الانتظار في محرك البحث الجديد لشات جي بي تي...
480
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('أضف معرض أعمالك'),
),
body: AddPortfolioScreen(),
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(
icon: Icon(Icons.menu),
label: 'القائمة',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'بحث',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'حسابي',
),
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'الرئيسية',
),
],
),
),
);
}
}
class AddPortfolioScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'أضف أفضل 3 أعمال حديثة تظهر بها خبرتك في مجال عملك.',
style: TextStyle(fontSize: 16),
),
SizedBox(height: 16),
PortfolioItem('العمل 1 من 3'),
PortfolioItem('العمل 2 من 3'),
PortfolioItem('العمل 3 من 3'),
SizedBox(height: 16),
Text(
'تأكيد الشروط',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
CheckboxListTile(
title: Text('جميع الأعمال من تنفيذي ولدي الصلاحية لنشرها'),
value: false,
onChanged: (bool? value) {},
),
CheckboxListTile(
title: Text('أعلم أنه سيتم إيقاف حسابي إن استخدمت أعمال تنتهك حقوق الآخرين'),
value: false,
onChanged: (bool? value) {},
),
SizedBox(height: 16),
ElevatedButton(
onPressed: () {},
child: Text('التالي'),
),
],
),
);
}
}
class PortfolioItem extends StatefulWidget {
final String title;
PortfolioItem(this.title);
@override
_PortfolioItemState createState() => _PortfolioItemState();
}
class _PortfolioItemState extends State<PortfolioItem> {
@override
Widget build(BuildContext context) {
return ExpansionTile(
title: Row(
children: [
Icon(Icons.keyboard_arrow_up),
SizedBox(width: 8),
Text(widget.title),
Spacer(),
Icon(Icons.check_circle, color: Colors.green),
],
),
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
TextField(
decoration: InputDecoration(
labelText: 'الاسم',
border: OutlineInputBorder(),
),
),
SizedBox(height: 8),
TextField(
decoration: InputDecoration(
labelText: 'النوع',
border: OutlineInputBorder(),
),
),
],
),
),
],
);
}
}480
هذا هي الشاشة الزرقاء الذي ظهرت في جميع أجهزة ويندوز بعد تحديث الجعة المظلمة....
Microsoft
CrowdStrike
480
الخطأ الذي وقع سببه هو تحديث أمني أدى إلى كارثة تقنية...
شركة مايكروسوفت تعتمد على هذا الشركة ففي التحديثات السحابية
كراودسترايك (CrowdStrike) هي شركة أمن سيبراني أمريكية متخصصة في تقديم خدمات وحلول أمنية للحماية من الهجمات السيبرانية. تأسست الشركة في عام 2011 ومقرها في سانيفال، كاليفورنيا. تقدم كراودسترايك مجموعة متنوعة من الخدمات، بما في ذلك حماية النقاط النهائية، تحليل التهديدات، والاستجابة للحوادث. من أبرز منتجاتها هو منصة Falcon، التي تستخدم الذكاء الاصطناعي والتحليلات السلوكية للكشف عن التهديدات والتصدي لها في الوقت الحقيقي.
480
حدث تقني خطير حول العالم....
الاجراءات والتحذيرات
كانت المشكلات الفنية الأخيرة في أستراليا والتي تتضمن خدمات Microsoft جزءًا من انقطاع عالمي أكبر لتكنولوجيا المعلومات والذي أثر على العديد من الشركات والخدمات. أثر الانقطاع بشكل خاص على وصول المستخدمين إلى خدمات Microsoft 365، مثل Teams وOutlook وOneDrive، وذلك بسبب مشكلة في الشبكة تم تحديدها داخل منطقة أوروبا والشرق الأوسط وأفريقيا (EMEA). تسبب هذا التعطيل في حدوث مشكلات كبيرة في الاتصال، حيث واجه العديد من المستخدمين صعوبات في الوصول إلى حساباتهم وخدماتهم.
أرجعت Microsoft الانقطاع إلى أمر مثير للمشاكل أثناء تحديث روتيني لتوجيه الشبكة واسعة النطاق (WAN)، مما أدى إلى انتشار زمن الوصول للشبكة وانقضاء المهلات [[❞]]( is-what-caused-the-recent-huge-microsoft-365-and-teams-outage) [[❞]]( انقطاع-هنا-آخر-التحديثات/). تعمل الشركة على التخفيف من مثل هذه المشكلات في المستقبل من خلال تنفيذ إرشادات أكثر صرامة لتنفيذ الأوامر وبروتوكولات أفضل لتغيير الشبكة [[❞]]( انقطاع التيار الكهربائي الضخم مؤخرًا في Microsoft 365 وteams).
480
واجهة برمجة تطبيقات
RESTful (RESTful API) هي نوع من واجهات برمجة التطبيقات
(API) التي تستخدم مبادئ هندسة REST (Representational State Transfer).
تم تصميم REST لتمكين الأنظمة من التواصل مع بعضها البعض عبر الإنترنت بطريقة بسيطة وفعالة. تعتمد واجهات RESTful على بروتوكول HTTP وتستخدم مجموعة من الأساليب (HTTP methods) لإجراء العمليات على الموارد. فيما يلي شرح لبعض المفاهيم الأساسية لواجهة برمجة تطبيقات RESTful:
### الأساسيات:
1. الموارد (Resources):
- في REST، يُمثل كل شيء كموارد. يمكن أن تكون الموارد أي كيان أو شيء ترغب في التعامل معه في تطبيقك (مثل المستخدمين، المنتجات، الطلبات).
- يتم التعرف على الموارد باستخدام معرفات فريدة (عادةً عبر عناوين URL).
2. أساليب HTTP (HTTP Methods):
- GET: للحصول على بيانات من الخادم.
- POST: لإنشاء مورد جديد على الخادم.
- PUT: لتحديث مورد موجود بالكامل.
- PATCH: لتحديث مورد موجود جزئيًا.
- DELETE: لحذف مورد من الخادم.
3. عناوين URL (URLs):
- تُستخدم عناوين URL لتعريف مواقع الموارد. على سبيل المثال،
https://example.com/users يمكن أن يكون عنوان URL لمورد يمثل جميع المستخدمين.
- قد يكون عنوان URL لمورد معين مثل https://example.com/users/123 حيث 123 هو معرف المستخدم.
4. الاستجابات (Responses):
- تُرجع الخوادم البيانات بتنسيقات مثل JSON أو XML.
- تتضمن الاستجابات رموز حالة HTTP (HTTP Status Codes) لتحديد نتيجة الطلب، مثل 200 OK للطلبات الناجحة، 404 Not Found عندما لا يتم العثور على المورد، و 500 Internal Server Error للأخطاء على الخادم.
### مثال على RESTful API:
افترض أنك تريد إنشاء واجهة برمجة تطبيقات لإدارة المستخدمين في تطبيقك. يمكنك تعريف عدة نقاط نهاية (endpoints) باستخدام REST:
1. الحصول على جميع المستخدمين:
GET /users2. الحصول على مستخدم معين بواسطة معرفه:
GET /users/{id}
3. إنشاء مستخدم جديد:
POST /users4. تحديث مستخدم موجود بالكامل:
PUT /users/{id}
5. تحديث مستخدم موجود جزئيًا:
PATCH /users/{id}
6. حذف مستخدم:
DELETE /users/{id}
### مزايا RESTful API:
- البساطة: سهل الفهم والاستخدام، لأنه يعتمد على بروتوكول HTTP البسيط.
- المرونة: يمكن استخدامه مع أي لغة برمجة تدعم بروتوكول HTTP.
- القابلية للتوسع: يمكن توسيع النظام بسهولة بإضافة موارد جديدة.
# استخدامات RESTful API:
تُستخدم واجهات برمجة التطبيقات RESTful على نطاق واسع في تطوير تطبيقات الويب والجوال، وتكامل الأنظمة، والخدمات السحابية، حيث توفر طريقة موحدة للتواصل بين الأنظمة المختلفة.480
لعمل مشروع متجر إلكتروني باستخدام إطار Flutter للواجهة الأمامية وإطار Laravel للواجهة الخلفية، ستحتاج إلى الأمور التالية:
### المتطلبات العامة:
1. بيئة تطوير مناسبة:
- جهاز كمبيوتر مثبت عليه جميع الأدوات اللازمة.
- اتصال جيد بالإنترنت.
2. مهارات برمجية:
- معرفة بلغة Dart (لـ Flutter).
- معرفة بلغة PHP (لـ Laravel).
- فهم جيد لمفاهيم تطوير التطبيقات والأطر البرمجية.
### المتطلبات الفنية:
#### الواجهة الأمامية (Flutter):
1. بيئة تطوير Flutter:
- تثبيت Flutter SDK.
- محرر نصوص مثل Visual Studio Code أو Android Studio.
2. مكونات واجهة المستخدم:
- تصميم الواجهات باستخدام Flutter Widgets.
- مكتبات لإدارة الحالة مثل Provider أو Bloc.
- مكتبات لواجهة المستخدم مثل Flutter Material وCupertino.
3. التعامل مع البيانات:
- الاتصال بواجهة برمجة التطبيقات (API) باستخدام Dio أو Http.
- إدارة الجلسات (Session) والتوثيق (Authentication).
4. التصميم والتخطيط:
- تصميم واجهة مستخدم جذابة وسهلة الاستخدام.
- مراعاة تجربة المستخدم (UX).
#### الواجهة الخلفية (Laravel):
1. بيئة تطوير Laravel:
- تثبيت Composer لإدارة الحزم.
- تثبيت Laravel باستخدام Composer.
- قاعدة بيانات مثل MySQL أو PostgreSQL.
2. إعداد المشروع:
- إعداد هيكل المشروع وقاعدة البيانات.
- إنشاء الموديلات (Models) والمهاجرات (Migrations).
3. تطوير API:
- بناء واجهة برمجة تطبيقات RESTful.
- إعداد المصادقة باستخدام JWT أو Passport.
4. التعامل مع البيانات:
- كتابة منطق الأعمال (Business Logic).
- إدارة البيانات باستخدام Eloquent ORM.
5. التكامل مع Flutter:
- تأكيد أن الـ API تعمل بشكل صحيح.
- اختبار الاتصالات بين Flutter وLaravel.
### المتطلبات الأخرى:
1. الخوادم والاستضافة:
- اختيار خدمة استضافة تدعم PHP وLaravel.
- إعداد بيئة الخادم وضمان الأمان.
2. الشهادات الأمنية:
- الحصول على شهادات SSL لتأمين الاتصالات.
3. إدارة المشروع:
- أدوات لإدارة المشروع مثل Git.
- أدوات للتواصل مثل Slack أو Trello.
480
يارب في يوم الجمعة إجعل لنا نصيباً من الرحَمة و المَغفرة والفرج والسعادة والرزق والهداية
اللهم صل وسلم وبارك ع خير البريه وشفيعنا يوم القيامه نبينا محمد ﷺ
480
عمل اشعار للمستخدم بأي تحديثات أو تنزيل مميزات في شاشة التطبيق بحيث يظهر الاشعار راس الشاشة
وجعل الإشعار يظهر تلقائيًا عند فتح الشاشة، يمكنك استدعاء دالة
showNotification داخل دالة initState في StatefulWidget. :
import 'package:flutter/material.dart';
import 'package:overlay_support/overlay_support.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return OverlaySupport.global(
child: MaterialApp(
home: MyHomePage(),
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => showNotification(context));
}
void showNotification(BuildContext context) {
showSimpleNotification(
Text("This is a floating notification"),
background: Colors.blue,
autoDismiss: true,
trailing: IconButton(
icon: Icon(Icons.close, color: Colors.white),
onPressed: () {
OverlaySupportEntry.of(context)?.dismiss();
},
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Floating Notification Demo"),
),
body: Center(
child: Text("Welcome to the app!"),
),
);
}
}480
void main() {
Person person = Person();
person.display();
}
**صيغة المنشئ مع المعلمات:**dart class ClassName { String name; int age; ClassName(this.name, this.age); }
**مثال على المنشئ مع المعلمات:**dart class Person { String name; int age; Person(this.name, this.age); }
**منشئ مع المعلمات المسماة في دارت:**dart class Person { String name; int age; Person({required this.name, required this.age}); }
**منشئ مع المعلمات الافتراضية في دارت:**dart class Person { String name; int age; Person({this.name = 'Unknown', this.age = 0}); }
**المنشئ المسمي في دارت:**dart class ClassName { String name; ClassName.namedConstructor(this.name); }
`480
1. البرمجة الكائنية (OOP)
*ما هي البرمجة الكائنية؟*
البرمجة الكائنية (Object-Oriented Programming - OOP) هي نمط من أنماط البرمجة يعتمد على مفهوم "الكائنات" التي تحتوي على بيانات في شكل خصائص (أو صفات) وطرق (وظائف).
ما هي مزايا البرمجة الكائنية؟
- إعادة استخدام الكود: يمكنك إعادة استخدام الفئات في برامج مختلفة.
- المرونة: يمكنك تعديل الكود بسهولة بفضل استخدام الوراثة وتعدد الأشكال.
- تنظيم أفضل للكود: تسهيل الصيانة والتطوير بفضل تقسيم البرنامج إلى كائنات.
ما هي ميزات البرمجة الكائنية؟
- التغليف (Encapsulation)
- الوراثة (Inheritance)
- تعدد الأشكال (Polymorphism)
- التجريد (Abstraction)
على ماذا تعتمد البرمجة الكائنية؟
تعتمد البرمجة الكائنية على الكائنات والفئات.
#.2. الفئات في دارت (Classes in Dart)
ما هي الفئة في دارت؟
الفئة في دارت هي قالب يمكن من خلاله إنشاء كائنات، وهي تحتوي على بيانات وسلوكيات.
صيغة الفئة في دارت:
class ClassName {
// خصائص
int property;
// منشئ
ClassName(this.property);
// طرق
void method() {
// تنفيذ الطريقة
}
}
مم تتكون جسم الفئة؟
- الخصائص: وهي المتغيرات الموجودة داخل الفئة.
- المنشئات: وهي طرق خاصة تستخدم لإنشاء كائنات من الفئة.
- الطرق: وهي الوظائف التي تحدد سلوك الكائن.
3. إعلان الفئات والأشياء في دارت
**إعلان فئة Person في دارت وإضافة بعض الخصائص وطباعة القيم:**
class Person {
String name;
int age;
Person(this.name, this.age);
void displayInfo() {
print('Name: $name, Age: $age');
}
}
void main() {
Person person = Person('Ali', 30);
person.displayInfo();
}
**إعلان فئة Area في دارت وإضافة طريقة لحساب المساحة:**
class Area {
double length;
double width;
Area(this.length, this.width);
double calculateArea() {
return length * width;
}
}
void main() {
Area rectangle = Area(5.0, 3.0);
print('Area: ${rectangle.calculateArea()}');
}
**ما هو الكائن في دارت؟ أعطني بعض الأمثلة (بدون كود):**
الكائن هو نسخة من الفئة. على سبيل المثال، إذا كانت هناك فئة Car، فإن الكائنات يمكن أن تكون car1 وcar2، وكل واحد منها سيكون له خصائص وقيما هي صيغة الكائن؟غة الكائن؟**
لإنشاء كائن من فئة في دارت، تستخدم الكلمة المفتاحية new (اختيارية) مع اسم الفئة.
ClassName objectName = ClassName();
**إعلان كائن في دارت: إنشاء فئة وإنشاء كائن منها مع مثال:**
class Camera {
String name;
String color;
int megapixel;
Camera(this.name, this.color, this.megapixel);
void display() {
print('Name: $name, Color: $color, Megapixel: $megapixel');
}
}
void main() {
Camera camera1 = Camera('Nikon', 'Black', 24);
Camera camera2 = Camera('Canon', 'Red', 30);
camera1.display();
camera2.display();
}
4. المنشئ في دارما هو المنشئ في دارت؟لمنشئ في دارت؟**
المنشئ هو طريقة خاصة تستخدم لتهيئة الكائناكيف تعين قيم خصائص الفئة يدويًا؟ الفئة يدويًا؟**
يمكن تعيين القيم يدويًا عن طريق الوصول المباشر إلى الخصائص بعد إنشاء الكائن.
Person person = Person('Ali', 30);
person.name = 'Ahmed';
person.age = 25;
**هل يحتوي المنشئ على نوع إرجاع؟**
لا يحتوي المنشئ على نوع إرجاع، حتى void.
**كيف تعلن عن المنشئ في دارت؟**
تعلن عن المنشئ باستخدام اسم الفئة.
class ClassName {
ClassName() {
// الكود الخاص بالتهيئة
}
}
**كتابة منشئ في سطر واحد:**
class ClassName {
String name;
ClassName(this.name);
}
**منشئ مع معلمات اختيارية:**
class ClassName {
String name;
int age;
ClassName(this.name, [this.age = 0]);
}
**منشئ مع معلمات مسماة:**
class ClassName {
String name;
int age;
ClassName({required this.name, this.age = 0});
}
**منشئ مع قيم افتراضية:**
class ClassName {
String name;
int age;
ClassName(this.name, {this.age = 18});
}
**استخدام المنشئ الافتراضي:**
المنشئ الافتراضي هو منشئ بدون معلمات.
class ClassName {
ClassName() {
// تهيئة القيم الافتراضية
}
}
**محاولة إنشاء فئة Person مع خصائص: name و planet:**
`dart
class Person {
String name;
String planet;
Person({this.name = 'Your Name', this.planet = 'Earth'});
void display() {
print('Name: $name, Planet: $planet');
}
}