Flutter选择器插件csc_picker_plus的使用

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

Flutter选择器插件csc_picker_plus的使用

csc_picker_plus

version NullSefety

csc_picker_plus 是一个Flutter包,用于以阿拉伯语、英语或根据选择的母语显示国家、州和城市的列表。它还允许用户搜索全球的国家、州和城市。

布局示例 语言示例 垂直布局
Horizontal Layout Show in Arabic Language Vertical Layout
国家和州视图 国家视图
Country and State Only Country Only

新特性

  • 首个支持多语言数据库的包:库提供了一个包含多种语言(包括阿拉伯语)支持的国家、州和城市的数据库。
  • 双语显示国家和州:可以以阿拉伯语或英语(或如果不可用则为母语)显示国家和州。
  • 本地语言显示城市:库允许以国家的本地语言显示城市。
  • 双语搜索:可以以阿拉伯语或英语搜索国家和州,提升用户体验。
  • 灵活的位置选择:库允许开发者根据需要配置选择过程,使用户可以选择仅国家,或国家和州,或国家、州和城市。
  • 可定制的显示选项:可以自定义下拉菜单的设计和外观以适应应用程序的要求。

使用方法

要在项目中使用此包,请在 pubspec.yaml 文件中添加 csc_picker_plus 作为依赖项。

CSCPickerPlus(
  countryStateLanguage: CountryStateLanguage.arabic,
  // countryStateLanguage: CountryStateLanguage.englishOrNative,
  onCountryChanged: (value) {
    setState(() {
      countryValue = value;
    });
  },
  onStateChanged: (value) {
    setState(() {
      stateValue = value ?? '';
    });
  },
  onCityChanged: (value) {
    setState(() {
      cityValue = value ?? '';
    });
  },
),

参数说明

参数名 类型 描述
countryStateLanguage CountryStateLanguage 控制国家和州列表的语言,可选阿拉伯语或英语(或该国的母语)。
cityLanguage CityLanguage 控制城市列表的语言。
flagState CountryFlag 启用/禁用国旗显示,或仅在下拉菜单中显示。
layout Layout 切换下拉菜单布局(水平/垂直)。
showStates Boolean 启用/禁用州下拉菜单。
showCities Boolean 启用/禁用城市下拉菜单。
dropdownDecoration BoxDecoration 下拉菜单装饰,用于自定义下拉选择器样式。
disabledDropdownDecoration BoxDecoration 禁用状态下拉菜单装饰。
selectedItemStyle TextStyle 更改选定项样式。
dropdownHeadingStyle TextStyle 更改下拉对话框标题样式。
dropdownItemStyle TextStyle 更改下拉对话框项样式。
dropdownDialogRadius double 更改下拉对话框半径。
searchBarRadius double 更改搜索栏半径。
defaultCountry CscCountry 设置默认国家。
disableCountry Boolean 禁用国家下拉菜单(需与默认国家一起使用)。
countryFilter List of CscCountry 仅显示指定国家。
countrySearchPlaceholder String 国家搜索字段占位符。
stateSearchPlaceholder String 州搜索字段占位符。
citySearchPlaceholder String 城市搜索字段占位符。
countryDropdownLabel String 国家下拉菜单标签。
stateDropdownLabel String 州下拉菜单标签。
cityDropdownLabel String 城市下拉菜单标签。

示例代码

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'CSC Picker Plus Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const MyHomePage(title: 'CSC Picker Plus'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  /// Variables to store country state city data in onChanged method.
  String countryValue = "";
  String stateValue = "";
  String cityValue = "";
  String address = "";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: Center(
        child: Container(
          padding: const EdgeInsets.symmetric(horizontal: 20),
          height: 600,
          child: Column(
            children: [
              /// Adding CSC Picker Plus Widget in app
              CSCPickerPlus(
                showStates: true,
                showCities: true,
                flagState: CountryFlag.ENABLE,
                countryStateLanguage: CountryStateLanguage.englishOrNative,
                cityLanguage: CityLanguage.native,
                dropdownDecoration: BoxDecoration(
                  borderRadius: const BorderRadius.all(Radius.circular(10)),
                  color: Colors.white,
                  border: Border.all(color: Colors.grey.shade300, width: 1),
                ),
                disabledDropdownDecoration: BoxDecoration(
                  borderRadius: const BorderRadius.all(Radius.circular(10)),
                  color: Colors.grey.shade200,
                  border: Border.all(color: Colors.grey.shade300, width: 1),
                ),
                countryDropdownLabel: "Country",
                stateDropdownLabel: "State",
                cityDropdownLabel: "City",
                selectedItemStyle: const TextStyle(
                  color: Colors.black,
                  fontSize: 14,
                ),
                dropdownHeadingStyle: const TextStyle(
                  color: Colors.black,
                  fontSize: 17,
                  fontWeight: FontWeight.bold,
                ),
                dropdownItemStyle: const TextStyle(
                  color: Colors.black,
                  fontSize: 14,
                ),
                dropdownDialogRadius: 10.0,
                searchBarRadius: 10.0,
                onCountryChanged: (value) {
                  setState(() {
                    countryValue = value;
                  });
                },
                onStateChanged: (value) {
                  if (value != null) {
                    setState(() {
                      stateValue = value;
                    });
                  }
                },
                onCityChanged: (value) {
                  if (value != null) {
                    setState(() {
                      cityValue = value;
                    });
                  }
                },
              ),
              TextButton(
                onPressed: () {
                  setState(() {
                    address = "$cityValue, $stateValue, $countryValue";
                  });
                },
                child: const Text("Print Data"),
              ),
              Text(address),
            ],
          ),
        ),
      ),
    );
  }
}

