4US⌚️Tech
Open in Telegram
قناة لنشر كل ما هو جديد في مجال التكنولوجيا والمعلومات والذكاء الاصطناعي.
Show more480
Subscribers
No data24 hours
No data7 days
+430 days
Posts Archive
480
كود يقوم بإنشاء اشعار للتطبيق وعند النقر على زر ارسال رساله يتم إرسالها إلى قاعدة البيانات في فايربيس
import 'package:awesome_notifications/awesome_notifications.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
// Create a Cloud Firestore instance
final FirebaseFirestore firestore = FirebaseFirestore.instance;
// Create a notification action button
NotificationActionButton actionButton = NotificationActionButton(
key: 'NOW',
label: 'Send Message',
actionType: ActionType.Callback,
callback: (Notification notification) async {
// Send a message to the database
await firestore.collection('messages').add({
'message': 'Hello, world!',
});
},
);
// Create a notification
Notification notification = Notification(
title: 'New Notification',
body: 'This is a new notification.',
actions: [actionButton],
);
// Schedule the notification
AwesomeNotifications().schedule(notification);
480
في هذا السطر يتم ارسال الاشعار حتى ولو الجهاز في أي حالة وحتى لو كان التطبيق مغلق..
allowWhileIdle: determines whether the notification will be sent even when the device is in a critical situation, such as low battery.
👇👇👇
allowWhileIdle:true,
480
لتكرار الاشعار كل خمس ساعات
scheduleNewNotification(
hoursFromNow: 5,
heroThumbUrl: 'https://example.com/image.png',
username: 'John Doe',
title: 'New Notification',
msg: 'This is a new notification.',
repeatNotif: true,
);
480
شرح الكود:
يوفر هذا الكود وظيفتين:
scheduleNewNotification و myNotifyScheduleInHours.
الدالة scheduleNewNotification:
* تحقق من إذن الإشعارات.
* إذا لم يتم السماح بالإشعارات، فستعرض سببًا منطقيًا للإشعارات.
* إذا سمح بالإشعارات، فستستدعي الدالة myNotifyScheduleInHours لجدولة إشعار جديد.
الدالة myNotifyScheduleInHours:
* تأخذ معلمات مختلفة لجدولة إشعار جديد، بما في ذلك:
* hoursFromNow: عدد الساعات من الآن لجدولة الإشعار.
* heroThumbUrl: عنوان URL للصورة المصغرة للبطل للإشعار.
* username: اسم المستخدم للإشعار.
* title: عنوان الإشعار.
* msg: رسالة الإشعار.
* repeatNotif: ما إذا كان سيتم تكرار الإشعار أم لا.
* تستخدم الدالة NotificationCalendar لجدولة الإشعار في وقت محدد في المستقبل.
* تستخدم الدالة NotificationContent لإنشاء محتوى الإشعار، بما في ذلك العنوان والرسالة والصورة المصغرة.
* تستخدم الدالة NotificationActionButton لإنشاء أزرار إجراء للإشعار.
كيفية استخدام الكود:
لاستخدام هذا الكود، يمكنك استدعاء الدالة scheduleNewNotification لجدولة إشعار جديد. سيقوم هذا بفحص إذن الإشعارات وعرض سبب منطقي إذا لم يتم السماح بالإشعارات. إذا سمح بالإشعارات، فستقوم بجدولة إشعار جديد باستخدام المعلمات المحددة.
مثال:
scheduleNewNotification(
hoursFromNow: 5,
heroThumbUrl: 'https://example.com/image.png',
username: 'John Doe',
title: 'New Notification',
msg: 'This is a new notification.',
repeatNotif: false,
);
سيؤدي هذا المثال إلى جدولة إشعار جديد بعد 5 ساعات من الآن، باستخدام الصورة المصغرة المحددة واسم المستخدم والعنوان والرسالة. لن يتم تكرار الإشعار. الإشعار.480
Future<void> scheduleNewNotification() async {
bool isAllowed = await AwesomeNotifications().isNotificationAllowed();
if (!isAllowed) isAllowed = await displayNotificationRationale();
if (!isAllowed) return;
await myNotifyScheduleInHours(
title: 'test',
msg: 'test message',
heroThumbUrl:
'https://storage.googleapis.com/cms-storage-bucket/d406c736e7c4c57f5f61.png',
hoursFromNow: 5,
username: 'test user',
repeatNotif: false);
}
static Future<void> resetBadgeCounter() async {
await AwesomeNotifications().resetGlobalBadge();
}
static Future<void> cancelNotifications() async {
await AwesomeNotifications().cancelAll();
}
}
Future<void> myNotifyScheduleInHours({
required int hoursFromNow, required String heroThumbUrl, required String username, required String title, required String msg, bool repeatNotif = false, }) async { var nowDate = DateTime.now().add(Duration(hours: hoursFromNow, seconds: 5)); await AwesomeNotifications().createNotification( schedule: NotificationCalendar( //weekday: nowDate.day, hour: nowDate.hour, minute: 0, second: nowDate.second, repeats: repeatNotif, //allowWhileIdle: true, ), // schedule: NotificationCalendar.fromDate( // date: DateTime.now().add(const Duration(seconds: 10))), content: NotificationContent( id: -1, channelKey: 'basic_channel', title: '${Emojis.food_bowl_with_spoon} $title', body: '$username, $msg', bigPicture: heroThumbUrl, notificationLayout: NotificationLayout.BigPicture, //actionType : ActionType.DismissAction, color: Colors.black, backgroundColor: Colors.black, // customSound: 'resource://raw/notif', payload: {'actPag': 'myAct', 'actType': 'food', 'username': username}, ), actionButtons: [ NotificationActionButton( key: 'NOW', label: 'btnAct1', ), NotificationActionButton( key: 'LATER', label: 'btnAct2', ), ], ); }480
لجدولة الاشعارات وتشغيل الأشعارات حتى ولو التطبيق مقفل
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example">
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
<application>
...
</application>
</manifest>
<manifest
480
import 'package:awesome_notifications/awesome_notifications.dart';
void main() async {
// إنشاء دالة تحقق الشرط
bool checkCondition() {
// تحقق من الشرط هنا
// على سبيل المثال، تحقق مما إذا كان الوقت الحالي بين الساعة 10 صباحًا و 5 مساءً
var now = DateTime.now();
return now.hour >= 10 && now.hour < 17;
}
// إنشاء إشعار
Notification notification = Notification(
id: 1,
title: 'إشعار مشروط',
body: 'هذا إشعار مشروط.',
);
// جدولة الإشعار
await AwesomeNotifications().schedule(
notification: notification,
schedule: NotificationSchedule(
timeZone: await AwesomeNotifications().getLocalTimeZoneIdentifier(),
preciseTrigger: DateTime.now().add(Duration(seconds: 10)),
checkCondition: checkCondition,
),
);
}
480
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
const AndroidNotificationChannel channel = AndroidNotificationChannel(
'high_importance_channel', // id
'High Importance Notifications', // title
importance: Importance.high,
);
flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
?.createNotificationChannel(channel);
void main() async {
// استمع إلى التغييرات في قاعدة بيانات فايربيس
FirebaseFirestore.instance.collection('quotes').snapshots().listen((snapshot) {
// احصل على عنوان السعر الجديد
String newQuote = snapshot.docs.first.data()['quote'];
// جدولة الإشعار المحلي
flutterLocalNotificationsPlugin.show(
0,
'اقتباس جديد',
newQuote,
NotificationDetails(
android: AndroidNotificationDetails(
channel.id,
channel.name,
icon: 'ic_launcher',
),
),
);
});
}
480
بعض الأوامر المفيدة في Flutter التي يمكن أن تساعدك في تطوير تطبيقات Flutter بشكل أفضل:
1. flutter create: يستخدم لإنشاء مشروع جديد في Flutter. يمكنك تحديد اسم المشروع والمسار الذي ترغب في إنشائه فيه.
2. flutter run: يستخدم لتشغيل تطبيق Flutter الخاص بك على المحاكي أو الجهاز المتصل. يقوم بتنفيذ التطبيق وعرضه على الشاشة.
3. flutter build: يستخدم لبناء تطبيق Flutter الخاص بك لنشره. يمكنك تحديد الهدف الذي ترغب في بناءه مثل APK أو AOT مُجمَّع للأداء المحسَّن.
4. flutter doctor: يستخدم لفحص وتشخيص بيئة التطوير الخاصة بك والتأكد من وجود المكونات اللازمة لتشغيل تطبيقات Flutter بنجاح.
5. flutter packages get: يستخدم لتثبيت وتحديث حزم الاعتماد (dependencies) المذكورة في ملف
pubspec.yaml الخاص بمشروعك.
6. flutter upgrade: يستخدم لترقية إصدار Flutter الخاص بك إلى الإصدار الأحدث المتاح.
7. flutter clean: يستخدم لحذف مجلدات البناء والملفات المؤقتة في مشروعك. يمكن استخدامه عند حدوث مشاكل في عملية البناء.
8. flutter test: يستخدم لتشغيل وحدات الاختبار (unit tests) الخاصة بتطبيقك والتحقق من صحة سلوك المكونات والدوال المختلفة.
9. flutter analyze: يستخدم لتحليل الكود الخاص بك والتحقق من وجود أخطاء أو تحذيرات بناءً على معايير التحليل الساكنة.
10. flutter format: يستخدم لتنسيق الكود الخاص بك وفقًا لإرشادات التنسيق المحددة في Flutter.
هذه بعض الأوامر الأساسية والمفيدة في Flutter. هناك المزيد من الأوامر المتاحة للتعامل مع مشاريع Flutter، ويمكنك استكشاف المزيد من الوثائق الرسمية لـ Flutter لمزيد من المعلومات والتفاصيل حول هذه الأوامر وغيرها.
https://t.me/abunash_tech480
Layout في Flutter يشير إلى ترتيب وتنظيم العناصر والواجهات الرسومية (UI) على الشاشة. يتيح لك Flutter استخدام مجموعة متنوعة من أدوات التخطيط لتحقيق تنظيم وتنسيق مرن ومتناسق لعناصر واجهة المستخدم الخاصة بك.
في Flutter، يمكنك استخدام عدة أدوات التخطيط لتحقيق التنسيق والترتيب المطلوب لعناصر واجهة المستخدم. هناك بعض الأدوات الشائعة للتخطيط في Flutter:
1. Container: وهو عنصر تخطيط بسيط يُستخدم لتحديد وتنسيق العناصر الفردية على الشاشة. يمكنك تعيين الخصائص مثل الحجم واللون والهامش والحاشية وغيرها.
2. Row و Column: تُستخدم لتخطيط العناصر في صفوف أو أعمدة على التوالي. يمكنك تحديد ترتيب وتنسيق العناصر داخل الصف أو العمود باستخدام خصائص مثل توزيع المساحة والمحور الرئيسي والمحور الطولي.
3. Stack: يُستخدم لترتيب العناصر في طبقات متعددة فوق بعضها البعض. يمكنك تحديد ترتيب العناصر ومواضعها بواسطة خصائص مثل التحويلات والمركز والتدوير.
4. ListView: يُستخدم لعرض قوائم طويلة أو قوائم تحتوي على عدد كبير من العناصر. يمكن أن يكون العنصر المعروض في القائمة متغيرًا ويتم تحميله ديناميكيًا عندما يصبح مرئيًا.
5. Grid: يُستخدم لتنظيم العناصر في شبكة من الصفوف والأعمدة. يمكنك تحديد عدد العناصر في كل صف وعدد الأعمدة وتنسيق العناصر داخل الشبكة.
هذه هي بعض الأدوات الأساسية في Flutter لتنظيم وترتيب عناصر واجهة المستخدم. يمكنك استخدام هذه الأدوات بشكل فردي أو مجتمعة لإنشاء تخطيطات معقدة ومرنة تتناسب مع احتياجات تطبيقك.
https://t.me/abunash_tech
480
يمكنك تعريف عدة أنواع من المتغيرات وفقًا لنوع البيانات التي يحتويها كل متغير في إطار العمل Flutter.
هناك أنواع المتغيرات الأساسية التالية في Flutter:
1. الأعداد الصحيحة (Integers): تُستخدم لتخزين القيم الصحيحة بدون أجزاء عشرية. مثال:
int age = 25;
2. الأعداد العشرية (Doubles): تُستخدم لتخزين القيم العشرية التي تحتوي على أجزاء عشرية. مثال:
double pi = 3.14;
3. السلاسل النصية (Strings): تُستخدم لتخزين النصوص والسلاسل الحرفية. مثال:
String name = 'John';
4. القيم البولية (Booleans): تُستخدم لتخزين القيم البولية الحقيقة (صحيح أو خطأ). مثال:
bool isRaining = false;
5. القوائم (Lists): تُستخدم لتخزين مجموعة من القيم في ترتيب معين. يمكن أن تحتوي قوائم Flutter على عناصر من أي نوع بيانات. مثال:
List<String> colors = ['red', 'green', 'blue'];
6. المجموعات (Sets): تُستخدم لتخزين مجموعة فريدة من القيم بدون ترتيب محدد. يتم التأكد من أن القيم في المجموعة لا تتكرر. مثال:
Set<int> numbers = {1, 2, 3};
7. الخرائط (Maps): تُستخدم لتخزين مجموعة من القيم متعلقة بمفتاح. يتم الوصول إلى القيم باستخدام المفتاح الذي يتطابق معه. مثال:
Map<String, dynamic> person = {
'name': 'John',
'age': 25,
'isStudent': true,
};
هذه هي بعض الأنواع الأساسية للمتغيرات في Flutter. يمكنك أيضًا تعريف أنواع متغيرات مخصصة باستخدام الـ"classes" والـ"enums" في Flutter.