颤振-成功付款时将数据设置到firebase

颤振-成功付款时将数据设置到firebase,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,1个列表\u配置文件: class DetailPage extends StatefulWidget { final DocumentSnapshot post; DetailPage({this.post}); @override _DetailPageState createState() => _DetailPageState(); } class _DetailPageState extends State<DetailPage> { b

1个列表\u配置文件:


class DetailPage extends StatefulWidget {
  final DocumentSnapshot post;


  DetailPage({this.post});

  @override
  _DetailPageState createState() => _DetailPageState();
}

class _DetailPageState extends State<DetailPage> {
  bool pressed = false;
  String taskname,tasksector,taskpocket,tasklandmark;
  int _myTaskType = 0;
  String taskVal;
  StateModel appState;
  bool _loadingVisible = false;


  @override
  Widget build(BuildContext context) {
//    final CounterBloc _counterBloc = BlocProvider.of<CounterBloc>(context);

    DateTime now = DateTime.now();
    String formattedDate = DateFormat('EEE d MMM y').format(now);

    // firebase location to be set
    confirm() { // for driver

      appState = StateWidget.of(context).state;
      //final userId = appState?.firebaseUserAuth?.uid ?? '';
      final w_fl = appState?.user?.w_fl ?? '';
      final firstName = appState?.user?.firstName ?? '';
      final number = appState?.user?.number ?? '';
      DocumentReference ds = Firestore.instance
          .collection("customer2")
          .document("${widget.post.data["driverNumber"]}")
          .collection("1")
          .document(formattedDate);

      Map<String, dynamic> data = {
        //"Status": firstName + " $lastName",
        "customerName":firstName,
        "customerNumber":number,
        "time":taskVal,
        "status": "Waiting...",
        "address":taskname,
        "sector":tasksector,
        "pocket":taskpocket,
        "landmark":tasklandmark,
        "payment":"X"
      };
      ds.setData(data).whenComplete(() {
        print('Task created');
      });
    }

     confirm2() { // to fetched only on customer side i.e yourBookings
      appState = StateWidget.of(context).state;
      //final userId = appState?.firebaseUserAuth?.uid ?? '';
      final w_fl = appState?.user?.w_fl ?? '';
      final firstName = appState?.user?.firstName ?? '';
      final lastName = appState?.user?.lastName ?? '';
      final number = appState?.user?.number ?? '';
      DocumentReference ds = Firestore.instance
          .collection("confirmed_c_rides2")
          .document(number)
          .collection('1')
          .document(formattedDate);

      Map<String, dynamic> data = {
        //"Status": firstName + " $lastName",
        "carImage": "${widget.post.data["carImage"]}",
        "driverImage": "${widget.post.data["driverImage"]}",
        "experience": "${widget.post.data["experience"]}",
        "firstName": "${widget.post.data["driverName"]}",
        "gender": "${widget.post.data["gender"]}",
        "time": taskVal,
        "driverNumber": "${widget.post.data["driverNumber"]}",
        //"status": "Waiting..."
        "payment":"Complete your payment to confirm"
      };
      ds.setData(data).whenComplete(() {
        print('Task created');
      });
    }

    return Scaffold()
2.省道


class CheckRazor extends StatefulWidget {

  @override
  _CheckRazorState createState() => _CheckRazorState();
}

class _CheckRazorState extends State<CheckRazor> {

  Razorpay _razorpay = Razorpay();
  var options;
  Future payData() async {
    try {
      _razorpay.open(options);
    } catch (e) {
      print("errror occured here is ......................./:$e");
    }

    _razorpay.on(Razorpay.EVENT_PAYMENT_SUCCESS, _handlePaymentSuccess);
    _razorpay.on(Razorpay.EVENT_PAYMENT_ERROR, _handlePaymentError);
  }

  void _handlePaymentSuccess(PaymentSuccessResponse response) async {
    print("payment has succedded");
    Navigator.pushAndRemoveUntil(
      context,
      MaterialPageRoute(
        builder: (BuildContext context) => SuccessPage(
          response: response,
        ),
      ),
      (Route<dynamic> route) => false,
    );
    _razorpay.clear();
    // Do something when payment succeeds
  }

  void _handlePaymentError(PaymentFailureResponse response) {..............}

  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    options = {.......}

  @override
  Widget build(BuildContext context) {

    return Scaffold(
RaisedButton(onPressed(){
confirm();
confirm2();}
);
  }

我想要的是仅在成功付款时向firebase创建数据。 在上面的代码中…我刚刚将两个不同的代码连接到firebase和payment上

1确认和确认2负责为firebase创建数据。 2\u handlePaymentSuccess负责成功付款。 请帮忙

使用共享的首选项, 外接程序列表.dart:

  void saveName() {
    savedNamePreferences(taskVal).then((_) {});}
并在另一个类即check.dart中调用getNamePreferences


class CheckRazor extends StatefulWidget {

  @override
  _CheckRazorState createState() => _CheckRazorState();
}

class _CheckRazorState extends State<CheckRazor> {

  Razorpay _razorpay = Razorpay();
  var options;
  Future payData() async {
    try {
      _razorpay.open(options);
    } catch (e) {
      print("errror occured here is ......................./:$e");
    }

    _razorpay.on(Razorpay.EVENT_PAYMENT_SUCCESS, _handlePaymentSuccess);
    _razorpay.on(Razorpay.EVENT_PAYMENT_ERROR, _handlePaymentError);
  }

  void _handlePaymentSuccess(PaymentSuccessResponse response) async {
    print("payment has succedded");
    Navigator.pushAndRemoveUntil(
      context,
      MaterialPageRoute(
        builder: (BuildContext context) => SuccessPage(
          response: response,
        ),
      ),
      (Route<dynamic> route) => false,
    );
    _razorpay.clear();
    // Do something when payment succeeds
  }

  void _handlePaymentError(PaymentFailureResponse response) {..............}

  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    options = {.......}

  @override
  Widget build(BuildContext context) {

    return Scaffold(
RaisedButton(onPressed(){
confirm();
confirm2();}
);
  }

Future<String> getNamePreferences() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  String name = prefs.getString("name");
  return name;
}