Flutter 启动器 - 如何在卸载应用程序时更新应用程序列表?
Flutter launcher - How to update app list when I uninstall an app?
大家好,我是 Flutter 和编程的新手。我正在尝试创建一个带有 flutter 的 android 应用程序启动器。
我找遍了所有地方,但找不到问题的答案。
我正在使用包:device_apps
所以要检索我正在使用的应用程序列表
List<Application> apps = await DeviceApps.getInstalledApplications();
当我 install/uninstall 一个应用程序时,如何更新我的列表视图?
DeviceApps.getInstalledApplications()
returns 一个 List<Application>
我们可以用来绘制我们的 ListView
:
Widget _buildListView() {
return ListView.builder(
itemBuilder: (BuildContext context, int index) {
Application app = _apps[index];
return Column(
children: <Widget>[
ListTile(
onTap: () => DeviceApps.openApp(app.packageName),
title: Text('${app.appName} (${app.packageName})'),
),
Divider()
],
);
},
itemCount: _apps.length);
}
我们可以通过覆盖 StatefulWidget
:
的 initState
方法初始化状态后立即加载已安装的应用程序
List<Application> _apps = [];
@override
void initState() {
super.initState();
_loadApps();
}
Future<void> _loadApps() async {
List<Application> applications = await DeviceApps.getInstalledApplications();
setState(() => _apps = applications);
}
Widget _buildListView() {
return ListView.builder(
itemBuilder: (BuildContext context, int index) {
Application app = _apps[index];
return Column(
children: <Widget>[
ListTile(
onTap: () => DeviceApps.openApp(app.packageName),
title: Text('${app.appName} (${app.packageName})'),
),
Divider()
],
);
},
itemCount: _apps.length);
}
这样,我们也可以方便地使用GestureDetector
重新加载已安装的应用程序:
Widget _buildRefreshButton() {
return GesetureDetector(
onTap: () async { await _loadApps(); }
child: Text("Reload apps")
);
}
最好的解决方案是在应用程序启动时收到通知 uninstalled/installed,但不幸的是,该软件包尚不支持此功能。
一个 hacky 解决方法是通过 Timer.periodic
轮询上面的 _loadApps()
,但是,出于性能和用户体验的原因,不建议这样做。
大家好,我是 Flutter 和编程的新手。我正在尝试创建一个带有 flutter 的 android 应用程序启动器。
我找遍了所有地方,但找不到问题的答案。
我正在使用包:device_apps
所以要检索我正在使用的应用程序列表
List<Application> apps = await DeviceApps.getInstalledApplications();
当我 install/uninstall 一个应用程序时,如何更新我的列表视图?
DeviceApps.getInstalledApplications()
returns 一个 List<Application>
我们可以用来绘制我们的 ListView
:
Widget _buildListView() {
return ListView.builder(
itemBuilder: (BuildContext context, int index) {
Application app = _apps[index];
return Column(
children: <Widget>[
ListTile(
onTap: () => DeviceApps.openApp(app.packageName),
title: Text('${app.appName} (${app.packageName})'),
),
Divider()
],
);
},
itemCount: _apps.length);
}
我们可以通过覆盖 StatefulWidget
:
initState
方法初始化状态后立即加载已安装的应用程序
List<Application> _apps = [];
@override
void initState() {
super.initState();
_loadApps();
}
Future<void> _loadApps() async {
List<Application> applications = await DeviceApps.getInstalledApplications();
setState(() => _apps = applications);
}
Widget _buildListView() {
return ListView.builder(
itemBuilder: (BuildContext context, int index) {
Application app = _apps[index];
return Column(
children: <Widget>[
ListTile(
onTap: () => DeviceApps.openApp(app.packageName),
title: Text('${app.appName} (${app.packageName})'),
),
Divider()
],
);
},
itemCount: _apps.length);
}
这样,我们也可以方便地使用GestureDetector
重新加载已安装的应用程序:
Widget _buildRefreshButton() {
return GesetureDetector(
onTap: () async { await _loadApps(); }
child: Text("Reload apps")
);
}
最好的解决方案是在应用程序启动时收到通知 uninstalled/installed,但不幸的是,该软件包尚不支持此功能。
一个 hacky 解决方法是通过 Timer.periodic
轮询上面的 _loadApps()
,但是,出于性能和用户体验的原因,不建议这样做。