如何在颤动中将字符串转换为以小时、分钟、秒为整数的时间?

How to convert String to Time in Hour, Minute, Second as integer in flutter?

我正在制作一个应用程序,我想在 flutter_local_notification 包的帮助下向用户发送通知。我想在每天的特定时间向用户发送通知,为此,我正在使用以下功能:

Future<void> showDailyAtTime() async {
////////// <<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>
var time = Time(16, 02, 00); ////// line 1 <---------- (Hour, Minute, Second)
////////// <<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>
var androidChannelSpecifics = AndroidNotificationDetails(
  'CHANNEL_ID 2',
  'CHANNEL_NAME 2',
  "CHANNEL_DESCRIPTION 2",
  importance: Importance.max,
  priority: Priority.high,
);
var iosChannelSpecifics = IOSNotificationDetails();
var platformChannelSpecifics =
NotificationDetails(android: androidChannelSpecifics, iOS: iosChannelSpecifics);
await flutterLocalNotificationsPlugin.showDailyAtTime(
  0,
  'Test Title at ${time.hour}:${time.minute}.${time.second}',
  'Test Body', //null
  time,
  platformChannelSpecifics,
  payload: 'Test Payload',
 );
}

我正在使用这样的共享首选项来存储时间:

ttime = '${time.hour} : ${time.minute} : ${time.second}';

然后我这样设置:

Future<void> _setNotifyTime() async{
final prefs = await SharedPreferences.getInstance();
final savedNotifyTime = await _getStringFromSharedPrefs();
await prefs.setString('notificationTime', ttime);
//print("this $savedNotifyTime");
return savedNotifyTime;
}

然后我在以下代码的帮助下从共享首选项中获取:

Future<String> _getStringFromSharedPrefs() async{
final prefs = await SharedPreferences.getInstance();
notifyTime = prefs.getString('notificationTime');
return notifyTime;
}

如何将保存的时间转换为所需的格式(如第 1 行所示),值是 int? 我该怎么做?请帮助我。

提前感谢您的回复

var splited = notifyTime.split(':');
int hour = int.parse(splited[0]);
int minute = int.parse(splited[1]);
int second = int.parse(splited[2]);

您可以像 的答案中那样进行模式拆分,或者您自己保存解析逻辑并将其存储为整数。


您可以使用 setInt()

进行设置
prefs.setInt("H",time.hours);
prefs.setInt("m",time.minutes);
prefs.setInt("s",time.seconds);

要获取它,您可以使用 getInt()

int hours = prefs.getInt("H");
int mins = prefs.getInt("m");
int secs = prefs.getInt("s");

然后从您的方法 return 时间对象

return Time(hours,mins,secs);