Flutter实现按6小时间隔显示早/中/晚问候语的代码求助
Flutter 根据6小时时间间隔显示问候语
以下是两种可直接复用的实现方案:
基础静态版本
适合不需要实时刷新的场景,页面初始化时获取一次时间并显示问候语:
import 'package:flutter/material.dart'; void main() => runApp(const GreetingApp()); class GreetingApp extends StatelessWidget { const GreetingApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('问候语演示')), body: Center( child: Text( _getGreetingText(), style: const TextStyle(fontSize: 26, fontWeight: FontWeight.w600), ), ), ), ); } String _getGreetingText() { final currentHour = DateTime.now().hour; if (currentHour >= 6 && currentHour < 12) return '早上好'; if (currentHour >= 12 && currentHour < 18) return '下午好'; if (currentHour >= 18 && currentHour < 24) return '晚上好'; return '夜深了,早点休息'; // 0-6点区间 } }
实时刷新版本
如果需要在时间跨区间时自动更新问候语(比如18点整自动从"下午好"切换到"晚上好"),可以结合定时器实现:
import 'package:flutter/material.dart'; import 'dart:async'; void main() => runApp(const GreetingApp()); class GreetingApp extends StatefulWidget { const GreetingApp({super.key}); @override State<GreetingApp> createState() => _GreetingAppState(); } class _GreetingAppState extends State<GreetingApp> { late Timer _refreshTimer; String _currentGreeting = ''; @override void initState() { super.initState(); _updateGreeting(); // 每分钟刷新一次,确保时间变化时自动更新内容 _refreshTimer = Timer.periodic(const Duration(minutes: 1), (_) => _updateGreeting()); } void _updateGreeting() { setState(() => _currentGreeting = _getGreetingText()); } String _getGreetingText() { final currentHour = DateTime.now().hour; if (currentHour >= 6 && currentHour < 12) return '早上好'; if (currentHour >= 12 && currentHour < 18) return '下午好'; if (currentHour >= 18 && currentHour < 24) return '晚上好'; return '夜深了,早点休息'; } @override void dispose() { _refreshTimer.cancel(); // 销毁页面时取消定时器,避免内存泄漏 super.dispose(); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('实时问候语')), body: Center( child: Text( _currentGreeting, style: const TextStyle(fontSize: 26, fontWeight: FontWeight.w600), ), ), ), ); } }
说明
- 时间按6小时划分为四个区间:6:00-12:00、12:00-18:00、18:00-24:00、0:00-6:00,你可以根据需求修改区间范围或对应问候语
- 核心逻辑集中在
_getGreetingText()函数中,只需调用该函数就能在任意Text组件中显示对应问候语 - 基础版本满足大多数静态展示场景;实时版本通过定时器自动更新状态,确保问候语随时间自动切换
内容的提问来源于stack exchange,提问作者KNGGEO
相关产品推荐
相关产品推荐

