#flutter #flutter-dependencies #installed-applications
Вопрос:
Я хочу реализовать в своем существующем приложении условия, при которых определенное приложение установлено или нет.
Условия:
the first app is that which is I'm going to build
Second app that is required for run first app
- Если приложение установлено (второе приложение), запустите
HomePage()
его в первом приложении - Если приложение не установлено, отобразите всплывающее окно или предупреждение об установке приложения.
Корневой код первого приложения
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Future.delayed(Duration(seconds: 2)),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return MaterialApp(
home: Splash(),
debugShowCheckedModeBanner: false,
);
} else {
return StreamBuilder(
stream: Connectivity().onConnectivityChanged,
builder: (context, AsyncSnapshot<ConnectivityResult> snapshot) {
return snapshot.data == ConnectivityResult.mobile ||
snapshot.data == ConnectivityResult.wifi
? MaterialApp(
title: 'mFollower',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Homepage(),
debugShowCheckedModeBanner: false,
)
: NoInternet();
},
);
}
});
}
}
Ответ №1:
Это может быть достигнуто с помощью пакета device_apps. Это вернет список приложений, установленных на устройстве Android.
// All the apps installed in the device
List<Application> apps = await DeviceApps.getInstalledApplications();
Поэтому для ваших требований вы можете сделать что-то вроде приведенного ниже
Future<bool> isAppInstalled() {
return DeviceApps.getInstalledApplications().then((value) =>
value.any((element) => element.packageName == 'com.example.app')); // Your app package id to check.
}
И внутри build
метода используйте Future builder для получения результата.
FutureBuilder<bool>(
future: apps(),
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.hasData amp;amp; snapshot.data) {
// App is installed
return Container(
color: Colors.green,
);
} else {
// App is not installed
return Container(color: Colors.redAccent);
}
})
К сожалению, этот плагин поддерживается только для ANDROID
Комментарии:
1. спасибо за ваш ответ, но, возможно, вы не совсем понимаете, что я собираюсь сказать.
2.Давайте разберемся на примере реальной жизни: на моем телефоне есть два приложения, т. е.
First App
иSecond App
.Second App
уже разработан и опубликован.First app
в стадии разработки. ЕслиSecond App
он установлен на моем мобильном телефоне, откройтеFirst App
HomePage()
состояние, в противном случае перенаправьте его в другое состояние, напримерnoInstalled State()
. Я поделился корневым кодомFirst App
в нем условия, уже примененного для проверки подключения к Интернету3. ОК. Таким образом, вы пытаетесь открыть
First app
файл, если он установлен на устройстве, когда пользователь пытается открытьSecond app
файл, который уже установлен. Пользователь -> Открывает второе приложение ->> Если установлено первое приложение, откройте его или скажите какую-нибудь ошибку ?4. Да, именно так. Как я могу реализовать в существующем коде, которые указаны выше
5. Вам нужно реализовать вышеуказанную логику во втором приложении.