联系方式

如有任何问题或疑问,请联系:

特别感谢

特别感谢 Altaf Razzaque 的 csc_picker


更多关于Flutter选择器插件csc_picker_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter选择器插件csc_picker_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用csc_picker_plus插件的示例代码。csc_picker_plus是一个功能强大的选择器插件,支持日期选择、时间选择、地址选择等多种选择器。

步骤1:添加依赖

首先,在你的pubspec.yaml文件中添加csc_picker_plus依赖:

dependencies:
  flutter:
    sdk: flutter
  csc_picker_plus: ^最新版本号  # 请替换为最新版本号

然后运行flutter pub get来获取依赖。

步骤2:导入插件

在你的Dart文件中导入csc_picker_plus

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

步骤3:使用选择器

日期选择器

以下是一个简单的日期选择器示例:

void _showDatePicker() async {
  DateTime? pickedDate = await CSCPickerPlus.showDatePicker(
    context: context,
    startDate: DateTime(1900),
    endDate: DateTime.now(),
    pickerMode: PickerDateMode.date,
    locale: Locale('zh'),
    confirmText: '确定',
    cancelText: '取消',
  );

  if (pickedDate != null) {
    print('选择的日期: ${pickedDate.toLocal()}');
  }
}

在按钮点击事件中调用_showDatePicker

TextButton(
  onPressed: _showDatePicker,
  child: Text('选择日期'),
)

时间选择器

以下是一个简单的时间选择器示例:

void _showTimePicker() async {
  TimeOfDay? pickedTime = await CSCPickerPlus.showTimePicker(
    context: context,
    is24HourFormat: true,
    locale: Locale('zh'),
    confirmText: '确定',
    cancelText: '取消',
  );

  if (pickedTime != null) {
    print('选择的时间: ${pickedTime.format(context)}');
  }
}

在按钮点击事件中调用_showTimePicker

TextButton(
  onPressed: _showTimePicker,
  child: Text('选择时间'),
)

地址选择器(省市区三级联动)

以下是一个简单的地址选择器示例:

void _showAddressPicker() async {
  AddressPickerResult? result = await CSCPickerPlus.showAddressPicker(
    context: context,
    confirmText: '确定',
    cancelText: '取消',
  );

  if (result != null && result.selectedAddresses.length == 3) {
    String province = result.selectedAddresses[0] ?? '';
    String city = result.selectedAddresses[1] ?? '';
    String district = result.selectedAddresses[2] ?? '';
    print('选择的地址: $province, $city, $district');
  }
}

在按钮点击事件中调用_showAddressPicker

TextButton(
  onPressed: _showAddressPicker,
  child: Text('选择地址'),
)

完整示例

将上述代码整合到一个完整的Flutter页面中:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  void _showDatePicker() async {
    DateTime? pickedDate = await CSCPickerPlus.showDatePicker(
      context: context,
      startDate: DateTime(1900),
      endDate: DateTime.now(),
      pickerMode: PickerDateMode.date,
      locale: Locale('zh'),
      confirmText: '确定',
      cancelText: '取消',
    );

    if (pickedDate != null) {
      print('选择的日期: ${pickedDate.toLocal()}');
    }
  }

  void _showTimePicker() async {
    TimeOfDay? pickedTime = await CSCPickerPlus.showTimePicker(
      context: context,
      is24HourFormat: true,
      locale: Locale('zh'),
      confirmText: '确定',
      cancelText: '取消',
    );

    if (pickedTime != null) {
      print('选择的时间: ${pickedTime.format(context)}');
    }
  }

  void _showAddressPicker() async {
    AddressPickerResult? result = await CSCPickerPlus.showAddressPicker(
      context: context,
      confirmText: '确定',
      cancelText: '取消',
    );

    if (result != null && result.selectedAddresses.length == 3) {
      String province = result.selectedAddresses[0] ?? '';
      String city = result.selectedAddresses[1] ?? '';
      String district = result.selectedAddresses[2] ?? '';
      print('选择的地址: $province, $city, $district');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('csc_picker_plus 示例'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextButton(
              onPressed: _showDatePicker,
              child: Text('选择日期'),
            ),
            SizedBox(height: 20),
            TextButton(
              onPressed: _showTimePicker,
              child: Text('选择时间'),
            ),
            SizedBox(height: 20),
            TextButton(
              onPressed: _showAddressPicker,
              child: Text('选择地址'),
            ),
          ],
        ),
      ),
    );
  }
}

以上代码展示了如何在Flutter中使用csc_picker_plus插件进行日期、时间和地址选择。希望这对你有所帮助!

回到顶部