Getting started

This Flutter package provides an easy way to access a JSON file containing all the wilayas (provinces) and communes (municipalities) of Algeria. It allows developers to retrieve province and municipality names dynamically within their Flutter applications.

The package offers:

A predefined JSON dataset containing all Algerian provinces and municipalities.

Methods to fetch, search, and filter provinces and municipalities efficiently.

Compatibility with Flutter and Dart, making integration simple and fast.

Ideal for applications requiring address selection, geolocation, or administrative data handling in Algeria.

Screenshot:

Example

import 'package:flutter/material.dart';
import 'package:wilaya/wilaya.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(title: const Text('Wilaya App')),
      body: WilayaScreen(),
    ),
  ));
}

class WilayaScreen extends StatefulWidget {
  @override
  _WilayaScreenState createState() => _WilayaScreenState();
}

class _WilayaScreenState extends State<WilayaScreen> {
  final WilayaBase wilayaBase = WilayaBase();
  String wilayaName = "M'SILA";
  String wilayaCode = "28";
  String wilayaZipCode = "28000";
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text("ولايات الجزائر")),
        body: Center(
          child: Column(
            children: [
              ElevatedButton(
                  onPressed: () async {
                    var wilayaData = await wilayaBase.getWilaya(context);

                    var wilayaNamelist =
                        wilayaData.entries.map((e) => e.key).toList();

                    _showCustomBottomSheetWilaya(context, wilayaNamelist, true);
                  },
                  child: Text('عرض الولايات')),
              ElevatedButton(
                  onPressed: () async {
                    var wilayaData = await wilayaBase.getWilaya(context);

                    String? citiesString = wilayaBase
                        .getAllCities(wilayaData, wilayaName)
                        .toString();

                    List<String> data = citiesString.split(',');

                    _showCustomBottomSheetWilaya(context, data, false);
                  },
                  child: Text(' عرض المدن')),
              ElevatedButton(
                  onPressed: () async {
                    var wilayaData = await wilayaBase.getWilaya(context);

                    String? citiesString = wilayaBase
                        .getAllCities(wilayaData, wilayaName)
                        .toString();

                    List<String> cities = citiesString.split(',');

                    List<String> zipCodes = [];
                    List<String> c = [];

                    for (var city in cities) {
                      var zipCode =
                          wilayaBase.getZipCode(wilayaData, city.trim());

                      if (zipCode != null) {
                        zipCodes.add(zipCode);
                        c.add(city.trim() + " : " + zipCode);
                      }
                    }

                    _showCustomBottomSheetWilaya(context, c, false);
                  },
                  child: Text('عرض الرموز البريدية')),
              // Text(wilayaName + )
            ],
          ),
        ));
  }

  void _showCustomBottomSheetWilaya(BuildContext context, data, wilaya) async {
    showModalBottomSheet<void>(
      context: context,
      isScrollControlled: true,
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.vertical(top: Radius.circular(12)),
      ),
      builder: (BuildContext context) {
        var size = MediaQuery.of(context).size;
        return Container(
          width: double.infinity,
          height: size.height * 0.5,
          decoration: BoxDecoration(
            borderRadius: BorderRadius.vertical(top: Radius.circular(10)),
            color: Color(0xFF232428),
          ),
          child: ListView.builder(
            itemCount: data.length,
            itemBuilder: (context, index) {
              var city =
                  data[index].trim().replaceAll("[", '').replaceAll(']', '');
              return ListTile(
                title: Text(city, style: TextStyle(color: Colors.white)),
                onTap: () {
                  if (wilaya) {
                    wilayaName = city;
                  } else {
                    wilayaName = "M'SILA";
                  }
                  Navigator.pop(context);
                },
              );
            },
          ),
        );
      },
    );
  }
}

Libraries

wilaya
Support for doing something awesome.