作者:福州-台江_616 | 来源:互联网 | 2023-09-08 11:24
我正在开发一款Flutter应用程序。我一天中有很多次,我想在任何时候显示警报通知,并且如果应用程序正在运行,也要更改其用户界面。
因此,我寻找了哪些选择,发现了以下内容
- flutter-workmanager 和 background_fetch
之类的插件
- 使用渠道实施本机代码
我的问题是:
- 哪种选择最适合我的用例?
- 是否更好地实现按时间延迟或使用警报管理器的时间计数器。
- 如何在后台任务和应用之间传递数据(当前时间),以便更新UI?
PS:目前,我们对至少适用于Android的解决方案感兴趣。
我认为您不需要仅后台任务来显示通知。使用flutter_local_notifications应该足以完成您的任务。您可以使用此插件安排特定日期时间的通知。在应用程序内部,您可以使用Timer在特定日期时间触发。我给你看一个简单的例子:
class _HomePageState extends State {
FlutterLocalNotificationsPlugin notifPlugin;
@override
void initState() {
super.initState();
notifPlugin = FlutterLocalNotificationsPlugin();
}
Future scheduleNotification(DateTime dateTime,String title) async {
final now = DateTime.now();
if (dateTime.isBefore(now)) {
// dateTime is past
return;
}
final difference = dateTime.difference(now);
Timer(difference,() {
showDialog(
context: this.context,builder: (context) {
return AlertDialog(
content: Text(title),);
}
);
});
await notifPlugin.schedule(title.hashCode,title,dateTime,platformChannelSpecifics,payload: 'test');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),body: SafeArea(
child: Container()
),floatingActionButton: Builder(
builder: (context) {
return FloatingActionButton(
onPressed: () {
final snackbar = SnackBar(content: Text('planned notification'),duration: Duration(seconds: 3));
Scaffold.of(context).showSnackBar(snackbar);
scheduleNotification(DateTime.now().add(Duration(seconds: 2)),'Hello');
},);
}
),);
}
}
但是,如果您需要进行一些计算或数据提取,那么background_fetch是您所需要的。唯一的问题是Apple在大多数情况下不允许后台任务。