Flutter斯里兰卡省份区县城市数据插件sri_lanka_provinces_districts_cities的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter斯里兰卡省份区县城市数据插件sri_lanka_provinces_districts_cities的使用

一个Flutter插件,用于访问斯里兰卡省份、区县和城市的信息。此插件提供了模型和辅助函数,可以处理斯里兰卡地理数据,包括按不同标准(如ID、名称、邮政编码)搜索、过滤和检索省份、区县和城市的详细信息。

特性

  • 获取斯里兰卡省份、区县和城市的详细信息。
  • 包含CityDistrictProvince模型。
  • 辅助函数可按ID、名称(英语、僧伽罗语或泰米尔语)和邮政编码查找项目。
  • 提供易于使用的辅助函数以获取相关数据(例如,某个省份的所有区县,某个区县的所有城市)。

安装

在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  sri_lanka_provinces_districts_cities: ^x.x.x

然后运行:

flutter pub get

导入包:

import 'package:sri_lanka_provinces_districts_cities/sri_lanka_provinces_districts_cities.dart';

模型

该插件包含以下模型:

  • Province
  • District
  • City

每个模型都有必要的属性和fromJson/toJson方法用于JSON序列化。

示例用法

1. 按ID获取省份

你可以通过省份ID来获取省份信息:

Province? province = getProvinceById(3); // 获取南方省份
print(province?.nameEn); // 输出: Southern

2. 按省份ID获取区县

获取指定省份的所有区县:

List<District> colomboDistricts = getDistrictsByProvinceId(1); // 获取西方省份的所有区县
for (var district in colomboDistricts) {
  print(district.nameEn); // 输出: Colombo, Gampaha, Kalutara
}

3. 按ID获取城市

通过城市ID查找特定城市:

City? city = getCityById(1);
print(city?.nameEn); // 输出: Akkaraipattu

4. 按区县ID获取城市

获取指定区县的所有城市:

List<City> citiesInDistrict = getCitiesByDistrictId(1); // 获取ID为1的区县的所有城市
for (var city in citiesInDistrict) {
  print(city.nameEn); // 输出: Akkaraipattu, Ampara 等等
}

5. 按名称搜索城市(英语、僧伽罗语或泰米尔语)

根据城市名称(英语、僧伽罗语或泰米尔语)搜索城市:

List<City> searchedCities = searchCitiesByNameEn('Ampara');
print(searchedCities.first.nameEn); // 输出: Ampara

List<City> searchedCitiesSi = searchCitiesByNameSi('අම්පාර');
print(searchedCitiesSi.first.nameSi); // 输出: අම්පාර

List<City> searchedCitiesTa = searchCitiesByNameTa('அம்பாறை');
print(searchedCitiesTa.first.nameTa); // 输出: அம்பாறை

辅助函数

以下是可用的辅助函数:

1. 按ID获取省份

Province? getProvinceById(int id)

通过ID返回一个省份对象。

2. 按省份ID获取区县

List<District> getDistrictsByProvinceId(int provinceId)

返回一个省份内的区县列表。

3. 按ID获取城市

City? getCityById(int id)

通过ID返回一个城市对象。

4. 按区县ID获取城市

List<City> getCitiesByDistrictId(int districtId)

返回一个区县内的城市列表。

5. 按邮政编码获取城市

List<City> getCitiesByPostcode(String postcode)

返回匹配特定邮政编码的城市列表。

6. 按英语名称搜索城市

List<City> searchCitiesByNameEn(String name)

根据英语名称搜索城市。

7. 按僧伽罗语名称搜索城市

List<City> searchCitiesByNameSi(String name)

根据僧伽罗语名称搜索城市。

8. 按泰米尔语名称搜索城市

List<City> searchCitiesByNameTa(String name)

根据泰米尔语名称搜索城市。

示例代码

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

void main() {
  runApp(const CitiesApp());
}

class CitiesApp extends StatelessWidget {
  const CitiesApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Cities Helper Demo',
      home: CitiesHomePage(),
    );
  }
}

class CitiesHomePage extends StatefulWidget {
  const CitiesHomePage({super.key});

  [@override](/user/override)
  _CitiesHomePageState createState() => _CitiesHomePageState();
}

class _CitiesHomePageState extends State<CitiesHomePage> {
  late List<Cities> localCities;
  late List<District> localDistricts;
  late List<Province> localProvinces;

