Merge pull request #23 from yaso-meth/url-launcher

Url-launcher
This commit is contained in:
yaso-meth
2024-12-09 15:20:38 +02:00
committed by GitHub
8 changed files with 126 additions and 74 deletions

View File

@@ -39,4 +39,22 @@
android:name="flutterEmbedding"
android:value="2" />
</application>
<!-- Provide required visibility configuration for API level 30 and above -->
<queries>
<!-- If your app checks for SMS support -->
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="sms" />
</intent>
<!-- If your app checks for call support -->
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="tel" />
</intent>
<!-- If your application checks for inAppBrowserView launch mode support -->
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
</manifest>

View File

@@ -2,6 +2,11 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>sms</string>
<string>tel</string>
</array>
<key>NSCameraUsageDescription</key>
<string>Camera permission is required for barcode scanning.</string>
<key>NSLocationWhenInUseUsageDescription</key>

View File

@@ -194,52 +194,55 @@ class _MIHNotificationDrawerState extends State<MIHNotificationDrawer> {
@override
Widget build(BuildContext context) {
return Drawer(
//backgroundColor: MzanziInnovationHub.of(context)!.theme.primaryColor(),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(5.0),
child: Text(
"Notifications",
style: TextStyle(
color:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
fontWeight: FontWeight.bold,
fontSize: 20,
return SafeArea(
child: Drawer(
//backgroundColor: MzanziInnovationHub.of(context)!.theme.primaryColor(),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(5.0),
child: Text(
"Notifications",
style: TextStyle(
color: MzanziInnovationHub.of(context)!
.theme
.primaryColor(),
fontWeight: FontWeight.bold,
fontSize: 20,
),
),
),
),
],
],
),
),
),
displayNotification(),
// ListView.separated(
// shrinkWrap: true,
// physics: const NeverScrollableScrollPhysics(),
// separatorBuilder: (BuildContext context, index) {
// return Divider(
// color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
// );
// },
// itemCount: widget.notifications.length,
// itemBuilder: (context, index) {
// //final patient = widget.patients[index].id_no.contains(widget.searchString);
// //print(index);
// return displayNotifications(index);
// },
// ),
],
),
));
displayNotification(),
// ListView.separated(
// shrinkWrap: true,
// physics: const NeverScrollableScrollPhysics(),
// separatorBuilder: (BuildContext context, index) {
// return Divider(
// color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
// );
// },
// itemCount: widget.notifications.length,
// itemBuilder: (context, index) {
// //final patient = widget.patients[index].id_no.contains(widget.searchString);
// //print(index);
// return displayNotifications(index);
// },
// ),
],
),
)),
);
}
}

View File

