Bid Acceptance Widget in Flutter

 avatar
unknown
dart
5 months ago
24 kB
2
Indexable
  Widget bidAcceptView() {
    return SizedBox.expand(
      child: Stack(
        alignment: Alignment.bottomCenter,
        children: [
          servicesListData != null && duration >= 0
              ? Container(
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.only(topLeft: Radius.circular(2 * defaultRadius), topRight: Radius.circular(2 * defaultRadius)),
            ),
            child: SingleChildScrollView(
              // controller: scrollController,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Align(
                    alignment: Alignment.center,
                    child: Container(
                      margin: EdgeInsets.only(top: 16),
                      height: 6,
                      width: 60,
                      decoration: BoxDecoration(color: primaryColor, borderRadius: BorderRadius.circular(defaultRadius)),
                      alignment: Alignment.center,
                    ),
                  ),
                  SizedBox(height: 8),
                  Padding(
                    padding: EdgeInsets.only(left: 16),
                    child: Text(language.bid_for_ride, style: primaryTextStyle(size: 18)),
                  ),
                  SizedBox(height: 8),
                  Padding(
                    padding: EdgeInsets.all(16),
                    child: Column(
                      children: [
                        Row(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            ClipRRect(
                              borderRadius: BorderRadius.circular(defaultRadius),
                              child: commonCachedNetworkImage(servicesListData!.riderProfileImage.validate(), height: 35, width: 35, fit: BoxFit.cover),
                            ),
                            SizedBox(width: 12),
                            Expanded(
                              child: Column(
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                  Text('${servicesListData!.riderName.capitalizeFirstLetter()}',
                                      maxLines: 1, overflow: TextOverflow.ellipsis, style: boldTextStyle(size: 14)),
                                  SizedBox(height: 4),
                                  Text('${servicesListData!.riderEmail.validate()}', maxLines: 1, overflow: TextOverflow.ellipsis, style: secondaryTextStyle()),
                                ],
                              ),
                            ),
                          ],
                        ),
                        // SizedBox(height: 16,),
                        if (estimatedTotalPrice != null && estimatedDistance != null)
                          Container(
                            padding: EdgeInsets.symmetric(vertical: 8),
                            // decoration:BoxDecoration(color: !appStore.isDarkMode ? scaffoldColorLight : scaffoldColorDark, borderRadius: BorderRadius.all(radiusCircular(8)), border: Border.all(width: 1, color: dividerColor)),
                            child: Row(
                              crossAxisAlignment: CrossAxisAlignment.center,
                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                              mainAxisSize: MainAxisSize.max,
                              children: [
                                Expanded(
                                  child: Row(
                                    children: [
                                      Text('${language.estAmount}:', style: secondaryTextStyle(size: 16)),
                                      SizedBox(width: 4),
                                      printAmountWidget(amount: estimatedTotalPrice.toStringAsFixed(digitAfterDecimal), size: 14)
                                    ],
                                  ),
                                ),
                                Row(
                                  mainAxisAlignment: MainAxisAlignment.end,
                                  mainAxisSize: MainAxisSize.max,
                                  children: [
                                    Text('${language.distance}:', style: secondaryTextStyle(size: 16)),
                                    SizedBox(width: 4),
                                    Text('${estimatedDistance} ${distance_unit}', maxLines: 1, overflow: TextOverflow.ellipsis, style: boldTextStyle(size: 14)),
                                  ],
                                ),
                              ],
                            ),
                            width: context.width(),
                          ),
                        addressDisplayWidget(
                            endLatLong: LatLng(servicesListData!.endLatitude.toDouble(), servicesListData!.endLongitude.toDouble()),
                            endAddress: servicesListData!.endAddress,
                            startLatLong: LatLng(servicesListData!.startLatitude.toDouble(), servicesListData!.startLongitude.toDouble()),
                            startAddress: servicesListData!.startAddress),
                        if (servicesListData != null && servicesListData!.otherRiderData != null)
                          Divider(
                            color: Colors.grey.shade300,
                            thickness: 0.7,
                            height: 8,
                          ),
                        _bookingForView(),
                        SizedBox(height: 8),

                        Row(
                          children: [
                            Expanded(
                              child: inkWellWidget(
                                onTap: () {
                                  reqCheckCounter=0;
                                  rejectBid();
                                },
                                child: Container(
                                  padding: EdgeInsets.symmetric(vertical: 10, horizontal: 8),
                                  decoration: BoxDecoration(borderRadius: BorderRadius.circular(defaultRadius), border: Border.all(color: Colors.red)),
                                  child: Text(language.decline, style: boldTextStyle(color: Colors.red), textAlign: TextAlign.center),
                                ),
                              ),
                            ),
                            SizedBox(width: 16),
                            Expanded(
                              child: AppButtonWidget(
                                padding: EdgeInsets.symmetric(vertical: 12, horizontal: 8),
                                text: language.place_bid,
                                shapeBorder: RoundedRectangleBorder(borderRadius: BorderRadius.circular(defaultRadius)),
                                color: primaryColor,
                                textStyle: boldTextStyle(color: Colors.white),
                                onTap: () async{
                                  num x=num.tryParse(estimatedTotalPrice.toString())!.round()??0;
                                  bidAmountController.text=x.toString();
                                  await showModalBottomSheet(
                                  context: context,
                                  isDismissible: false,
                                  backgroundColor: Colors.white,
                                  isScrollControlled: true,
                                  builder: (context) {
                                    return  Wrap(
                                      children: [
                                        Padding(
                                          padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
                                          child: SizedBox(
                                            child: Padding(
                                              padding: const EdgeInsets.only(left: 0, right: 0, top: 16),
                                              child: Column(
                                                children: [
                                                  Padding(
                                                    padding: const EdgeInsets.symmetric(horizontal: 16),
                                                    child: Row(
                                                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                                                      children: [
                                                        Text(language.place_your_bid, style: boldTextStyle(size: 18)),
                                                        InkWell(
                                                          onTap: () {
                                                            Navigator.pop(context);
                                                          },
                                                          child: Icon(Icons.clear),
                                                        ),
                                                      ],
                                                    ),
                                                  ),
                                                  SizedBox(height: 16,),
                                                  Padding(
                                                    padding: const EdgeInsets.symmetric(horizontal: 16),
                                                    child: Column(
                                                      mainAxisSize: MainAxisSize.min,
                                                      crossAxisAlignment: CrossAxisAlignment.start,
                                                      children: [
                                                        Row(
                                                          children: [
                                                            IconButton(onPressed: (){
                                                              try{
                                                                num x=num.tryParse(bidAmountController.text.toString())!.round()??0;
                                                                if(x>0){
                                                                  x-=10;
                                                                  bidAmountController.text=x.toString();
                                                                  setState(() {});
                                                                }
                                                              }catch(e){

                                                              }
                                                            }, icon:Icon(Icons.remove_circle_outline,color: primaryColor,size: 45,)),
                                                            Expanded(
                                                              child: AppTextField(
                                                                controller: bidAmountController,
                                                                textFieldType: TextFieldType.PHONE,
                                                                inputFormatters: [FilteringTextInputFormatter.digitsOnly],
                                                                decoration: inputDecoration(context, label: language.amount),
                                                                maxLines: 1,
                                                                minLines: 1,
                                                                validator: (value) {
                                                                  if (value!.isEmpty) return language.thisFieldRequired;
                                                                  return null;
                                                                },
                                                              ),
                                                            ),
                                                            IconButton(onPressed: (){
                                                              try{
                                                                num x=num.tryParse(bidAmountController.text.toString())!.round()??0;
                                                                x+=10;
                                                                bidAmountController.text=x.toString();
                                                                setState(() {});
                                                              }catch(e){

                                                              }
                                                            }, icon:Icon(Icons.add_circle_outline_sharp,color: primaryColor,size: 45,)),
                                                          ],
                                                        ),
                                                        SizedBox(height: 16,),
                                                        AppTextField(
                                                          controller: bidNoteController,
                                                          textFieldType: TextFieldType.OTHER,
                                                          inputFormatters: [],
                                                          decoration: inputDecoration(context, label: language.note_optional),
                                                          maxLines: 3,
                                                          minLines: 3,
                                                          validator: (value) {
                                                            if (value!.isEmpty) return language.thisFieldRequired;
                                                            return null;
                                                          },
                                                        ),
                                                      ],
                                                    ),
                                                  ),
                                                  SizedBox(height: 16,),
                                                  Padding(
                                                    padding: const EdgeInsets.symmetric(horizontal: 16),
                                                    child: Align(
                                                      alignment: Alignment.centerRight,
                                                      child: Row(
                                                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                                                        mainAxisSize: MainAxisSize.max,
                                                        children: [
                                                          Expanded(
                                                            child: AppButtonWidget(
                                                              onTap: () async{
                                                                reqCheckCounter=0;
                                                                try{
                                                                  num x=num.tryParse(bidAmountController.text.toString())??0;
                                                                  if(x>0){
                                                                    hideKeyboard(context);
                                                                    Navigator.pop(context);
                                                                    appStore.setLoading(true);
                                                                    int rideId=servicesListData!.id??0;
                                                                    Map req= {"ride_request_id": "${rideId}", "bid_amount": bidAmountController.text, "notes": bidNoteController.text};
                                                                    LDBaseResponse b=await applyBid(request: req);
                                                                    bidData=ModelBidData(
                                                                      bidAmount: bidAmountController.text,
                                                                      isBidAccept: 0,
                                                                      notes: bidNoteController.text,
                                                                    );
                                                                    bidIsProcessing=1;
                                                                    setState(() {});
                                                                    // getNewRideReq(rideId,refresh:true);
                                                                    // 'on_stream_api_call':0
                                                                    await rideService.updateStatusOfRide(rideID:rideId, req: {'on_rider_stream_api_call': 0,},);
                                                                    bidAmountController.clear();
                                                                    bidNoteController.clear();
                                                                    appStore.setLoading(false);
                                                                    toast(b.message.toString());
                                                                  }else{
                                                                    toast("Enter Valid Bid Amount");
                                                                  }
                                                                }catch(e,s){
                                                                  log("Error ::$e stack:::$s");
                                                                  toast(e.toString());
                                                                }
                                                              },
                                                              text: language.confirm,
                                                              color: primaryColor,
                                                              textStyle: boldTextStyle(color: Colors.white),
                                                            ),
                                                          ),
                                                        ],
                                                      ),
                                                    ),
                                                  ),
                                                  SizedBox(height: 16),
                                                ],
                                              ),
                                            ),
                                          ),
                                        ),
                                      ],
                                    );
                                  });
                                  setState(() {});
                                },
                              ),
                            ),
                          ],
                        )
                      ],
                    ),
                  ),
                ],
              ),
            ),
          )
              : SizedBox(),
          Observer(builder: (context) {
            return appStore.isLoading ? loaderWidget() : SizedBox();
          })
        ],
      ),
    );
  }

  Widget bidProcessView() {
    return SizedBox.expand(
      child: Stack(
        alignment: Alignment.bottomCenter,
        children: [
          servicesListData != null
              ? Container(
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.only(topLeft: Radius.circular(2 * defaultRadius), topRight: Radius.circular(2 * defaultRadius)),
            ),
            child: SingleChildScrollView(
              // controller: scrollController,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Align(
                    alignment: Alignment.center,
                    child: Container(
                      margin: EdgeInsets.only(top: 16),
                      height: 6,
                      width: 60,
                      decoration: BoxDecoration(color: primaryColor, borderRadius: BorderRadius.circular(defaultRadius)),
                      alignment: Alignment.center,
                    ),
                  ),
                  SizedBox(height: 8),
                  Padding(
                    padding: EdgeInsets.symmetric(horizontal: 16),
                    child: Text(language.bid_under_review, style: primaryTextStyle(size: 18,weight: FontWeight.w700)),
                  ),
                  SizedBox(height: 8),
                  Padding(
                    padding: EdgeInsets.symmetric(horizontal: 16),
                    child: Text(language.bid_under_review_note, style: secondaryTextStyle()),
                  ),
                  Padding(
                    padding: const EdgeInsets.symmetric(horizontal: 16.0),
                    child: Divider(),
                  ),
                  SizedBox(height: 8),
                  Padding(
                    padding: EdgeInsets.symmetric(horizontal: 16),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.start,
                      crossAxisAlignment: CrossAxisAlignment.end,
                      children: [
                        Text("${language.amount}: ",style: primaryTextStyle(size: 16,weight: FontWeight.w400)),
                        printAmountWidget(amount: bidData!.bidAmount.toString()),
                      ],
                    ),
                  ),
                  SizedBox(height: 8),
                  if(bidData!.notes!=null && bidData!.notes!.isNotEmpty)
                  Padding(
                    padding: EdgeInsets.symmetric(horizontal: 16),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      mainAxisSize: MainAxisSize.max,
                      children: [
                        // Text("Note: ",style: primaryTextStyle(size: 16,weight: FontWeight.w400)),
                        Expanded(
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Text(bidData!.notes.toString(), style: secondaryTextStyle()),
                            ],
                          ),
                        ),
                      ],
                    ),
                  ),
                  if(bidData!.notes!=null && bidData!.notes!.isNotEmpty)
                  SizedBox(height: 8),
                  Padding(
                    padding: const EdgeInsets.all(16),
                    child: AppButtonWidget(
                      width: MediaQuery.of(context).size.width,
                        text: language.cancel_my_bid,
                        textColor: primaryColor,
                        color: Colors.white,
                        shapeBorder: RoundedRectangleBorder(borderRadius: BorderRadius.circular(defaultRadius), side: BorderSide(color: primaryColor)),
                        onTap: () {
                          rejectBid();
                        }),
                  ),
                ],
              ),
            ),
          )
              : SizedBox(),
          Observer(builder: (context) {
            return appStore.isLoading ? loaderWidget() : SizedBox();
          })
        ],
      ),
    );
  }
Editor is loading...
Leave a Comment