NG Higher Education Institutions

A comprehensive Flutter/Dart package providing access to data about all Nigerian higher educational institutions including universities, polytechnics, colleges, and specialized institutions.

Features

  • 📚 Complete Database: Contains over 290 Nigerian institutions including:

    • Federal, State, and Private Universities
    • Polytechnics and Monotechnics
    • Colleges (Agriculture, Education, Health, etc.)
    • Military and Police institutions
  • 🔍 Powerful Search: Find institutions by:

    • State location
    • Institution name
    • Abbreviation (e.g., UNILAG, ABU, OAU)
  • 📊 Detailed Information: Each institution includes:

    • Full name and abbreviation
    • State and Local Government Area (LGA)
    • Funding type (Federal, State, Private, Military, Police)
    • Institution type (University, Polytechnic, College, etc.)
    • Establishment year
    • Website URL
    • Coordinates (longitude/latitude - when available)

Installation

Add this package to your pubspec.yaml:

dependencies:
  ng_higher_ed_institutions: ^0.0.1

Then run:

flutter pub get

Usage

Basic Usage

import 'package:ng_higher_ed_institutions/ng_higher_ed_institutions.dart';

// Get all institutions
final allInstitutions = NigerianInstitutions.getAllInstitutions();
print('Total institutions: ${allInstitutions.length}');

// Get institutions in a specific state
final lagosInstitutions = NigerianInstitutions.getInstitutionsInState('Lagos');
print('Lagos has ${lagosInstitutions.length} institutions');

// Find institution by abbreviation
final unilag = NigerianInstitutions.getInstitutionByAbbreviation('UNILAG');
if (unilag != null) {
  print('Found: ${unilag.name}');
  print('Established: ${unilag.year}');
  print('Website: ${unilag.website}');
}

// Find institution by name
final abu = NigerianInstitutions.getInstitutionByName('Ahmadu Bello University');
if (abu != null) {
  print('Abbreviation: ${abu.abbreviation}');
  print('Location: ${abu.state}, ${abu.lga}');
}

Working with Institution Data

import 'package:ng_higher_ed_institutions/ng_higher_ed_institutions.dart';

// Get all federal universities
final allInstitutions = NigerianInstitutions.getAllInstitutions();
final federalUniversities = allInstitutions.where((inst) =>
  inst.funding == Funding.federal &&
  inst.type == Type.university
).toList();

print('Federal Universities: ${federalUniversities.length}');

// Get all private polytechnics in Lagos
final lagosInstitutions = NigerianInstitutions.getInstitutionsInState('Lagos');
final privatePolytechnics = lagosInstitutions.where((inst) =>
  inst.funding == Funding.private &&
  inst.type == Type.polytechnic
).toList();

// Display institution details
for (final institution in privatePolytechnics) {
  print('${institution.name}');
  print('  Type: ${institution.type}');
  print('  Funding: ${institution.funding}');
  print('  Year: ${institution.year}');
  if (institution.hasWebsite) {
    print('  Website: ${institution.website}');
  }
  if (institution.hasCoordinates) {
    print('  Location: ${institution.latitude}, ${institution.longitude}');
  }
}

Filtering and Searching

// Get all institutions established after 2000
final recentInstitutions = NigerianInstitutions.getAllInstitutions()
  .where((inst) => inst.year > 2000)
  .toList();

// Get all universities (regardless of funding)
final allUniversities = NigerianInstitutions.getAllInstitutions()
  .where((inst) => inst.type == Type.university)
  .toList();

// Search by partial name
final searchTerm = 'Lagos';
final matchingInstitutions = NigerianInstitutions.getAllInstitutions()
  .where((inst) => 
    inst.name.toLowerCase().contains(searchTerm.toLowerCase()) ||
    inst.state.toLowerCase().contains(searchTerm.toLowerCase())
  )
  .toList();

State Names

When searching by state, you can use any of these formats (case-insensitive):

  • Full state name: "Lagos", "Federal Capital Territory", "Cross River"
  • Abbreviation: "FCT" for Federal Capital Territory
  • State with "State" suffix: "Lagos State" (automatically normalized)
