Used url_launcher

This commit is contained in:
Vinayakkadge04
2025-11-14 11:29:16 +05:30
parent f3c98df517
commit 323d730e2d
7 changed files with 49 additions and 32 deletions

View File

@@ -1,37 +1,15 @@
import 'package:citycards_customer/attraction_details/share_bottomsheet.dart';
import 'package:citycards_customer/attraction_details/view_model/attraction_details_view_model.dart';
import 'package:citycards_customer/attraction_details/widgets/share_bottomsheet.dart';
import 'package:citycards_customer/common_packages/app_bar.dart';
import 'package:citycards_customer/common_packages/custom_text.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:url_launcher/url_launcher.dart';
import '../core/route_constants.dart';
import '../../core/route_constants.dart';
class AttractionDetailsView extends StatelessWidget {
const AttractionDetailsView({super.key});
AttractionDetailsView({super.key});
Future<void> _makePhoneCall(String phoneNumber) async {
final Uri url = Uri(scheme: 'tel', path: phoneNumber);
if (await canLaunchUrl(url)) {
await launchUrl(url);
} else {
throw 'Could not launch $url';
}
}
Future<void> _sendEmail(String emailAddress) async {
final Uri url = Uri(
scheme: 'mailto',
path: emailAddress,
query: 'subject=Hello City Cards&body=Hi there,', // optional
);
if (await canLaunchUrl(url)) {
await launchUrl(url);
} else {
throw 'Could not launch $url';
}
}
final AttractionDetailsViewModel viewModel = AttractionDetailsViewModel();
@override
Widget build(BuildContext context) {
@@ -186,7 +164,8 @@ class AttractionDetailsView extends StatelessWidget {
),
SizedBox(height: 16.h),
InkWell(
onTap: () => _makePhoneCall('+10123456789'),
onTap: () =>
viewModel.makePhoneCall('+10123456789', context),
borderRadius: BorderRadius.circular(8.r),
child: Container(
padding: EdgeInsets.symmetric(
@@ -239,7 +218,8 @@ class AttractionDetailsView extends StatelessWidget {
),
SizedBox(height: 16.h),
InkWell(
onTap: () => _sendEmail('CityCards24@gmail.com'),
onTap: () =>
viewModel.sendEmail('CityCards24@gmail.com', context),
borderRadius: BorderRadius.circular(8.r),
child: Container(
padding: EdgeInsets.symmetric(

View File

@@ -0,0 +1,34 @@
import 'package:url_launcher/url_launcher.dart';
import 'package:flutter/material.dart';
class AttractionDetailsViewModel {
// 📞 Call method
Future<void> makePhoneCall(String phoneNumber, BuildContext context) async {
final Uri url = Uri(scheme: 'tel', path: phoneNumber);
if (await canLaunchUrl(url)) {
await launchUrl(url);
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Could not launch $phoneNumber')),
);
}
}
// 📧 Email method
Future<void> sendEmail(String emailAddress, BuildContext context) async {
final Uri url = Uri(
scheme: 'mailto',
path: emailAddress,
query: 'subject=Hello City Cards&body=Hi there,',
);
if (await canLaunchUrl(url)) {
await launchUrl(url);
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Could not launch mail app')),
);
}
}
}

View File

@@ -15,6 +15,9 @@ class AttractionsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (_) {
final bloc = AttractionsBloc(AttractionsRepository());

View File

@@ -1,6 +1,6 @@
import 'package:citycards_customer/Profile/profile_page_view.dart';
import 'package:citycards_customer/add_details/add_details_view.dart';
import 'package:citycards_customer/attraction_details/attraction_details_view.dart';
import 'package:citycards_customer/attraction_details/view/attraction_details_view.dart';
import 'package:citycards_customer/buy_a_pass/view/buy_pass_view.dart';
import 'package:citycards_customer/checkout/view/checkout_view.dart';
import 'package:citycards_customer/common_bloc/language_selection_bloc.dart';

View File

@@ -5,7 +5,7 @@ import 'package:citycards_customer/postcard/views/add_filter_step_page_view.dart
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../attraction_details/attraction_details_view.dart';
import '../attraction_details/view/attraction_details_view.dart';
import '../attractions/views/attractions_page_view.dart';
import '../buy_a_pass/view/buy_pass_view.dart';
import '../checkout/view/checkout_view.dart';

View File

@@ -1,4 +1,4 @@
import 'package:citycards_customer/attraction_details/share_bottomsheet.dart';
import 'package:citycards_customer/attraction_details/widgets/share_bottomsheet.dart';
import 'package:citycards_customer/common_packages/app_bar.dart';
import 'package:citycards_customer/common_packages/custom_bullet_points.dart';
import 'package:flutter/material.dart';