Оплата через 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),
                        ),
                        );
                    }),

0 ответов

Другие вопросы по тегам