Skip to content

Instantly share code, notes, and snippets.

@safademirel07
Created February 12, 2021 13:10
Show Gist options
  • Save safademirel07/3a5812193f5178e40b0f15715beb0e33 to your computer and use it in GitHub Desktop.
Save safademirel07/3a5812193f5178e40b0f15715beb0e33 to your computer and use it in GitHub Desktop.
tutorial-main
import 'dart:math';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
import 'package:flutter/material.dart';
import 'package:package_info/package_info.dart';
import 'dynamic_page.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: DynamicLinkTestPage(),
);
}
}
class DynamicLinkTestPage extends StatefulWidget {
DynamicLinkTestPage({Key key}) : super(key: key);
@override
_DynamicLinkTestPageState createState() => _DynamicLinkTestPageState();
}
class _DynamicLinkTestPageState extends State<DynamicLinkTestPage> {
TextEditingController _textEditingController;
@override
void initState() {
super.initState();
initDynamicLinks();
}
void initDynamicLinks() async {
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
final Uri deepLink = dynamicLink?.link;
if (deepLink != null) {
var deepLinkPath = deepLink.path;
var deepLinkQueryParameters = deepLink.queryParameters;
parseColorAndNavigate(deepLinkQueryParameters);
}
}, onError: (OnLinkErrorException e) async {
print('onLinkError');
print(e.message);
});
final PendingDynamicLinkData data =
await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
if (deepLink != null) {
var deepLinkPath = deepLink.path;
var deepLinkQueryParameters = deepLink.queryParameters;
parseColorAndNavigate(deepLinkQueryParameters);
}
}
void parseColorAndNavigate(Map<String, String> deepLinkQueryParameters) {
if (deepLinkQueryParameters.containsKey("color")) {
String colorStringValue = deepLinkQueryParameters["color"].toString();
try {
int colorIntegerValue = int.tryParse(colorStringValue);
Color color = Color(colorIntegerValue);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DynamicPage(backgroundColor: color),
),
);
} catch (e) {
print("Integer parsing hata.");
}
}
}
@override
void dispose() {
super.dispose();
_textEditingController.dispose();
}
Future<String> createDynamicLink() async {
String dynamicLinkUriPrefix = "https://ogzatutorial.page.link/";
String randomColor = Random().nextInt(0xffffffff).toString();
String url = "$dynamicLinkUriPrefix?color=$randomColor";
PackageInfo packageInfo = await PackageInfo.fromPlatform();
final DynamicLinkParameters parameters = DynamicLinkParameters(
uriPrefix: dynamicLinkUriPrefix,
link: Uri.parse(url),
androidParameters: AndroidParameters(
packageName: packageInfo.packageName,
minimumVersion: 1,
),
iosParameters: IosParameters(
bundleId: packageInfo.packageName,
minimumVersion: '1.0.1',
appStoreId: '123456789',
),
googleAnalyticsParameters: GoogleAnalyticsParameters(
campaign: 'example',
medium: 'social',
source: 'app',
),
itunesConnectAnalyticsParameters: ItunesConnectAnalyticsParameters(
providerToken: '123456',
campaignToken: 'example',
),
socialMetaTagParameters: SocialMetaTagParameters(
title: 'Deneme',
description: 'Bu bir denemedir!',
imageUrl: Uri.parse("https://ogzatech.com/tr/img/core-img/logo.png"),
),
);
final Uri dynamicUrl = await parameters.buildUrl();
final ShortDynamicLink shortenedLink = await parameters.buildShortLink();
print("Full: ${dynamicUrl.toString()} Short:${shortenedLink.shortUrl}");
return shortenedLink.shortUrl.toString();
}
String dynamicLinkUriPrefix = "https://ogzatutorial.page.link";
Future<String> createDynamicLink() async {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String randomColor = Random().nextInt(0xffffffff).toString();
String url = "$dynamicLinkUriPrefix?color=$randomColor";
final DynamicLinkParameters parameters = DynamicLinkParameters(
uriPrefix: dynamicLinkUriPrefix,
link: Uri.parse(url),
androidParameters: AndroidParameters(
packageName: packageInfo.packageName,
minimumVersion: 1,
),
iosParameters: IosParameters(
bundleId: packageInfo.packageName,
minimumVersion: '1.0.1',
appStoreId: '123456789',
),
googleAnalyticsParameters: GoogleAnalyticsParameters(
campaign: 'example',
medium: 'social',
source: 'app',
),
itunesConnectAnalyticsParameters: ItunesConnectAnalyticsParameters(
providerToken: '123456',
campaignToken: 'example',
),
socialMetaTagParameters: SocialMetaTagParameters(
title: 'Deneme',
description: 'Bu bir denemedir!',
imageUrl: Uri.parse("https://ogzatech.com/tr/img/core-img/logo.png"),
),
);
final Uri dynamicUrl = await parameters.buildUrl();
final ShortDynamicLink shortenedLink = await parameters.buildShortLink();
print(
"full link ${dynamicUrl.toString()} short link ${shortenedLink.shortUrl}");
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Dynamic Link Test"),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextFormField(
controller: _textEditingController,
decoration: InputDecoration(labelText: 'Enter a url.'),
),
FlatButton(
onPressed: () => createDynamicLink(),
child: Text("Create a Link"))
],
),
),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment