Enums
The STADATA Flutter SDK provides a comprehensive set of enums designed to simplify API interactions, enhance type safety, and improve code readability. These enums serve as standardized constants for various parameters and response values throughout the SDK, ensuring consistent and predictable behavior across all statistical data operations.
These enums eliminate the need for magic strings, reduce potential errors, and provide IntelliSense support in your IDE, making development more efficient and less error-prone when working with Indonesian statistical data from BPS.
Core Language and Localization
DataLanguage Enum
The DataLanguage enum controls the language of data returned from BPS APIs, supporting both Indonesian and English responses where available.
| Enum | Parameter Value | Description | Status | Usage Context |
|---|---|---|---|---|
DataLanguage.id | ind | Indonesian language responses | Default | All API calls, recommended for Indonesian users |
DataLanguage.en | eng | English language responses | Available | International users, English documentation |
Usage Examples
// Using default Indonesian language
final domains = await StadataFlutter.instance.list.domains();
// Explicitly requesting Indonesian data
final domainsIndonesian = await StadataFlutter.instance.list.domains(
lang: DataLanguage.id,
);
// Requesting English data where available
final domainsEnglish = await StadataFlutter.instance.list.domains(
lang: DataLanguage.en,
);
// Language-specific content retrieval
final publication = await StadataFlutter.instance.view.publication(
id: '03220.2301',
domain: '0000',
lang: DataLanguage.id, // Indonesian content
);
Best Practices
- Default Behavior: When no language is specified,
DataLanguage.idis used automatically - Consistency: Use the same language throughout your application for consistent user experience
- Fallback Strategy: Some content may only be available in Indonesian; implement fallback logic when needed
- User Preference: Allow users to choose their preferred language and persist this setting
// Implementing language preference with fallback
Future<Publication?> getPublicationWithFallback(
String id,
String domain,
DataLanguage preferredLang,
) async {
try {
// Try preferred language first
final publication = await StadataFlutter.instance.view.publication(
id: id,
domain: domain,
lang: preferredLang,
);
if (publication != null) return publication;
// Fallback to Indonesian if preferred language fails
if (preferredLang != DataLanguage.id) {
return await StadataFlutter.instance.view.publication(
id: id,
domain: domain,
lang: DataLanguage.id,
);
}
return null;
} catch (e) {
// Handle errors appropriately
return null;
}
}
Administrative and Geographic Classification
DomainType Enum
The DomainType enum simplifies the specification of administrative domain types for geographic and administrative data filtering across Indonesia's governmental structure.
| Enum | Parameter Value | Description | Status | Administrative Level |
|---|---|---|---|---|
DomainType.all | all | All administrative domains including national, provincial, and regency levels | Default | National, Provincial, Regency |
DomainType.province | prov | Provincial-level administrative domains only | Available | Provincial |
DomainType.regency | kab | Regency and city-level administrative domains only | Available | Regency/City |
DomainType.regencyByProvince | kabbyprov | Regency domains filtered by specific province | Available | Regency (Province-filtered) |
Usage Examples
// Get all administrative domains (national, provincial, regency)
final allDomains = await StadataFlutter.instance.list.domains(
type: DomainType.all,
);
// Get only provincial domains
final provinces = await StadataFlutter.instance.list.domains(
type: DomainType.province,
);
// Get only regency/city domains
final regencies = await StadataFlutter.instance.list.domains(
type: DomainType.regency,
);
// Get regencies within a specific province
final westJavaRegencies = await StadataFlutter.instance.list.domains(
type: DomainType.regencyByProvince,
provinceId: '32', // West Java province code
);
Administrative Hierarchy Integration
// Building a hierarchical administrative selector
class AdministrativeSelector {
static Future<Map<String, List<Domain>>> buildHierarchy() async {
final hierarchy = <String, List<Domain>>{};
// Load all administrative levels
final [allDomains, provinces, regencies] = await Future.wait([
StadataFlutter.instance.list.domains(type: DomainType.all),
StadataFlutter.instance.list.domains(type: DomainType.province),
StadataFlutter.instance.list.domains(type: DomainType.regency),
]);
hierarchy['all'] = allDomains.data;
hierarchy['provinces'] = provinces.data;
hierarchy['regencies'] = regencies.data;
return hierarchy;
}
static Future<List<Domain>> getRegenciesByProvince(String provinceId) async {
final regencies = await StadataFlutter.instance.list.domains(
type: DomainType.regencyByProvince,
provinceId: provinceId,
);
return regencies.data;
}
}
Data Availability and Status
DataAvailability Enum
The DataAvailability enum provides standardized status indicators for data availability across all BPS statistical resources, enabling robust error handling and user feedback mechanisms.
| Enum | Parameter Value | Description | Usage Context |
|---|---|---|---|
DataAvailability.available | available | Data is available and accessible | Successful data retrieval |
DataAvailability.listNotAvailable | list-not-available | Collection or list data is not available | Empty collections, filtered results |
DataAvailability.notAvailable | not-available | Specific data resource is not available | Missing resources, restricted access |
Usage Examples
// Checking data availability in API responses
final publicationsResult = await StadataFlutter.instance.list.publications(
domain: '7200',
keyword: 'rare-keyword',
);
// Handle different availability statuses
switch (publicationsResult.dataAvailability) {
case DataAvailability.available:
print('Found ${publicationsResult.data.length} publications');
break;
case DataAvailability.listNotAvailable:
print('No publications found for the specified criteria');
break;
case DataAvailability.notAvailable:
print('Publication data is not available for this domain');
break;
}