I have got a Netflix model app and I want to share the movie contents to others, and if the receiver has that app, then the content should open up in his/her app or if app not present, got to the website.
I tried with Firebase, but it didn't go well, so I tried with uni_links in flutter but its my first time using it and didn't find much of the tutorials about it.
Below is my code, its purely in flutter and used the share widget to share the contents.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:share/share.dart';
import 'package:uni_links/uni_links.dart';
// Share tab
enum UniLinksType { string, uri }
class SharePage extends StatelessWidget
{
SharePage(this.shareType, this.share, this.image);
final shareType;
final VideoDataModel share;
final image;
String latestLink;
Uri latestUri;
StreamSubscription sub;
UniLinksType type = UniLinksType.string;
initPlatformState() async
{
if(type == UniLinksType.string)
{
await initPlatformStateForStringUniLinks();
}
else
{
await initPlatformStateForUriUniLinks();
}
}
initPlatformStateForStringUniLinks() async
{
sub = getLinksStream().listen((String link)
{
latestLink = link ?? "Unknown";
latestUri = null;
try
{
if(link != null)
{
latestUri = Uri.parse(link);
}
}
on FormatException{}
},
onError: (err)
{
latestLink = "Failed to load latest link: $err";
latestUri = null;
});
getLinksStream().listen((String link)
{
print('got link: $link');
},
onError: (err)
{
print('got err: $err');
});
String initialLink;
Uri initialUri;
// Platform messages may fail, so we use a try/catch PlatformException.
try
{
initialLink = await getInitialLink();
print("initial link: $initialLink");
if (initialLink != null)
{
print("in if");
initialUri = Uri.parse(initialLink);
}
}
on PlatformException
{
initialLink = 'Failed to get initial link.';
initialUri = null;
}
on FormatException
{
initialLink = 'Failed to parse the initial link as Uri.';
initialUri = null;
}
}
Future initPlatformStateForUriUniLinks() async
{
sub = getUriLinksStream().listen((Uri uri)
{
latestUri = uri;
latestLink = uri?.toString() ?? 'Unknown';
},
onError: (err)
{
latestUri = null;
latestLink = 'Failed to get latest link: $err.';
});
getUriLinksStream().listen((Uri uri)
{
print('got uri: ${uri?.path} ${uri?.queryParametersAll}');
},
onError: (err)
{
print('got err: $err');
});
Uri initialUri;
String initialLink;
try
{
initialUri = await getInitialUri();
print('initial uri: ${initialUri?.path}'' ${initialUri?.queryParametersAll}');
initialLink = initialUri?.toString();
}
on PlatformException
{
initialUri = null;
initialLink = 'Failed to get initial uri.';
}
on FormatException
{
initialUri = null;
initialLink = 'Bad parse the initial link as Uri.';
}
latestUri = initialUri;
latestLink = initialLink;
return latestUri;
}
Widget shareText()
{
return Text
(
"Share",
style: TextStyle
(
fontFamily: 'Lato',
fontSize: 12.0,
fontWeight: FontWeight.w600,
letterSpacing: 0.0,
color: Colors.white
),
);
}
Widget shareTabColumn()
{
return Column
(
mainAxisAlignment:
MainAxisAlignment.center,
children: <Widget>
[
Icon
(
Icons.share,
size: 30.0,
color: Colors.white,
),
new Padding
(
padding: const EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 10.0),
),
shareText(),
],
);
}
@override
Widget build(BuildContext context)
{
return Expanded
(
child: Material
(
child: new InkWell
(
onTap: ()
{
Share.share('$shareType'+ share.id.toString() + "\n" + share.name);
initPlatformState();
},
child: shareTabColumn(),
),
color: Colors.transparent,
)
);
}
}
In the sharing content I want to get my domain name (say for example www.example.co.in)