// All these work:
final lagos1 = NigerianInstitutions.getInstitutionsInState('Lagos');
final lagos2 = NigerianInstitutions.getInstitutionsInState('LAGOS');
final lagos3 = NigerianInstitutions.getInstitutionsInState('Lagos State');

// FCT examples:
final fct1 = NigerianInstitutions.getInstitutionsInState('FCT');
final fct2 = NigerianInstitutions.getInstitutionsInState('Federal Capital Territory');

Data Model

Institution Class

Each institution is represented by the Institution class with the following properties:

class Institution {
  final String name;              // Full institution name
  final String state;            // State where located
  final String lga;              // Local Government Area
  final String? website;         // Institution website URL (nullable)
  final String? abbreviation;    // Optional abbreviation (e.g., "UNILAG")
  final double? longitude;        // Geographic longitude (nullable)
  final double? latitude;         // Geographic latitude (nullable)
  final Funding funding;          // Funding source enum
  final Type type;                // Institution type enum
  final int year;                 // Year of establishment
  
  // Helper getters
  bool get hasCoordinates;       // Returns true if coordinates are available
  bool get hasWebsite;            // Returns true if website is available
}

Enums

Funding Type:

  • Funding.federal - Federal government funded
  • Funding.state - State government funded
  • Funding.private - Privately funded
  • Funding.military - Military institutions
  • Funding.police - Police institutions
  • Funding.nil - Unknown/undefined

Institution Type:

  • Type.university - Full universities
  • Type.polytechnic - Polytechnics
  • Type.monotechnic - Single-discipline technical institutions
  • Type.college - Colleges (Education, Agriculture, Health, etc.)
  • Type.nil - Unknown/undefined

Example Applications

1. Institution Directory App

class InstitutionDirectory extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final institutions = NigerianInstitutions.getAllInstitutions();
    
    return ListView.builder(
      itemCount: institutions.length,
      itemBuilder: (context, index) {
        final inst = institutions[index];
        return ListTile(
          title: Text(inst.name),
          subtitle: Text('${inst.state} • ${inst.lga}'),
          trailing: Text('${inst.year}'),
          onTap: () {
            // Show institution details
          },
        );
      },
    );
  }
}

2. State-Based Filtering

class StateInstitutionsPage extends StatelessWidget {
  final String state;
  
  @override
  Widget build(BuildContext context) {
    final institutions = NigerianInstitutions.getInstitutionsInState(state);
    
    return Scaffold(
      appBar: AppBar(title: Text('Institutions in $state')),
      body: ListView.builder(
        itemCount: institutions.length,
        itemBuilder: (context, index) {
          final inst = institutions[index];
          return Card(
            child: ListTile(
              leading: Icon(_getIconForType(inst.type)),
              title: Text(inst.name),
              subtitle: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text('${inst.type.name} • ${inst.funding.name}'),
                  if (inst.abbreviation != null)
                    Text('Abbr: ${inst.abbreviation}'),
                ],
              ),
            ),
          );
        },
      ),
    );
  }
}

Data Sources

The institution data in this package is compiled from:

  • National Universities Commission (NUC)
  • National Board for Technical Education (NBTE)
  • Official institution websites
  • Government publications and verified sources

Limitations

  • Coordinates: Most institutions do not have coordinates in the source data. The longitude and latitude fields are nullable. Use hasCoordinates getter to check if coordinates are available.
  • Websites: Some institutions may not have website URLs. The website field is nullable. Use hasWebsite getter to check if a website is available.
  • Abbreviations: Not all institutions have abbreviations recorded. The abbreviation field is nullable.

Contributing

Contributions are welcome! Areas for improvement:

  • Adding missing institutions
  • Updating institution information
  • Adding precise coordinates
  • Improving data accuracy

Updating Data

The package includes:

  • Higher institutions in Nigeria - Sheet2.csv - Source data file
  • scripts/generate_institutions.py - Script to regenerate Dart files from CSV

To update the data:

  1. Edit the CSV file with new/updated institution data
  2. Run python3 scripts/generate_institutions.py to regenerate all state files
  3. Ensure all files compile with flutter analyze
  4. Submit a pull request with your changes

License

This package is provided as-is for educational and development purposes.

Version

Current version: 0.0.1

Support

For issues, questions, or contributions, please open an issue on the package repository.