Flutter: Launch App B from App A with arguments - flutter

I want Flutter App A to launch Flutter App B passing in arguments.
I want Flutter App B to read these arguments passed by Flutter App A.
How do I do this in Flutter on both iOS & Android?

if you know the package name you can do handle it this way
add this plugins to your pubspec
device_apps:
android_intent:
url_launcher:
openAnotherApp (data) async
{String dt = data['hello there'] as String;
bool isInstalled = await DeviceApps.isAppInstalled('com.another app');
if (isInstalled != false)
{
AndroidIntent intent = AndroidIntent(
action: 'action_view',
data: dt
);
await intent.launch();
}
else
{
String url = dt;
if (await canLaunch(url))
await launch(url);
else
throw 'Could not launch $url';
}
}
if you want to check app availability first use flutter_appavailability
If already installed then launch otherwise open link in WebView using url_launcher.

Related

Get a list of files from the local storage and display it as a list in flutter web:

I've been building an ios app and in it, it'll download a bunch of pdf from an API and save it to the local storage using the path_provider package in flutter:
This is the code I use to fetch the path:
Future<String> get localPath async {
final directory = await getApplicationDocumentsDirectory();
currentDir.value = directory.path;
return directory.path;}
And this is how I save it to the device:
Future<void> saveFilesToLocal(String url, String fileName) async {
try {
final path = await localPath;
final file = File('$path/$fileName');
if (await file.exists() == false) {
final response = await Dio().get(url,
options: Options(
responseType: ResponseType.bytes,
followRedirects: false,
receiveTimeout: 0));
final raf = file.openSync(mode: FileMode.write);
raf.writeFromSync(response.data);
await raf.close();
} else {
print("file already exists");
}
} catch (e) {
print('error: $e');
}
}
After I download and save the files to the storage, it'll be displayed as a gridview in the home page. To fetch that list of files I use this:
List<FileSystemEntity> files = [];
Future<void> getFilesList() async {
files.clear();
final path = await localPath;
Directory dir = Directory('$path');
files =
dir.listSync(recursive: true, followLinks: false);
update();
}
And all of this works fine in the ios device. But the current issue I'm facing while trying to run it on web is:
The package path_provider is not available for flutter web. I've been asked to create it as a web app too and I can't find an alternative for it. While looking for one I saw a post saying flutter web won't allow access to a device's local storage like that so it's not possible. Is it true? Is there a workaround? If it's about security, the app will only be run on specific devices. It won't be given to the public.

Send sms directly from flutter app on click in adnroid and ios,

I m trying to send SMS directly from my flutter app but I m not finding good package, I try flutter SMS but its open SMS default app or I also try telephony its send SMS only to android
Try "**url_launcher**" flutter plugin, using this you can directly call and send sms from the app you built.
//you can use it using this method as reference
// this is for calling to a required number
Future _callContact(BuildContext context, String number) async {
final url = 'tel:$number';
if (await canLaunch(url)) {
await launch(url);
}
else {
const snackbar = SnackBar(content: Text('Can\'t make a call'));
Scaffold.of(context).showSnackBar(snackbar);
}
}
// this is for sms
Future _smsContact(BuildContext context, String number) async {
final url = 'sms:$number';
if (await canLaunch(url)) {
await launch(url);
} else {
const snackbar = SnackBar(content: Text('Can\'t make a call'));
Scaffold.of(context).showSnackBar(snackbar);
}
}

how to create a method that will call URL's From a list with flutter

I am working with google books in my flutter project.
im trying to create a method that that will call the diffrent books URL's that i have stored in a List and call the list back using a future builder.
The list look somthing like this:
List<String> toBeReadBooksList = ['https://www.googleapis.com/books/v1/volumes?q=1086782593+isbn'];
You can do it a way that similar to this:
final url = 'https://www.googleapis.com/books/v1/volumes?q=1086782593+isbn';
final response = await http.get(url)
if (response.statusCode == 200) {
// Here you need to parse data from response, you should replace it with your realization:
return Data.fromJson(jsonDecode(response.body));
} else {
throw Exception('Failed to load data from $url');
}
You can read more about how to work with requests and responses to/from the Network in Official Documentation.
Import url_launcher plugin import 'package:url_launcher/url_launcher.dart';
and in your pubspec.yaml dependecies url_launcher: ^5.7.10
add this and call it to open the selected url
_launchURL() async {
const url = toBeReadBooksList[0];//your list url
if (await canLaunch(url)) {
await launch(url);
}
else {
throw 'Could not launch $url';
}
}

Get Package Name/ApplicationId in Other pages

I want to implement rate and share button in my app so I am using url_launcher and here I want to put url of my app.
Currently it is working as
url="https://play.google.com/store/apps/details?id=in.learncodeonline.lco";
but I want this type
url="https://play.google.com/store/apps/details?id={packageName}"
Just call this function with package Name
void shareAnyApp(String packageName) async {
var url = "https://play.google.com/store/apps/details?id=$packageName";
if (await canLaunch(url)) {
await launch(url);
}
}
To Get Current App Package use Package_info
PackageInfo packageInfo = await PackageInfo.fromPlatform();
shareAnyApp(packageInfo.packageName );

How to launch other android apps using the flutter app

I have used the following method as specified in the documentation.
Future<void> launchUniversalLink(String url) async {
if (await canLaunch(url)) {
final bool nativeAppLaunchSuccess = await launch(url, forceSafariVC: false, universalLinksOnly: true);
print(nativeAppLaunchSuccess);
}else {
print('launch not successfull');
}
}
if I give URL = 'https://www.WhatsApp.com'
print(nativeAppLaunchSuccess); output ==> true
but still the app launches in the browser.
can anyone help me with this problem
Oh I'm sorry. This is my mistake.
Please use 'device_apps' flutter package and usage is below.
And here is a how to know app package name.
https://www.techmesto.com/find-android-app-package-name/
In ios, you know other app's custom Url schema that officially opened.
But usually we can not know that url.
So below ios code is executed, it will open appstore page and need to push 'open' button.
if (Platform.isAndroid) {
if (await DeviceApps.isAppInstalled('com.nbt.moves') ==
true) {
DeviceApps.openApp('com.nbt.moves');
}
} else {
const url =
'https://apps.apple.com/kr/app/%EC%BA%90%EC%8B%9C%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%93%9C-%EC%8A%A4%ED%85%9D%EC%97%85/id1400703652?uo=4';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}