Competitions
View co-curricular competitions and events the school has participated in or conducted.
List Competitions
GET /parent/co-curricular/get-competitions?studentId={id}
{
"data": {
"competitions": [
{
"id": "uuid",
"name": "State Level Science Fair",
"description": "Annual science exhibition...",
"date": "2024-03-15",
"venue": "Delhi Public School",
"category": "SCIENCE",
"level": "STATE",
"position": "First",
"students": ["John Doe", "Jane Smith"],
"status": "COMPLETED"
}
]
}
}
Competition Levels
| Level | Description |
|---|---|
INTERNAL | School-level competition |
DISTRICT | District-level |
STATE | State-level |
NATIONAL | National-level |
INTERNATIONAL | International competition |
Categories
| Category | Description |
|---|---|
SCIENCE | Science projects, exhibitions |
SPORTS | Athletic events, tournaments |
CULTURAL | Dance, music, drama |
ART | Drawing, painting, craft |
QUIZ | Knowledge competitions |
TECHNICAL | Coding, robotics |
UI — Competition Card
class CompetitionCard extends StatelessWidget {
final Competition competition;
@override
Widget build(BuildContext context) {
return Card(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
decoration: BoxDecoration(
color: _categoryColor(competition.category),
borderRadius: BorderRadius.circular(4),
),
child: Text(competition.category, style: const TextStyle(color: Colors.white, fontSize: 10)),
),
const SizedBox(width: 8),
Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
decoration: BoxDecoration(
color: Colors.grey.shade200,
borderRadius: BorderRadius.circular(4),
),
child: Text(competition.level, style: const TextStyle(fontSize: 10)),
),
],
),
const SizedBox(height: 8),
Text(competition.name, style: const TextStyle(fontWeight: FontWeight.bold)),
const SizedBox(height: 4),
Text(competition.description, maxLines: 2, overflow: TextOverflow.ellipsis),
const SizedBox(height: 8),
Row(
children: [
const Icon(Icons.calendar_today, size: 14, color: Colors.grey),
const SizedBox(width: 4),
Text(competition.date, style: const TextStyle(color: Colors.grey, fontSize: 12)),
const Spacer(),
if (competition.position != null)
Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2),
decoration: BoxDecoration(color: Colors.green.shade100, borderRadius: BorderRadius.circular(4)),
child: Text('${competition.position} Place', style: TextStyle(color: Colors.green.shade700, fontSize: 12)),
),
],
),
],
),
),
);
}
}