Оплата через razorpay на флаттер паутине выдает ошибку
Я реализовал платежный шлюз razorpay в своем проекте флаттера для магазина эко.Платеж отлично работает на мобильной платформе , но в Интернете это создает проблему. В Интернете пользователь перенаправляется на другой файл с именем webpayment для совершения платежа.
В Интернете, когда пользователь платит за элемент на странице списка, в первый раз, когда веб-платеж проходит успешно, пользователь перенаправляется на страницу сведений, а на странице сведений при нажатии кнопки «Назад» пользователь перенаправляется на страницу списка, где перечислены другие элементы. .Но когда пользователь платит за другой элемент на странице списка, сведения о предыдущем элементе, по которому была произведена оплата, отправляются на страницу веб-платежей, а не на элемент, на который щелкнул пользователь. Горячая перезагрузка в Интернете решает проблему, но теперь, если после совершения другого платежа пользователь пытается приобрести другой товар, детали предыдущего товара отправляются на страницу веб-оплаты. Это означает, что пользователю необходимо перезагрузить страницу в Интернете для совершения платежа. другой продукт.
Мобильное приложение работает нормально. Существует некоторая проблема с управлением состоянием, я думаю, на странице веб-платежей, из-за которой детали предыдущего приобретенного товара сохраняются.
Ниже приведен код веб-платежа, который перенаправляет пользователя со страницы списка на страницу веб-платежей:
class Webpayment extends StatefulWidget {
final String? name;
final Map? buyer;
final String? postId;
final String? userId;
final String? category;
final String? usercity;
final double? price;
Webpayment({
Key? key,
this.name,
this.buyer,
this.postId,
this.userId,
this.category,
this.usercity,
this.price,
}) : super(key: key);
@override
_WebpaymentState createState() => _WebpaymentState(this.name, this.buyer,
this.postId, this.userId, this.category, this.usercity, this.price);
}
class _WebpaymentState extends State<Webpayment>
with AutomaticKeepAliveClientMixin<Webpayment> {
final String? name;
final Map? buyer;
final String? postId;
final String? userId;
final String? category;
final String? usercity;
final double? price;
_WebpaymentState(this.name, this.buyer, this.postId, this.userId,
this.category, this.usercity, this.price);
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
super.build(context);
ui.platformViewRegistry.registerViewFactory("rzp-html", (int viewId) {
IFrameElement element = IFrameElement();
window.onMessage.forEach((element) {
print('Event Received in callback: ${element.data}');
if (element.data == 'MODAL_CLOSED') {
} else if (element.data == 'SUCCESS') {
print('PAYMENT SUCCESSFULL!!!!!!! ${widget.postId}');
var userid = auth.currentUser!.uid.toString();
FirebaseFirestore.instance
.collection('${widget.category}${widget.usercity}')
.doc(widget.postId)
.update({'buyer.$userid': "true", 'deal': "Completed"});
Navigator.push(
this.context,
MaterialPageRoute(
builder: (context) => CategoryFeedDetail(
postId: widget.postId,
userId: widget.userId,
category: widget.category,
usercity: widget.usercity,
),
));
}
});
element.src =
'assets/payments.html?name=${widget.name}&price=${widget.price}';
element.style.border = 'none';
return element;
});
return Scaffold(body: Builder(builder: (BuildContext context) {
return Container(
child: HtmlElementView(viewType: 'rzp-html'),
);
}));
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
@override
bool get wantKeepAlive => false;
}
После оплаты пользователь перенаправляется на страницу с подробной информацией, а на следующей странице с подробной информацией находится код, нажмите, чтобы перейти на страницу со списком.
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => CategoryFeed(
widget.userId, widget.usercity, widget.category),
),
);
}),