  String result = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    // 加载所有省份、区县和城市
    localProvinces = slProvinces; // 假设 `slProvinces` 包含所有省份
    localDistricts = slDistricts; // 假设 `slDistricts` 包含所有区县
    localCities = slCities;       // 假设 `slCities` 包含所有城市
  }

  void _searchProvince(int id) {
    Province? province = getProvinceById(id);
    setState(() {
      result = province != null
          ? '省份: ${province.nameEn}'
          : '未找到ID为 $id 的省份';
    });
  }

  void _searchDistricts(int provinceId) {
    List<District> foundDistricts = getDistrictsByProvinceId(provinceId);
    setState(() {
      result = foundDistricts.isNotEmpty
          ? '区县: ${foundDistricts.map((d) => d.nameEn).join(', ')}'
          : '未找到省份ID为 $provinceId 的区县';
    });
  }

  void _searchCities(int districtId) {
    List<Cities> foundCities = getCitiesByDistrictId(districtId);
    setState(() {
      result = foundCities.isNotEmpty
          ? '城市: ${foundCities.map((c) => c.nameEn).join(', ')}'
          : '未找到区县ID为 $districtId 的城市';
    });
  }

  void _searchCityByName(String name) {
    List<Cities> foundCities = searchCitiesByNameEn(name);
    setState(() {
      result = foundCities.isNotEmpty
          ? '搜索结果: ${foundCities.map((c) => c.nameEn).join(', ')}'
          : '未找到名为 "$name" 的城市';
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('城市助手演示'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            ElevatedButton(
              onPressed: () => _searchProvince(3),
              child: const Text('按ID查找省份 (例如, 3)'),
            ),
            ElevatedButton(
              onPressed: () => _searchDistricts(1),
              child: const Text('按省份ID查找区县 (例如, 1)'),
            ),
            ElevatedButton(
              onPressed: () => _searchCities(2),
              child: const Text('按区县ID查找城市 (例如, 1)'),
            ),
            ElevatedButton(
              onPressed: () => _searchCityByName('Ampara'),
              child: const Text('按英语名称搜索城市 (例如, Ampara)'),
            ),
            const SizedBox(height: 20),
            Text(
              result,
              style: const TextStyle(fontSize: 16, color: Colors.black),
              textAlign: TextAlign.center,
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter斯里兰卡省份区县城市数据插件sri_lanka_provinces_districts_cities的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter斯里兰卡省份区县城市数据插件sri_lanka_provinces_districts_cities的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter插件sri_lanka_provinces_districts_cities的示例代码。这个插件提供了斯里兰卡省份、区县和城市的数据。假设你已经将这个插件添加到了你的Flutter项目中,并且已经运行了flutter pub get命令。

1. 添加依赖

首先,确保你的pubspec.yaml文件中已经添加了该插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  sri_lanka_provinces_districts_cities: ^最新版本号

然后运行flutter pub get

2. 使用插件

以下是一个简单的Flutter应用示例,展示如何使用sri_lanka_provinces_districts_cities插件来获取并显示斯里兰卡省份、区县和城市的数据。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sri Lanka Data Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SriLankaDataDemo(),
    );
  }
}

class SriLankaDataDemo extends StatefulWidget {
  @override
  _SriLankaDataDemoState createState() => _SriLankaDataDemoState();
}

class _SriLankaDataDemoState extends State<SriLankaDataDemo> {
  List<Province> _provinces = [];
  List<District> _districts = [];
  List<City> _cities = [];
  Province _selectedProvince;
  District _selectedDistrict;

  @override
  void initState() {
    super.initState();
    // 获取所有省份数据
    _provinces = SriLankaProvincesData().getAllProvinces();
  }

  void _onProvinceChanged(Province selectedProvince) {
    setState(() {
      _selectedProvince = selectedProvince;
      // 根据选中的省份获取所有区县数据
      _districts = SriLankaDistrictsData().getDistrictsByProvince(_selectedProvince.id);
      _selectedDistrict = null; // 重置选中的区县
      _cities = []; // 清空城市列表
    });
  }

  void _onDistrictChanged(District selectedDistrict) {
    setState(() {
      _selectedDistrict = selectedDistrict;
      // 根据选中的区县获取所有城市数据
      _cities = SriLankaCitiesData().getCitiesByDistrict(_selectedDistrict.id);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Sri Lanka Data Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            DropdownButton<Province>(
              value: _selectedProvince,
              hint: Text('Select Province'),
              onChanged: _onProvinceChanged,
              items: _provinces.map((Province province) {
                return DropdownMenuItem<Province>(
                  value: province,
                  child: Text(province.name),
                );
              }).toList(),
            ),
            SizedBox(height: 16),
            if (_selectedProvince != null)
              DropdownButton<District>(
                value: _selectedDistrict,
                hint: Text('Select District'),
                onChanged: _onDistrictChanged,
                items: _districts.map((District district) {
                  return DropdownMenuItem<District>(
                    value: district,
                    child: Text(district.name),
                  );
                }).toList(),
              ),
            SizedBox(height: 16),
            if (_selectedDistrict != null)
              ListView.builder(
                shrinkWrap: true,
                itemCount: _cities.length,
                itemBuilder: (context, index) {
                  City city = _cities[index];
                  return ListTile(
                    title: Text(city.name),
                  );
                },
              ),
          ],
        ),
      ),
    );
  }
}

3. 运行应用

确保你的开发环境已经配置好,然后运行这个Flutter应用。你应该能看到一个下拉列表,首先选择省份,然后选择区县,最后显示该区县下的所有城市。

这个示例展示了如何使用sri_lanka_provinces_districts_cities插件来获取斯里兰卡的省份、区县和城市数据,并在UI中进行展示。你可以根据实际需求进一步扩展这个示例。

回到顶部