Texnik qo'llanma

Ushbu bo'lim Imlo Go dasturining texnik arxitekturasi, ishlatilgan texnologiyalar va loyiha tuzilishi haqida batafsil ma'lumot beradi.

Texnologiyalar steki

KomponentTexnologiyaVersiya
FrameworkFlutterSDK ^3.6.1
State ManagementRiverpod + Hooks2.6.1
Mahalliy saqlashHive DB2.2.3
Audioaudioplayers6.4.0
BackendPocketBase0.23.2
UIFlutter Material
Markdownflutter_markdown0.7.7

Loyiha strukturasi

lib/ ├── main.dart # Ilova kirish nuqtasi └── src/ ├── core/ │ ├── config/ │ │ ├── app_device.dart # Qurilma sozlamalari │ │ ├── app_fonts.dart # Shrift belgilanmalari │ │ └── app_router.dart # Navigatsiya yo'naltirish │ ├── constants/ │ │ ├── app_constants.dart # Ilova doimiylari │ │ └── uzbek_constants.dart # O'zbek tili doimiylari │ ├── controllers/ │ │ └── dictation_controller.dart # Diktant biznes logikasi │ ├── models/ │ │ ├── detected_error.dart # Xato modeli │ │ ├── error_type.dart # Xato turi enum │ │ ├── evulation_config.dart # Baholash konfiguratsiyasi │ │ ├── text_model.dart # Diktant matn modeli │ │ └── work.dart # Foydalanuvchi ish natijasi │ ├── services/ │ │ ├── dictation_manager.dart # DiktantEvaluator (854 qator) │ │ └── pocketbase_service.dart # PocketBase integratsiya │ └── utils/ │ ├── get_rate_color.dart # Baho rang yordamchisi │ └── time_utils.dart # Vaqt formatlash ├── providers/ │ ├── app_info_provider.dart # Ilova ma'lumotlari │ ├── dictation_provider.dart # Diktantlar ro'yxati │ └── history_provider.dart # Tarix provayderi └── ui/ ├── pages/ │ ├── dictation_page.dart # Diktant yozish sahifasi │ ├── dictation_result_page.dart # Natijalar sahifasi │ ├── main_page.dart # Bosh sahifa │ └── results_page.dart # Tarix sahifasi ├── screens/ │ ├── additional_screens/ │ │ ├── about_app_screen.dart │ │ └── app_info_screen.dart │ ├── main_screens/ │ │ ├── app_bar.dart │ │ ├── before_start_screen.dart │ │ ├── main_card.dart │ │ └── result_card.dart │ └── animated_background.dart └── widgets/ ├── app_buttons.dart ├── audio_progress_bar.dart ├── countdown_widget.dart ├── hovered_widget.dart └── primary_button.dart

Ma'lumotlar modellari

TextModel — Diktant matni

Diktant ma'lumotlarini ifodalovchi model:

class TextModel { final String id; final String title; // Diktant sarlavhasi final String text; // To'liq diktant matni final String className; // Sinf darajasi ("1-sinf") final String ageName; // Yosh toifasi ("7-8 yosh") final int length; // So'zlar soni (avtomatik) final int time; // Davomiyligi (daqiqa) final String? url; // Audio URL (PocketBase) final DateTime? createdDate; }

Work — Foydalanuvchi natijasi

Bajarilgan diktant natijasini ifodalovchi model:

class Work { String id; // Unikal identifikator String createdDate; // ISO 8601 timestamp double ball; // 100 ballik natija double baho; // 5 ballik baho List<DetectedError> errors; // Aniqlangan xatolar TextModel text; // Original diktant int imloErrorCount; // Imlo xatolari soni int punktuatsionErrorCount; // Punktuatsion xatolar soni int uslubiyErrorCount; // Uslubiy xatolar soni int grafikErrorCount; // Grafik xatolar soni int worktime; // Sarflangan vaqt (sekund) String input; // Foydalanuvchi matni }

DetectedError — Aniqlangan xato

class DetectedError { ErrorType type; // IMLO, PUNKTUATSION, USLUBIY, GRAFIK String description; // Xato tavsifi String originalFragment; // Originaldagi to'g'ri variant String userFragment; // Foydalanuvchi yozgan variant String specificRuleCode; // Unikal qoida identifikatori double penaltyMultiplier; // Jarima koeffitsienti (standart: 1.0) }

ErrorType — Xato turlari

enum ErrorType { IMLO, // "Imloviy" — so'zni noto'g'ri yozish PUNKTUATSION, // "Punktuatsion" — tinish belgilari USLUBIY, // "Uslubiy" — so'z qo'llash GRAFIK, // "Grafik" — harf shakli }

PocketBase integratsiyasi

Backend sifatida PocketBase (admin.imlogo.uz) ishlatiladi. U quyidagi vazifalarni bajaradi:

Diktantlar kolleksiyasi

class PocketBaseService { static const String baseUrl = 'https://admin.imlogo.uz'; final pb = PocketBase(baseUrl); }

Diktantlar dictations kolleksiyasidan yuklanadi:

final records = await pb.collection('dictations').getList( page: page, perPage: 20, );

Har bir yozuv quyidagi maydonlarni o'z ichiga oladi:

