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:name="flutterEmbedding"
android:value="2" /> android:value="2" />
</application> </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> </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"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>sms</string>
<string>tel</string>
</array>
<key>NSCameraUsageDescription</key> <key>NSCameraUsageDescription</key>
<string>Camera permission is required for barcode scanning.</string> <string>Camera permission is required for barcode scanning.</string>
<key>NSLocationWhenInUseUsageDescription</key> <key>NSLocationWhenInUseUsageDescription</key>

View File

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

View File

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

View File

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

View File

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

View File

@@ -1203,7 +1203,7 @@ packages:
source: hosted source: hosted
version: "2.2.2" version: "2.2.2"
url_launcher: url_launcher:
dependency: transitive dependency: "direct main"
description: description:
name: url_launcher name: url_launcher
sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" 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 # 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 # 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. # 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: environment:
sdk: '>=3.2.4 <4.0.0' sdk: '>=3.2.4 <4.0.0'
@@ -65,6 +65,7 @@ dependencies:
flutter_launcher_icons: ^0.13.1 flutter_launcher_icons: ^0.13.1
# flutter_barcode_scanner: ^2.0.0 # flutter_barcode_scanner: ^2.0.0
barcode_widget: ^2.0.4 barcode_widget: ^2.0.4
url_launcher: ^6.3.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: