Flutter多功能选择器插件onepicker的使用

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

Flutter多功能选择器插件onepicker的使用

特性

  • 日期选择器
  • 日期范围选择器
  • 国家选择器

开始使用

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

pubspec.yaml 中添加依赖

onepicker: ^0.1.6

导入 Dart 包

import 'package:onepicker/onepicker.dart';

使用日期选择器

OnePicker().date(
  context,
  selectedColor: Colors.green,
  bgColor: Colors.white,
  onTap: (value){
    dateSeleted = value.toString();
    setState(() {});
  }
);

使用日期范围选择器

OnePicker().dateRange(
  context,
  onTap: (from, to){
    dateFromSeleted = DateFormat('yyyy-MM-dd').format(from).toString();
    dateToSeleted = DateFormat('yyyy-MM-dd').format(to).toString();
    setState(() {});
  }
);

使用国家选择器

OnePicker().country(
  context,
  onTap: (value){
    countryFlagSeleted = value.flag;
    countryCodeSeleted = value.code;
    countryNameSeleted = value.name;
    setState(() {});
  }
);

示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用程序中使用 onepicker 插件。

import 'package:flutter/material.dart';
import 'package:onepicker/onepicker.dart';
import 'package:intl/intl.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'One Picker',
      theme: ThemeData(
        primarySwatch: Colors.green,
        primaryColor: Colors.green,
      ),
      home: const MyHomePage(title: 'One Picker'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String dateSeleted = " - ";
  String dateFromSeleted = " - ";
  String dateToSeleted = " - ";
  String countryFlagSeleted = " - ";
  String countryCodeSeleted = " - ";
  String countryNameSeleted = " - ";

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Text(
              'Selected Date: $dateSeleted',
              style: Theme.of(context).textTheme.titleLarge,
              textAlign: TextAlign.center,
            ),
            const SizedBox(height: 10),
            GestureDetector(
              onTap: () {
                OnePicker().date(
                  context,
                  selectedColor: Colors.green,
                  bgColor: Colors.white,
                  onTap: (value) {
                    dateSeleted = DateFormat('yyyy-MM-dd').format(value).toString();
                    setState(() {});
                  }
                );
              },
              child: Container(
                padding: const EdgeInsets.all(10),
                decoration: BoxDecoration(
                  border: Border.all(
                    color: Colors.green,
                    width: 4
                  ),
                  borderRadius: const BorderRadius.all(Radius.circular(50))
                ),
                child: const Text(
                  'Date Picker',
                  style: TextStyle(color: Colors.green, fontSize: 20, fontWeight: FontWeight.bold),
                  textAlign: TextAlign.center,
                )
              ),
            ),
            const SizedBox(height: 20),
            Text(
              'Selected Date Range: $dateFromSeleted to $dateToSeleted',
              style: Theme.of(context).textTheme.titleLarge,
              textAlign: TextAlign.center,
            ),
            const SizedBox(height: 10),
            GestureDetector(
              onTap: () {
                OnePicker().dateRange(
                  context,
                  onTap: (from, to) {
                    dateFromSeleted = DateFormat('yyyy-MM-dd').format(from).toString();
                    dateToSeleted = DateFormat('yyyy-MM-dd').format(to).toString();
                    setState(() {});
                  }
                );
              },
              child: Container(
                padding: const EdgeInsets.all(10),
                decoration: BoxDecoration(
                  border: Border.all(
                    color: Colors.green,
                    width: 4
                  ),
                  borderRadius: const BorderRadius.all(Radius.circular(50))
                ),
                child: const Text(
                  'Date Range Picker',
                  style: TextStyle(color: Colors.green, fontSize: 20, fontWeight: FontWeight.bold),
                  textAlign: TextAlign.center,
                )
              ),
            ),
            const SizedBox(height: 20),
            Text(
              'Selected Country'
                  '\n Flag: $countryFlagSeleted'
                  '\n Code: $countryCodeSeleted'
                  '\n Name: $countryNameSeleted'
                  '',
              style: Theme.of(context).textTheme.titleLarge,
              textAlign: TextAlign.left,
            ),
            const SizedBox(height: 10),
            GestureDetector(
              onTap: () {
                OnePicker().country(
                  context,
                  onTap: (value) {
                    countryFlagSeleted = value.flag;
                    countryCodeSeleted = value.code;
                    countryNameSeleted = value.name;
                    setState(() {});
                  }
                );
              },
              child: Container(
                padding: const EdgeInsets.all(10),
                decoration: BoxDecoration(
                  border: Border.all(
                    color: Colors.green,
                    width: 4
                  ),
                  borderRadius: const BorderRadius.all(Radius.circular(50))
                ),
                child: const Text(
                  'Country Picker',
                  style: TextStyle(color: Colors.green, fontSize: 20, fontWeight: FontWeight.bold),
                  textAlign: TextAlign.center,
                )
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter中使用onepicker插件来实现多功能选择器的示例代码。onepicker 是一个功能强大的选择器插件,可以用于日期、时间、颜色、地址等多种选择需求。以下示例将展示如何集成并使用该插件来选择日期。

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

dependencies:
  flutter:
    sdk: flutter
  onepicker: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

接下来,创建一个简单的Flutter应用来使用onepicker。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'OnePicker Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  DateTime? selectedDate;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('OnePicker Date Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              selectedDate == null
                  ? 'No date selected'
                  : 'Selected Date: ${selectedDate!.toLocal()}',
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _showDatePicker(context);
              },
              child: Text('Select Date'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _showDatePicker(BuildContext context) async {
    final result = await showDatePickerPicker(
      context: context,
      initialDate: selectedDate ?? DateTime.now(),
      firstDate: DateTime(2000),
      lastDate: DateTime(2101),
      locale: Localizations.localeOf(context),
      pickerMode: PickerMode.date, // You can also use PickerMode.dateTime, PickerMode.time, etc.
      pickerTheme: PickerThemeData(
        backgroundColor: Colors.white,
        textStyle: TextStyle(color: Colors.black),
      ),
    );

    if (result != null && result != selectedDate) {
      setState(() {
        selectedDate = result;
      });
    }
  }
}

// Extension method to show the OnePicker dialog
Future<DateTime?> showDatePickerPicker({
  required BuildContext context,
  required DateTime initialDate,
  required DateTime firstDate,
  required DateTime lastDate,
  required Locale locale,
  required PickerMode pickerMode,
  required PickerThemeData pickerTheme,
}) async {
  final OnePickerController controller = OnePickerController(
    data: OnePickerData(
      first: firstDate,
      last: lastDate,
      selected: initialDate,
      locale: locale,
      mode: pickerMode,
    ),
    theme: pickerTheme,
  );

  final OnePickerResponse? response = await showDialog<OnePickerResponse?>(
    context: context,
    builder: (context) {
      return OnePicker(
        controller: controller,
      );
    },
  );

  if (response != null && response.confirmed) {
    return response.data!.selectedDateTime!;
  }

  return null;
}

解释

  1. 添加依赖:在pubspec.yaml文件中添加onepicker依赖。
  2. 创建主应用MyApp是根widget,它定义了应用的主题和主页。
  3. 主页MyHomePage是一个有状态的widget,它包含一个显示选定日期的文本和一个按钮。
  4. 日期选择器_showDatePicker方法使用OnePicker显示日期选择器对话框。这里我们定义了一些参数,如初始日期、最小日期、最大日期、语言环境、选择模式等。
  5. 扩展方法showDatePickerPicker是一个扩展方法,用于封装显示日期选择器的逻辑。

这个示例展示了如何使用onepicker来选择日期,你可以根据需要调整参数来实现其他类型的选择器,如时间选择器、颜色选择器等。

回到顶部