Flutter日期选择器插件cupertino_date_picker_w_controller的使用

Flutter日期选择器插件cupertino_date_picker_w_controller的使用

特性

此插件提供了一个具有控制器的Cupertino风格日期选择器。

控制器

允许通过动画改变日期。

自定义化

允许自定义日期选择器。

完整示例

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

import 'package:cupertino_date_picker_w_controller/cupertino_date_picker_w_controller.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: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  late CustomDatePickerController controller;
  String date = DateTime.now().toString();

  @override
  void initState() {
    super.initState();
    // 初始化控制器
    controller = CustomDatePickerController(
      // 设置最小日期为1900年
      minimumDate: DateTime(1900),
      // 设置最大日期为2100年
      maximumDate: DateTime(2100),
      // 初始日期为当前日期
      initialDateTime: DateTime.now(),
    );
  }

  @override
  void dispose() {
    // 释放控制器资源
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 显示当前日期
            Text(date),
            SizedBox(
              height: 300.0,
              width: MediaQuery.of(context).size.width - 40.0,
              // 使用自定义日期选择器
              child: CustomDatePicker(
                controller: controller,
                // 日期变化时更新UI
                onDateTimeChange: (newDate) {
                  setState(() {
                    date = newDate.toString();
                  });
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 导入库:

    import 'package:cupertino_date_picker_w_controller/cupertino_date_picker_w_controller.dart';
    import 'package:flutter/material.dart';
    
  2. 初始化应用:

    void main() {
      runApp(const MyApp());
    }
    
  3. 创建应用:

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
            useMaterial3: true,
          ),
          home: const MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
  4. 创建主页面:

    class MyHomePage extends StatefulWidget {
      const MyHomePage({super.key, required this.title});
    
      final String title;
    
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
  5. 实现主页面状态管理:

    class _MyHomePageState extends State<MyHomePage> {
      late CustomDatePickerController controller;
      String date = DateTime.now().toString();
    
      @override
      void initState() {
        super.initState();
        controller = CustomDatePickerController(
          minimumDate: DateTime(1900),
          maximumDate: DateTime(2100),
          initialDateTime: DateTime.now(),
        );
      }
    
      @override
      void dispose() {
        controller.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            backgroundColor: Theme.of(context).colorScheme.inversePrimary,
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(date),
                SizedBox(
                  height: 300.0,
                  width: MediaQuery.of(context).size.width - 40.0,
                  child: CustomDatePicker(
                    controller: controller,
                    onDateTimeChange: (newDate) {
                      setState(() {
                        date = newDate.toString();
                      });
                    },
                  ),
                ),
              ],
            ),
          ),
        );
      }
    }
    

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

1 回复

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


cupertino_date_picker_w_controller 是一个Flutter插件,用于在iOS风格的日期选择器中添加控制器功能。它允许你以编程方式控制日期选择器的行为,例如设置初始日期、获取选中的日期等。

以下是使用 cupertino_date_picker_w_controller 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  cupertino_date_picker_w_controller: ^1.0.0  # 请确保使用最新版本

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

2. 导入插件

在你的Dart文件中导入插件:

import 'package:cupertino_date_picker_w_controller/cupertino_date_picker_w_controller.dart';

3. 创建日期选择器

你可以使用 CupertinoDatePickerWithController 来创建日期选择器。你还可以通过 CupertinoDatePickerController 来控制日期选择器的行为。

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

class _MyHomePageState extends State<MyHomePage> {
  final CupertinoDatePickerController _datePickerController = CupertinoDatePickerController();
  DateTime? _selectedDate;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Cupertino Date Picker with Controller'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              _selectedDate == null
                  ? 'No date selected'
                  : 'Selected Date: ${_selectedDate!.toLocal()}'.split(' ')[0],
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                showModalBottomSheet(
                  context: context,
                  builder: (BuildContext context) {
                    return CupertinoDatePickerWithController(
                      mode: CupertinoDatePickerMode.date,
                      initialDateTime: DateTime.now(),
                      minimumDate: DateTime(2000),
                      maximumDate: DateTime(2100),
                      controller: _datePickerController,
                      onDateTimeChanged: (DateTime newDate) {
                        setState(() {
                          _selectedDate = newDate;
                        });
                      },
                    );
                  },
                );
              },
              child: Text('Show Date Picker'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _datePickerController.setDate(DateTime(2023, 10, 1));
              },
              child: Text('Set Date to 2023-10-01'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 使用控制器

在上面的例子中,我们创建了一个 CupertinoDatePickerController 实例 _datePickerController,并将其传递给 CupertinoDatePickerWithController。你可以通过控制器来设置日期选择器的初始日期,或者以编程方式更新日期。

例如,_datePickerController.setDate(DateTime(2023, 10, 1)); 会将日期选择器的日期设置为 2023年10月1日

5. 处理日期选择

onDateTimeChanged 回调中,你可以获取用户选择的日期,并将其更新到UI中。

onDateTimeChanged: (DateTime newDate) {
  setState(() {
    _selectedDate = newDate;
  });
},

6. 其他配置

你可以通过 CupertinoDatePickerWithController 的其他属性来配置日期选择器的行为,例如设置最小日期、最大日期、选择模式(日期、时间、日期时间)等。

mode: CupertinoDatePickerMode.date, // 选择模式:日期、时间、日期时间
initialDateTime: DateTime.now(), // 初始日期
minimumDate: DateTime(2000), // 最小日期
maximumDate: DateTime(2100), // 最大日期
回到顶部