Flutter选择器插件csc_picker_plus的使用
Flutter选择器插件csc_picker_plus的使用
csc_picker_plus
csc_picker_plus
是一个Flutter包,用于以阿拉伯语、英语或根据选择的母语显示国家、州和城市的列表。它还允许用户搜索全球的国家、州和城市。
布局示例 | 语言示例 | 垂直布局 |
---|---|---|
国家和州视图 | 国家视图 |
---|---|
新特性
- 首个支持多语言数据库的包:库提供了一个包含多种语言(包括阿拉伯语)支持的国家、州和城市的数据库。
- 双语显示国家和州:可以以阿拉伯语或英语(或如果不可用则为母语)显示国家和州。
- 本地语言显示城市:库允许以国家的本地语言显示城市。
- 双语搜索:可以以阿拉伯语或英语搜索国家和州,提升用户体验。
- 灵活的位置选择:库允许开发者根据需要配置选择过程,使用户可以选择仅国家,或国家和州,或国家、州和城市。
- 可定制的显示选项:可以自定义下拉菜单的设计和外观以适应应用程序的要求。
使用方法
要在项目中使用此包,请在 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),
],
),
),
),
);
}
}
联系方式
如有任何问题或疑问,请联系:
- 邮箱:eng.hezbr@gmail.com
- GitHub:Hezbr Al-humaidi
- LinkedIn:Hezbr Al-humaidi
特别感谢
特别感谢 Altaf Razzaque 的 csc_picker。
更多关于Flutter选择器插件csc_picker_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于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
插件进行日期、时间和地址选择。希望这对你有所帮助!