Dynamic Linking
First, You set Firebase in the Flutter Project, then use this code.
According to the need to modify this code.
import 'dart:async';
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class DynamicLinkWidget extends StatefulWidget {
const DynamicLinkWidget({Key? key}) : super(key: key);
@override
State<DynamicLinkWidget> createState() => _DynamicLinkWidgetState();
}
class _DynamicLinkWidgetState extends State<DynamicLinkWidget>{
String? _linkMessage;
bool _isCreatingLink = false;
final FirebaseDynamicLinks dynamicLinks = FirebaseDynamicLinks.instance;
final String DynamicLink = 'https://www.goggle.com?screen=${loginRoute.toString()}';
final String Link = 'https://astscm.page.link';
@override
void initState() {
super.initState();
initDynamicLinks();
}
Future<void> initDynamicLinks() async {
dynamicLinks.onLink.listen((data) {
print(data.link.queryParameters.values.first);
Navigator.pushNamed(context, data.link.queryParameters.values.first);
}).onError((error) {
print('onLink error');
print(error.message);
});
}
Future<void> _createDynamicLink(bool short) async {
setState(() {
_isCreatingLink = true;
});
final DynamicLinkParameters parameters = DynamicLinkParameters(
uriPrefix: 'https://astscm.page.link',
longDynamicLink: Uri.parse(
'$dynamicLinks',
),
link: Uri.parse(DynamicLink),
androidParameters: const AndroidParameters(
packageName: 'com.example.app',
minimumVersion: 20,
),
/* iosParameters: const IOSParameters(
bundleId: 'io.flutter.plugins.firebase.dynamiclinksexample',
minimumVersion: '0',
),*/
);
Uri url;
if (short) {
final ShortDynamicLink shortLink =
await dynamicLinks.buildShortLink(parameters);
url = shortLink.shortUrl;
} else {
url = await dynamicLinks.buildLink(parameters);
}
setState(() {
_linkMessage = url.toString();
_isCreatingLink = false;
});
}
Future<String> createDynamic() async{
final dynamicLinkParams = DynamicLinkParameters(
link: Uri.parse("$DynamicLink"),
uriPrefix: "https://app.page.link",
androidParameters: const AndroidParameters(packageName: "com.example.app"),
);
final dynamicLink =
await FirebaseDynamicLinks.instance.buildLink(dynamicLinkParams);
return dynamicLink.toString();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ElevatedButton(
onPressed: ()async {
final PendingDynamicLinkData? data =
await dynamicLinks.getInitialLink();
final Uri? deepLink = data?.link;
var l= await createDynamic();
setState(() {
_linkMessage=l.toString();
});
print("${deepLink.toString()}");
print("link:${_linkMessage}");
if (deepLink != null) {
// ignore: unawaited_futures
Navigator.push(context, MaterialPageRoute(builder: (context)=>ScreenName()));
}
},
child: SelectableText("link:${_linkMessage.toString()}",
cursorColor: Colors.red,
showCursor: true,
toolbarOptions: ToolbarOptions(
copy: true,
selectAll: true,
cut: false,
paste: false
),)
),
ElevatedButton(
onPressed: () async {
print("${_linkMessage.toString()}");
initDynamicLinks();
_createDynamicLink(true);
/* if (_linkMessage != null) {
// await launchUrl(Uri.parse(_linkMessage!));
print("${_linkMessage.toString()}");
}*/
},
onLongPress: () {
if (_linkMessage != null) {
Clipboard.setData(ClipboardData(text: _linkMessage!));
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Copied Link!')),
);
print(_linkMessage.toString());
}
},
child: Text("onCreate"),
),
],
)
)
);
}
}
Comments
Post a Comment