Flutter时间选择插件time_of_day_widget的使用

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

Flutter时间选择插件time_of_day_widget的使用

time_of_day_widget 是一个基于 TimeOfDay 的状态变化小部件。它可以用来展示一天中的不同时间段,并且可以根据当前时间自动切换不同的显示效果。

完整示例代码

import 'package:flutter/material.dart';
import 'package:time_of_day_widget/models/time_of_day_range.dart';
import 'package:time_of_day_widget/time_of_day_widget.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Time Of Day Widget Example'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Column(
          children: [
            Text('Time Of Day Widget'),
            _buildTimeOfDayWidget(),
            Text('Time Of Day Range Widget'),
            _buildTimeOfDayRangesWidget()
          ],
        ));
  }

  // 构建一个TimeOfDayWidget实例
  TimeOfDayWidget _buildTimeOfDayWidget() {
    return TimeOfDayWidget(
      timeOfDayWidgetBuilders: [
        (context, timeOfDay, child) {
          return _TimeOfDaySampleWidget(
            imageAssetPath: "assets/images/twilight.png",
            timeOfDay: timeOfDay,
          );
        },
        (context, timeOfDay, child) {
          return _TimeOfDaySampleWidget(
            imageAssetPath: "assets/images/sunrise.png",
            timeOfDay: timeOfDay,
          );
        },
        (context, timeOfDay, child) {
          return _TimeOfDaySampleWidget(
            imageAssetPath: "assets/images/midday.png",
            timeOfDay: timeOfDay,
          );
        },
        (context, timeOfDay, child) {
          return _TimeOfDaySampleWidget(
            imageAssetPath: "assets/images/sunglow.png",
            timeOfDay: timeOfDay,
          );
        },
        (context, timeOfDay, child) {
          return _TimeOfDaySampleWidget(
            imageAssetPath: "assets/images/nightfall.png",
            timeOfDay: timeOfDay,
          );
        }
      ],
    );
  }

  // 构建一个TimeOfDayRangedWidget实例
  Widget _buildTimeOfDayRangesWidget() {
    return TimeOfDayRangedWidget(
      timeOfDayRanges: [
        TimeOfDayRange(
            from: TimeOfDay(hour: 1, minute: 0),
            to: TimeOfDay(hour: 5, minute: 0),
            builder: (context, timeOfDay, child) {
              return _TimeOfDaySampleWidget(
                imageAssetPath: "assets/images/twilight.png",
                timeOfDay: timeOfDay,
              );
            }),
        TimeOfDayRange(
            from: TimeOfDay(hour: 5, minute: 0),
            to: TimeOfDay(hour: 9, minute: 0),
            builder: (context, timeOfDay, child) {
              return _TimeOfDaySampleWidget(
                imageAssetPath: "assets/images/sunrise.png",
                timeOfDay: timeOfDay,
              );
            }),
        TimeOfDayRange(
            from: TimeOfDay(hour: 9, minute: 0),
            to: TimeOfDay(hour: 15, minute: 0),
            builder: (context, timeOfDay, child) {
              return _TimeOfDaySampleWidget(
                imageAssetPath: "assets/images/midday.png",
                timeOfDay: timeOfDay,
              );
            }),
        TimeOfDayRange(
            from: TimeOfDay(hour: 15, minute: 0),
            to: TimeOfDay(hour: 19, minute: 0),
            builder: (context, timeOfDay, child) {
              return _TimeOfDaySampleWidget(
                imageAssetPath: "assets/images/sunglow.png",
                timeOfDay: timeOfDay,
              );
            }),
        TimeOfDayRange(
            from: TimeOfDay(hour: 19, minute: 0),
            to: TimeOfDay(hour: 24, minute: 0),
            builder: (context, timeOfDay, child) {
              return _TimeOfDaySampleWidget(
                imageAssetPath: "assets/images/nightfall.png",
                timeOfDay: timeOfDay,
              );
            })
      ],
    );
  }
}

// 用于展示时间的样例小部件
class _TimeOfDaySampleWidget extends StatelessWidget {
  final TimeOfDay timeOfDay;
  final String imageAssetPath;

  const _TimeOfDaySampleWidget(
      {Key? key, required this.timeOfDay, required this.imageAssetPath})
      : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        height: 200,
        width: 300,
        decoration: BoxDecoration(
            image: DecorationImage(
                image: AssetImage(imageAssetPath), fit: BoxFit.cover)),
        child: Text(timeOfDay.format(context),
            style:
                Theme.of(context).textTheme.headline1!.copyWith(fontSize: 12)),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用time_of_day_widget插件的代码示例。这个插件允许用户选择一天中的时间(小时和分钟)。

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

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

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

接下来,你可以在你的Flutter项目中使用这个插件。以下是一个完整的示例代码,展示了如何使用time_of_day_widget来选择时间,并在选择后显示所选的时间。

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  TimeOfDay? selectedTime;

  void _selectTime() async {
    final TimeOfDay? result = await showTimePicker(
      context: context,
      initialTime: selectedTime ?? TimeOfDay.now(),
      builder: (context, currentTime) {
        return TimeOfDayWidget(
          time: currentTime,
          onTimeChanged: (newTime) {
            Navigator.of(context).pop(newTime);
          },
          locale: Localizations.localeOf(context),
        );
      },
    );

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Select Time'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              selectedTime == null
                  ? 'No time selected'
                  : '${selectedTime!.format(context)}',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _selectTime,
              child: Text('Select Time'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 添加依赖:在pubspec.yaml文件中添加了time_of_day_widget依赖。
  2. 创建主应用:使用MaterialApp创建了一个基本的Flutter应用。
  3. 创建主页:使用StatefulWidget创建了一个包含时间选择逻辑的页面。
  4. 显示时间选择器:在按钮点击事件中,使用showTimePicker函数显示时间选择器,并使用TimeOfDayWidget进行自定义。
  5. 更新UI:当用户选择时间后,更新UI以显示所选的时间。

请注意,time_of_day_widget插件的具体API可能会随着版本更新而变化,因此请参考官方文档以获取最新的使用方法和最佳实践。

回到顶部