  • id, title, text — asosiy ma'lumotlar
  • class, age — sinf va yosh toifasi
  • audio — audio fayl nomi (PocketBase storage orqali URL ga aylantiriladi)
  • time — davomiyligi

Audio fayllar

Audio fayllar PocketBase file storage da saqlanadi va URL orqali yuklanadi:

https://admin.imlogo.uz/api/files/{collectionId}/{recordId}/{fileName}

Mahalliy saqlash (Hive DB)

Foydalanuvchi natijalari Hive mahalliy ma'lumotlar bazasida saqlanadi:

// Initsializatsiya (main.dart) await Hive.initFlutter(); // Saqlash final box = await Hive.openBox('works'); await box.put(work.id, jsonEncode(work.toJson())); // O'qish final data = box.get(workId); final work = Work.fromJson(jsonDecode(data));

Afzalliklari:

  • Tez ishlashi — NoSQL, disk-based
  • Offline rejimda ham ishlaydi
  • Flutter bilan oson integratsiya
  • Kichik hajm — foydalanuvchi qurilmasida kam joy egallaydi

Audio boshqarish

Audio fayllar audioplayers paketi orqali ijro etiladi:

final AudioPlayer _player = AudioPlayer(); // Audio ijrosi await _player.play(UrlSource(widget.model.url ?? "")); // Pozitsiya kuzatish _player.onPositionChanged.listen((p) { setState(() => _position = p); }); // Tugallash hodisasi _player.onPlayerComplete.listen((event) { setState(() { _isPlaying = false; _position = Duration.zero; }); });

Riverpod provayderlar

Ilova holati Riverpod state management yordamida boshqariladi:

dictation_provider

Diktantlar ro'yxatini PocketBase dan yuklaydi va sahifalash (pagination) bilan boshqaradi.

history_provider

Hive dan saqlangan natijalarni yuklaydi va boshqaradi. Yangi natijalarni saqlash va eski natijalarni o'chirish funksiyalari mavjud.

app_info_provider

Ilova versiyasi va boshqa umumiy ma'lumotlarni boshqaradi.

Ilova oqimi

MainPage (Diktantlar ro'yxati) ↓ Diktant tanlash BeforeStartScreen (Tayyorgarlik) ↓ "Boshlash" tugmasi DictationPage (Audio + Matn kiritish) ↓ "Tekshirish" tugmasi DiktantEvaluator (Tahlil va baholash) ↓ Natija DictationResultPage (Baho + Xatolar) ↓ "Saqlash" tugmasi Hive DB (Mahalliy saqlash)

Rivojlantirish muhiti

Talablar

  • Flutter SDK ^3.6.1
  • Dart SDK (Flutter bilan birga keladi)
  • Android Studio yoki VS Code (Flutter plaginlari bilan)
  • PocketBase server (backend uchun)

Ishga tushirish

# Bog'liqliklarni o'rnatish flutter pub get # Ilovani ishga tushirish (debug rejimda) flutter run # Web versiyani ishga tushirish flutter run -d chrome # Windows versiyani build qilish flutter build windows # Android APK build qilish flutter build apk