blob: 4fd2440285f3f287ad384e7261b14f2e60fb1b77 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:android_intent/android_intent.dart';
import 'package:android_intent/flag.dart';
import 'package:flutter/material.dart';
import 'package:platform/platform.dart';
void main() {
runApp(MyApp());
}
/// A sample app for launching intents.
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,
),
home: MyHomePage(),
routes: <String, WidgetBuilder>{
ExplicitIntentsWidget.routeName: (BuildContext context) =>
const ExplicitIntentsWidget()
},
);
}
}
/// Holds the different intent widgets.
class MyHomePage extends StatelessWidget {
void _createAlarm() {
final AndroidIntent intent = const AndroidIntent(
action: 'android.intent.action.SET_ALARM',
arguments: <String, dynamic>{
'android.intent.extra.alarm.DAYS': <int>[2, 3, 4, 5, 6],
'android.intent.extra.alarm.HOUR': 21,
'android.intent.extra.alarm.MINUTES': 30,
'android.intent.extra.alarm.SKIP_UI': true,
'android.intent.extra.alarm.MESSAGE': 'Create a Flutter app',
},
);
intent.launch();
}
void _openExplicitIntentsView(BuildContext context) {
Navigator.of(context).pushNamed(ExplicitIntentsWidget.routeName);
}
@override
Widget build(BuildContext context) {
Widget body;
if (const LocalPlatform().isAndroid) {
body = Padding(
padding: const EdgeInsets.symmetric(vertical: 15.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
ElevatedButton(
child: const Text(
'Tap here to set an alarm\non weekdays at 9:30pm.'),
onPressed: _createAlarm,
),
ElevatedButton(
child: const Text('Tap here to test explicit intents.'),
onPressed: () => _openExplicitIntentsView(context)),
],
),
);
} else {
body = const Text('This plugin only works with Android');
}
return Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(child: body),
);
}
}
/// Launches intents to specific Android activities.
class ExplicitIntentsWidget extends StatelessWidget {
const ExplicitIntentsWidget(); // ignore: public_member_api_docs
// ignore: public_member_api_docs
static const String routeName = "/explicitIntents";
void _openGoogleMapsStreetView() {
final AndroidIntent intent = AndroidIntent(
action: 'action_view',
data: Uri.encodeFull('google.streetview:cbll=46.414382,10.013988'),
package: 'com.google.android.apps.maps');
intent.launch();
}
void _displayMapInGoogleMaps({int zoomLevel = 12}) {
final AndroidIntent intent = AndroidIntent(
action: 'action_view',
data: Uri.encodeFull('geo:37.7749,-122.4194?z=$zoomLevel'),
package: 'com.google.android.apps.maps');
intent.launch();
}
void _launchTurnByTurnNavigationInGoogleMaps() {
final AndroidIntent intent = AndroidIntent(
action: 'action_view',
data: Uri.encodeFull(
'google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf'),
package: 'com.google.android.apps.maps');
intent.launch();
}
void _openLinkInGoogleChrome() {
final AndroidIntent intent = AndroidIntent(
action: 'action_view',
data: Uri.encodeFull('https://flutter.io'),
package: 'com.android.chrome');
intent.launch();
}
void _startActivityInNewTask() {
final AndroidIntent intent = AndroidIntent(
action: 'action_view',
data: Uri.encodeFull('https://flutter.io'),
flags: <int>[Flag.FLAG_ACTIVITY_NEW_TASK],
);
intent.launch();
}
void _testExplicitIntentFallback() {
final AndroidIntent intent = AndroidIntent(
action: 'action_view',
data: Uri.encodeFull('https://flutter.io'),
package: 'com.android.chrome.implicit.fallback');
intent.launch();
}
void _openLocationSettingsConfiguration() {
final AndroidIntent intent = const AndroidIntent(
action: 'action_location_source_settings',
);
intent.launch();
}
void _openApplicationDetails() {
final AndroidIntent intent = const AndroidIntent(
action: 'action_application_details_settings',
data: 'package:io.flutter.plugins.androidintentexample',
);
intent.launch();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Test explicit intents'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 15.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
ElevatedButton(
child: const Text(
'Tap here to display panorama\nimagery in Google Street View.'),
onPressed: _openGoogleMapsStreetView,
),
ElevatedButton(
child: const Text('Tap here to display\na map in Google Maps.'),
onPressed: _displayMapInGoogleMaps,
),
ElevatedButton(
child: const Text(
'Tap here to launch turn-by-turn\nnavigation in Google Maps.'),
onPressed: _launchTurnByTurnNavigationInGoogleMaps,
),
ElevatedButton(
child: const Text('Tap here to open link in Google Chrome.'),
onPressed: _openLinkInGoogleChrome,
),
ElevatedButton(
child: const Text('Tap here to start activity in new task.'),
onPressed: _startActivityInNewTask,
),
ElevatedButton(
child: const Text(
'Tap here to test explicit intent fallback to implicit.'),
onPressed: _testExplicitIntentFallback,
),
ElevatedButton(
child: const Text(
'Tap here to open Location Settings Configuration',
),
onPressed: _openLocationSettingsConfiguration,
),
ElevatedButton(
child: const Text(
'Tap here to open Application Details',
),
onPressed: _openApplicationDetails,
)
],
),
),
),
);
}
}