@@ -8,6 +8,7 @@ import '../../mih_components/mih_layout/mih_tile.dart';
import '../../main.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import "package:universal_html/js.dart" as js;
import 'package:url_launcher/url_launcher.dart';
// import 'dart:html' as html;
class MIHAbout extends StatefulWidget {
@@ -20,6 +21,20 @@ class MIHAbout extends StatefulWidget {
}
class _MIHAboutState extends State<MIHAbout> {
final Uri _tiktokUrl =
Uri.parse('https://www.tiktok.com/@mzansi.innovation.hub');
final Uri _instagramUrl =
Uri.parse('https://www.instagram.com/mzansi.innovation.hub');
final Uri _whatsappUrl =
Uri.parse('https://whatsapp.com/channel/0029Vax3INCIyPtMn8KgeM2F');
final Uri _youtubeUrl =
Uri.parse('https://www.youtube.com/@mzansiinnovationhub');
final Uri _xUrl = Uri.parse('https://x.com/mzansi_inno_hub');
final Uri _linkedinUrl =
Uri.parse('https://www.linkedin.com/company/mzansi-innovation-hub/');
final Uri _facebookUrl =
Uri.parse('https://www.facebook.com/profile.php?id=61565345762136');
MIHAction getActionButton() {
return MIHAction(
icon: const Icon(Icons.arrow_back),
@@ -317,7 +332,7 @@ class _MIHAboutState extends State<MIHAbout> {
// //bottom: height / 5,
// top: 20,
),
// physics: ,
physics: const NeverScrollableScrollPhysics(),
// shrinkWrap: true,
itemCount: getSocialsList().length,
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
@@ -335,8 +350,7 @@ class _MIHAboutState extends State<MIHAbout> {
List<Widget> socials = [];
socials.add(MIHTile(
onTap: () {
// html.window
// .open('https://www.tiktok.com/@mzansi.innovation.hub', 'new tab');
launchSocialUrl(_tiktokUrl);
},
tileName: "TikTok",
tileIcon: Center(
@@ -352,8 +366,7 @@ class _MIHAboutState extends State<MIHAbout> {
//==================================================================
socials.add(MIHTile(
onTap: () {
// html.window
// .open('https://www.instagram.com/mzansi.innovation.hub', 'new tab');
launchSocialUrl(_instagramUrl);
},
tileName: "Instagram",
tileIcon: Center(
@@ -369,8 +382,7 @@ class _MIHAboutState extends State<MIHAbout> {
//==================================================================
socials.add(MIHTile(
onTap: () {
// html.window.open(
// 'https://whatsapp.com/channel/0029Vax3INCIyPtMn8KgeM2F', 'new tab');
launchSocialUrl(_whatsappUrl);
},
tileName: "Whatsapp",
tileIcon: Center(
@@ -386,8 +398,7 @@ class _MIHAboutState extends State<MIHAbout> {
//==================================================================
socials.add(MIHTile(
onTap: () {
// html.window
// .open('https://www.youtube.com/@mzansiinnovationhub', 'new tab');
launchSocialUrl(_youtubeUrl);
},
tileName: "YouTube",
tileIcon: Center(
@@ -403,7 +414,7 @@ class _MIHAboutState extends State<MIHAbout> {
//==================================================================
socials.add(MIHTile(
onTap: () {
// html.window.open('https://x.com/mzansi_inno_hub', 'new tab');
launchSocialUrl(_xUrl);
},
tileName: "X",
tileIcon: Center(
@@ -419,9 +430,7 @@ class _MIHAboutState extends State<MIHAbout> {
//==================================================================
socials.add(MIHTile(
onTap: () {
// html.window.open(
// 'https://www.linkedin.com/company/mzansi-innovation-hub/',
// 'new tab');
launchSocialUrl(_linkedinUrl);
},
tileName: "LinkedIn",
tileIcon: Center(
@@ -437,9 +446,7 @@ class _MIHAboutState extends State<MIHAbout> {
//==================================================================
socials.add(MIHTile(
onTap: () {
// html.window.open(
// 'https://www.facebook.com/profile.php?id=61565345762136',
// 'new tab');
launchSocialUrl(_facebookUrl);
},
tileName: "FaceBook",
tileIcon: Center(
@@ -456,6 +463,12 @@ class _MIHAboutState extends State<MIHAbout> {
return socials;
}
Future<void> launchSocialUrl(Uri linkUrl) async {
if (!await launchUrl(linkUrl)) {
throw Exception('Could not launch $linkUrl');
}
}
@override
void dispose() {
super.dispose();

View File

@@ -103,10 +103,13 @@ class _BuildFileViewState extends State<BuildFileView> {
iconSize: 35,
padding: const EdgeInsets.all(0),
onPressed: () {
html.window.open(
widget.link,
// '${AppEnviroment.baseFileUrl}/mih/$filePath',
'download');
if (MzanziInnovationHub.of(context)!.theme.getPlatform() ==
"Web") {
html.window.open(
widget.link,
// '${AppEnviroment.baseFileUrl}/mih/$filePath',
'download');
} else {}
},
icon: Icon(
Icons.download,
@@ -164,10 +167,17 @@ class _BuildFileViewState extends State<BuildFileView> {
iconSize: 35,
padding: const EdgeInsets.all(0),
onPressed: () {
html.window.open(
widget.link,
// '${AppEnviroment.baseFileUrl}/mih/$filePath',
'download');
if (MzanziInnovationHub.of(context)!.theme.getPlatform() ==
"Web") {
html.window.open(
widget.link,
// '${AppEnviroment.baseFileUrl}/mih/$filePath',
'download');
} else {}
// html.window.open(
// widget.link,
// // '${AppEnviroment.baseFileUrl}/mih/$filePath',
// 'download');
},
icon: Icon(
Icons.download,

View File

@@ -210,10 +210,12 @@ class _FullScreenFileViewerState extends State<FullScreenFileViewer> {
iconSize: 30,
padding: const EdgeInsets.all(0),
onPressed: () {
html.window.open(
widget.arguments.link,
// '${AppEnviroment.baseFileUrl}/mih/$filePath',
'download');
if (MzanziInnovationHub.of(context)!.theme.getPlatform() == "Web") {
html.window.open(
widget.arguments.link,
// '${AppEnviroment.baseFileUrl}/mih/$filePath',
'download');
} else {}
},
icon: Icon(
Icons.download,

View File

@@ -1203,7 +1203,7 @@ packages:
source: hosted
version: "2.2.2"
url_launcher:
dependency: transitive
dependency: "direct main"
description:
name: url_launcher
sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"

View File

@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
version: 1.0.0+1
version: 1.0.0+2
environment:
sdk: '>=3.2.4 <4.0.0'
@@ -65,6 +65,7 @@ dependencies:
flutter_launcher_icons: ^0.13.1
# flutter_barcode_scanner: ^2.0.0
barcode_widget: ^2.0.4
url_launcher: ^6.3.1
dev_dependencies:
flutter_test: