Current File : /home/tradevaly/www/fresh/lib/view/screens/address/widget/buttons_view.dart
import 'package:flutter/material.dart';
import 'package:flutter_grocery/data/model/response/address_model.dart';
import 'package:flutter_grocery/data/model/response/config_model.dart';
import 'package:flutter_grocery/localization/language_constrants.dart';
import 'package:flutter_grocery/provider/location_provider.dart';
import 'package:flutter_grocery/provider/order_provider.dart';
import 'package:flutter_grocery/provider/splash_provider.dart';
import 'package:flutter_grocery/utill/dimensions.dart';
import 'package:flutter_grocery/view/base/custom_button.dart';
import 'package:flutter_grocery/view/base/custom_snackbar.dart';
import 'package:geolocator/geolocator.dart';
import 'package:provider/provider.dart';

class ButtonsView extends StatelessWidget {
  final LocationProvider locationProvider;
  final bool isEnableUpdate;
  final bool fromCheckout;
  final TextEditingController contactPersonNameController;
  final TextEditingController contactPersonNumberController;
  final AddressModel address;
  const ButtonsView({
    Key key,
    @required this.locationProvider,
    @required this.isEnableUpdate,
    @required this.fromCheckout,
    @required this.contactPersonNumberController,
    @required this.contactPersonNameController,
    @required this.address
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        locationProvider.addressStatusMessage != null ?
        Row(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            locationProvider.addressStatusMessage.length > 0 ? CircleAvatar(backgroundColor: Colors.green, radius: 5) : SizedBox.shrink(),
            SizedBox(width: 8),
            Expanded(
              child: Text(
                locationProvider.addressStatusMessage ?? "",
                style:
                Theme.of(context).textTheme.headline2.copyWith(fontSize: Dimensions.FONT_SIZE_SMALL, color: Colors.green, height: 1),
              ),
            )
          ],
        )  :
        Row(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            locationProvider.errorMessage.length > 0
                ? CircleAvatar(backgroundColor: Colors.red, radius: 5)
                : SizedBox.shrink(),
            SizedBox(width: 8),
            Expanded(
              child: Text(
                locationProvider.errorMessage ?? "",
                style: Theme.of(context)
                    .textTheme
                    .headline2
                    .copyWith(fontSize: Dimensions.FONT_SIZE_SMALL, color: Colors.red, height: 1),
              ),
            )
          ],
        ),
        SizedBox(height: Dimensions.PADDING_SIZE_SMALL),
        Container(
          height: 50.0,
          width: 1170,
          margin: EdgeInsets.all(Dimensions.PADDING_SIZE_SMALL),
          child: !locationProvider.isLoading ? CustomButton(
            buttonText: isEnableUpdate ? getTranslated('update_address', context) : getTranslated('save_location', context),
            onPressed: locationProvider.loading ? null : () {
              List<Branches> _branches = Provider.of<SplashProvider>(context, listen: false).configModel.branches;
              bool _isAvailable = _branches.length == 1 && (_branches[0].latitude == null || _branches[0].latitude.isEmpty);
              if(!_isAvailable) {
                for (Branches branch in _branches) {
                  double _distance = Geolocator.distanceBetween(
                    double.parse(branch.latitude), double.parse(branch.longitude),
                    locationProvider.position.latitude, locationProvider.position.longitude,
                  ) / 1000;
                  if (_distance < branch.coverage) {
                    _isAvailable = true;
                    break;
                  }
                }
              }
              if(!_isAvailable) {
                showCustomSnackBar(getTranslated('service_is_not_available', context), context);
              }else {
                AddressModel addressModel = AddressModel(
                  addressType: locationProvider.getAllAddressType[locationProvider.selectAddressIndex],
                  contactPersonName: contactPersonNameController.text ?? '',
                  contactPersonNumber: contactPersonNumberController.text ?? '',
                  address: locationProvider.locationController.text ?? '',
                  latitude: isEnableUpdate ? locationProvider.position.latitude.toString() ?? address.latitude
                      : locationProvider.position.latitude.toString() ?? '',
                  longitude: locationProvider.position.longitude.toString() ?? '',
                );
                if (isEnableUpdate) {
                  addressModel.id = address.id;
                  addressModel.userId = address.userId;
                  addressModel.method = 'put';
                  locationProvider.updateAddress(context, addressModel: addressModel, addressId: addressModel.id).then((value) {});
                } else {
                  locationProvider.addAddress(addressModel, context).then((value) {
                    if (value.isSuccess) {
                      // Navigator.pop(context);
                      if (fromCheckout) {
                        Provider.of<LocationProvider>(context, listen: false).initAddressList(context);
                        Provider.of<OrderProvider>(context, listen: false).setAddressIndex(-1);
                      } else {
                        showCustomSnackBar(value.message, context, isError: false);
                      }
                      Navigator.pop(context);
                    } else {
                      showCustomSnackBar(value.message, context);
                    }
                  });
                }
              }
            },
          )
              : Center(
              child: CircularProgressIndicator(
                valueColor: new AlwaysStoppedAnimation<Color>(Theme.of(context).primaryColor),
              )),
        )
      ],
    );
  }
}