Flutter日期时间选择插件date_time_field的使用

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

Flutter日期时间选择插件date_time_field的使用

Demo App
Pub github license

DateTimeField 包装了一个 TextField 并将其与包含的表单集成。这提供了额外的功能,如验证和其他 FormField 小部件的集成。

开始使用

在项目的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  date_time_field: ^1.0.0

导入包

在 Dart 文件中导入 date_time_field 包:

import 'package:date_time_field/date_time_field.dart';

示例

以下是一个完整的示例,展示了如何在 Flutter 应用程序中使用 DateTimeField

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:date_time_field/date_time_field.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(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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> {
  bool loading = false;
  DateTime? dob;
  String name = '';

  late DateEditingController dobController;
  late TextEditingController nameController;

  [@override](/user/override)
  void initState() {
    super.initState();
    dobController = DateEditingController(
      date: DateTime(2020, 1, 1),
      initialDate: DateTime(2020, 9, 1),
      firstDate: DateTime(2019, 3, 4),
      lastDate: DateTime(2022, 4, 4),
      format: DateFormat('yyyy/MM/dd'),
    );
    dobController.addListener(() => {dob = dobController.date});
    nameController = TextEditingController();
    nameController.addListener(() => {name = nameController.text});
  }

  [@override](/user/override)
  void dispose() {
    dobController.dispose();
    nameController.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    var colorScheme = Theme.of(context).colorScheme;
    return Scaffold(
      body: ListView(
        children: [
          TextFormField(
            controller: nameController,
            decoration: InputDecoration(
              border: const OutlineInputBorder(),
              labelText: '我的名字',
              suffixIcon: IconButton(
                onPressed: nameController.clear,
                icon: const Icon(Icons.clear),
              ),
            ),
          ),
          const SizedBox(height: 20),
          DateTimeField(
            controller: dobController,
            decoration: InputDecoration(
              border: const OutlineInputBorder(),
              labelText: '我的生日',
              suffixIcon: IconButton(
                onPressed: dobController.clear,
                icon: const Icon(Icons.clear),
              ),
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        heroTag: null,
        tooltip: '提交',
        onPressed: () async {
          try {
            loading = true;
            setState(() {});
          } catch (error) {
          } finally {
            loading = false;
            setState(() {});
          }
        },
        backgroundColor: colorScheme.surface,
        child: loading
            ? const CircularProgressIndicator()
            : Icon(
                Icons.check,
                color: colorScheme.primary,
              ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter中使用date_time_field插件来选择日期和时间的代码案例。date_time_field是一个方便的选择日期和时间的插件,你可以通过它轻松地在Flutter应用中实现日期时间选择器。

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

dependencies:
  flutter:
    sdk: flutter
  date_time_field: ^x.y.z  # 请替换为最新版本号

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

接下来,你可以在你的Flutter应用中使用DateTimeField组件。以下是一个完整的示例代码:

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

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

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

class DateTimePickerScreen extends StatefulWidget {
  @override
  _DateTimePickerScreenState createState() => _DateTimePickerScreenState();
}

class _DateTimePickerScreenState extends State<DateTimePickerScreen> {
  DateTime? selectedDateTime;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('DateTime Picker Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Date and Time: ${selectedDateTime != null ? selectedDateTime!.toLocal().toString() : 'Not selected'}',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            DateTimeField(
              decoration: InputDecoration(
                labelText: 'Select Date and Time',
                border: OutlineInputBorder(),
              ),
              format: DateFormat("yyyy-MM-dd HH:mm"),
              onShowPicker: (context, currentValue) async {
                final DateTime? newDateTime = await showDateTimePicker(
                  context: context,
                  initialDate: currentValue ?? DateTime.now(),
                  firstDate: DateTime(2000),
                  lastDate: DateTime(2101),
                  builder: (BuildContext context, Widget? child) {
                    return Theme(
                      data: ThemeData.light().copyWith(
                        colorScheme: ColorScheme.fromSeed(
                          seedColor: Colors.blue,
                        ),
                      ),
                      child: child!,
                    );
                  },
                );
                if (newDateTime != null && newDateTime != currentValue) {
                  setState(() {
                    selectedDateTime = newDateTime;
                  });
                }
              },
              validator: (value) {
                if (value == null) {
                  return 'Please select a date and time';
                }
                return null;
              },
              initialValue: selectedDateTime,
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个DateTimeField组件。当用户点击输入框时,会弹出一个日期时间选择器。选择完成后,选中的日期和时间会显示在输入框下方。

  • DateTimeField组件的decoration属性用于设置输入框的样式。
  • format属性用于指定日期时间的显示格式。
  • onShowPicker属性是一个回调函数,当用户点击输入框时会触发这个函数,显示日期时间选择器。选择完成后,通过setState更新选中的日期时间。
  • validator属性用于验证用户输入,如果未选择日期时间,则返回一个错误信息。
  • initialValue属性用于设置初始选中的日期时间。

希望这个示例对你有帮助!如果你有任何进一步的问题,请随时提问。

回到顶部