我的订单状态为4:正在准备,待处理,正在交付和已交付。当订单状态从一个更改为另一个时,我想向用户显示更改通知。
*我已经使用了本地通知插件。在此处显示的订单页面小部件中,它是由上方的流触发的,该流从fire-base获取订单。 *这就是为什么我认为每次状态更改时都会重新构建orderPage,并且将重新调用initstate并发送具有新状态的新通知msg,但这没有发生。
*我真正想要的是使我能够监听状态的东西,当发生更改时,将调用函数“ singleNotification”来显示通知。 任何帮助将不胜感激。
class OrderPage extends StatefulWidget {
const OrderPage({
Key key,
@required this.order,
}) : super(key: key);
final Order order;
@override
OrderPageState createState() {
return new OrderPageState();
}
}
class OrderPageState extends State<OrderPage> {
final DateTime now = DateTime.now().toUtc().add(
Duration(seconds: 3),
);
String title = "notification";
String msg = "";
FlutterLocalNotificationsPlugin localNotificationsPlugin =
FlutterLocalNotificationsPlugin();
initializeNotifications() async {
var initializeAndroid =
AndroidInitializationSettings('@mipmap/ic_launcher');
var initializeIOS = IOSInitializationSettings();
var initSettings = InitializationSettings(initializeAndroid, initializeIOS);
await localNotificationsPlugin.initialize(initSettings);
}
Future singleNotification(
DateTime datetime, String message, String subtext, int hashcode,
{String sound}) async {
var androidChannel = AndroidNotificationDetails(
'channel-id',
'channel-name',
'channel-description',
importance: Importance.Max,
priority: Priority.Max,
);
var iosChannel = IOSNotificationDetails();
var platformChannel = NotificationDetails(androidChannel, iosChannel);
localNotificationsPlugin.schedule(
hashcode, message, subtext, datetime, platformChannel,
payload: hashcode.toString());
}
@override
void initState() {
super.initState();
getMsgState(widget.order.status);
initializeNotifications();
singleNotification(
now,
title,
msg,
98123871,
);
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
getMsgState(widget.order.status);
initializeNotifications();
singleNotification(
now,
title,
msg,
98123871,
);
}
Widget build(BuildContext context) {
return Container();
}
String getMsgState(String orderStatus) {
switch (orderStatus) {
case 'pending':
return msg = "Your order is pending";
break;
case 'preparing':
return msg = "your order is currently preparing";
break;
case 'delivering':
return msg = "your order is currently delivering";
break;
case 'delivered':
return msg = "Your order is delivered";
default:
return msg = "CustomStepState.Complete";
break;
}
}
答案 0 :(得分:0)
如果我理解正确,Firebase会知道订单状态何时更改。并发送通知。您想将其展示给用户。 您可以使用FCM和Firebase应用内通知。我的一个项目对服务器是否进行处理以及Flutter移动应用程序显示状态有类似的要求。我做了以下事情:
示例代码段:
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
Helper.write('on message $message');
//Map data = json.decode(message);
this.scaffoldKey.currentState.showSnackBar(SnackBar(content: Text(message['aps']['alert']['body']),));
},
onResume: (Map<String, dynamic> message) async {
Helper.write('on resume $message');
},
onLaunch: (Map<String, dynamic> message) async {
Helper.write('on launch $message');
},
);
analytics.logEvent(name:'firebaseCloudMessaging_Listeners_Done',parameters:null);
}