feat: add device authentication, place gates support, and PiP navigation features

This commit is contained in:
Hamza-Ayed
2026-09-19 12:34:26 +03:00
parent 55830beee8
commit ce896df30a
86 changed files with 3414 additions and 341 deletions
@@ -18,20 +18,20 @@ class _OnboardingViewState extends State<OnboardingView> {
final List<Map<String, dynamic>> _slides = [
{
'icon': Icons.public_rounded,
'title': 'خريطة بلدنا تعمل عندنا',
'desc': 'أول بنية خرائط سيادية أردنية متكاملة؛ ننهي التبعية لمزودي الخرائط الأجانب ونحمي بيانات حركة الوطن.',
'badge': 'سيادة وطنية',
'title': 'سيادة مكانية وملاحة عربية مستقلة',
'desc': 'بنية خرائط وملاحة سيادية متكاملة؛ ننهي التبعية لمزودي الخرائط الأجانب ونخدم الأسواق الإقليمية المحرومة من خرائط موثوقة.',
'badge': 'سيادة إقليمية',
},
{
'icon': Icons.alt_route_rounded,
'title': 'توجيه محلي فائق السرعة',
'desc': 'محرك ملاحة متطور يفهم طبيعة شوارع عمّان والمحافظات، بزمن استجابة أقل من 40 ملي ثانية.',
'desc': 'محرك ملاحة متطور يفهم طبيعة شبكات الطرق والمدن العربية، بزمن استجابة فائق ودقة توجيه عالية.',
'badge': 'أداء فائق',
},
{
'icon': Icons.security_rounded,
'title': 'أمان وخصوصية مطلقة',
'desc': 'لا تتبع عشوائي ولا تسريب للمعلومات، مع جاهزية كاملة للعمل عند انقطاع الإنترنت الدولي.',
'title': 'أمان واستقلالية مطلقة',
'desc': 'لا تتبع عشوائي ولا ارتهان لعقوبات أو واجهات أجنبية، مع جاهزية كاملة للعمل عند انقطاع الإنترنت الدولي.',
'badge': 'حماية مشفرة',
},
];
@@ -101,69 +101,74 @@ class _OnboardingViewState extends State<OnboardingView> {
itemBuilder: (context, index) {
final slide = _slides[index];
return Padding(
padding: const EdgeInsets.all(32),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// Icon Container
Container(
width: 110,
height: 110,
decoration: BoxDecoration(
color: AppColors.appleBlue.withValues(alpha: 0.08),
shape: BoxShape.circle,
),
child: Center(
child: Icon(
slide['icon'] as IconData,
size: 54,
color: AppColors.appleBlue,
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
child: Center(
child: SingleChildScrollView(
physics: const BouncingScrollPhysics(),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// Icon Container
Container(
width: 90,
height: 90,
decoration: BoxDecoration(
color: AppColors.appleBlue.withValues(alpha: 0.08),
shape: BoxShape.circle,
),
child: Center(
child: Icon(
slide['icon'] as IconData,
size: 46,
color: AppColors.appleBlue,
),
),
),
),
),
const SizedBox(height: 36),
// Badge
Container(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
decoration: BoxDecoration(
color: AppColors.surfaceMuted,
borderRadius: BorderRadius.circular(16),
border: Border.all(color: AppColors.borderSubtle),
),
child: Text(
slide['badge'] as String,
style: GoogleFonts.alexandria(
fontSize: 11,
fontWeight: FontWeight.w600,
color: AppColors.appleBlue,
const SizedBox(height: 24),
// Badge
Container(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
decoration: BoxDecoration(
color: AppColors.surfaceMuted,
borderRadius: BorderRadius.circular(16),
border: Border.all(color: AppColors.borderSubtle),
),
child: Text(
slide['badge'] as String,
style: GoogleFonts.alexandria(
fontSize: 11,
fontWeight: FontWeight.w600,
color: AppColors.appleBlue,
),
),
),
),
const SizedBox(height: 14),
// Title
Text(
slide['title'] as String,
textAlign: TextAlign.center,
style: GoogleFonts.alexandria(
fontSize: 22,
fontWeight: FontWeight.w800,
color: AppColors.textPrimary,
height: 1.3,
),
),
const SizedBox(height: 12),
// Description
Text(
slide['desc'] as String,
textAlign: TextAlign.center,
style: GoogleFonts.alexandria(
fontSize: 13.5,
fontWeight: FontWeight.w400,
color: AppColors.textSecondary,
height: 1.5,
),
),
],
),
const SizedBox(height: 16),
// Title
Text(
slide['title'] as String,
textAlign: TextAlign.center,
style: GoogleFonts.alexandria(
fontSize: 24,
fontWeight: FontWeight.w800,
color: AppColors.textPrimary,
height: 1.3,
),
),
const SizedBox(height: 16),
// Description
Text(
slide['desc'] as String,
textAlign: TextAlign.center,
style: GoogleFonts.alexandria(
fontSize: 14,
fontWeight: FontWeight.w400,
color: AppColors.textSecondary,
height: 1.6,
),
),
],
),
),
);
},