Somali Digital Book Library built with Flutter and Supabase for SIU MAD Course (Group 7).
import 'package:flutter/material.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
// ==========================================
// SUPABASE CONFIGURATION
// Gali URL-kaaga iyo Anon Key-gaaga halkan si uu toos ugu xirmo Backend-kaaga!
// ==========================================
const String supabaseUrl = '
your-supabase-project.supab…';
const String supabaseAnonKey = 'your-anon-key-here';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
bool isSupabaseConfigured = false;
try {
// initialize Supabase if URL and Key are changed from defaults
if (supabaseUrl != '
your-supabase-project.supab…') {
await Supabase.initialize(
url: supabaseUrl,
anonKey: supabaseAnonKey,
);
isSupabaseConfigured = true;
print("Supabase connected successfully!");
} else {
print("Running in offline demonstration mode (Using default demo credentials).");
}
} catch (e) {
print("Supabase connection failed: $e. Running in offline demo mode.");
}
runApp(BuugshopApp(isBackendConnected: isSupabaseConfigured));
}
// ==========================================
// DATA MODELS
// ==========================================
class Book {
final String id;
final String title;
final String author;
final String category;
final String coverUrl;
final String description;
final bool isAvailable;
Book({
required this.id,
required this.title,
required this.author,
required this.category,
required this.coverUrl,
required this.description,
this.isAvailable = true,
});
factory Book.fromJson(Map json) {
return Book(
id: json['id'] ?? '',
title: json['title'] ?? '',
author: json['author'] ?? '',
category: json['categories'] != null ? json['categories']['name'] : (json['category'] ?? 'Dhamaan'),
coverUrl: json['cover_url'] ?? '',
description: json['description'] ?? '',
isAvailable: json['is_available'] ?? true,
);
}
}
// Mock book list for offline demo mode
final List demoBooks = [
Book(
id: '1',
title: 'QISOOYINKII NABIYADA',
author: 'Shiikh Shariif',
category: …