Files
tripz-llc/apps/driver/lib/views/home/on_boarding_page.dart
T
HamzaandClaude Opus 4.8 6234e66471 feat: Gemini AI (doc OCR + face match) + role-assignment endpoints
- GeminiService (integrations/gemini, @Global): extractDocument (OCR fields) + faceMatch; graceful if no GEMINI_API_KEY
- documents: face-match now real via Gemini; POST /admin/documents/:id/ocr extracts fields for CS auto-fill
- roles: PATCH /admin/users/:id/role (admin) + POST /platform/users/role (bootstrap via x-platform-secret)
- config: gemini + platform.secret; .env.example entries

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 20:01:26 +03:00

55 lines
1.9 KiB
Dart
Executable File

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sefer_driver/controller/auth/onboarding_controller.dart';
import 'package:sefer_driver/onbording_page.dart'; // تأكد من مسار الـ Widgets الداخلية
import 'package:sefer_driver/views/widgets/elevated_btn.dart';
class OnBoardingPage extends StatelessWidget {
const OnBoardingPage({super.key});
@override
Widget build(BuildContext context) {
// حقن الكونترولر مرة واحدة
final OnBoardingControllerImp controller =
Get.put(OnBoardingControllerImp());
return Scaffold(
backgroundColor: Colors.white, // خلفية بيضاء ثابتة لمنع الرمش
body: SafeArea(
child: Column(
children: [
// مساحة علوية مرنة
const Spacer(flex: 1),
// منطقة العرض الرئيسية (Slider)
SizedBox(
height: Get.height *
0.6, // تقليل الارتفاع قليلاً لتناسب الشاشات المختلفة
child: const CustomSliderOnBoarding(),
),
// منطقة النقاط (Dots)
const SizedBox(height: 20),
const CustomDotControllerOnBoarding(),
// مساحة سفلية
const Spacer(flex: 2),
// زر المتابعة
Padding(
padding: const EdgeInsets.only(bottom: 30.0),
child: GetBuilder<OnBoardingControllerImp>(
builder: (controller) => MyElevatedButton(
title: controller.isLastPage ? "Start".tr : "Next".tr,
onPressed: () => controller.next(),
// width: Get.width * 0.8, // عرض ثابت للزر
),
),
),
],
),
),
);
}
}