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插件进行日期、时间和地址选择。希望这对你有所帮助!
        
      
            
            
            





