Приложение flutter_app_icons перезапускается при изменении значка приложения. как этого избежать?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложение flutter_app_icons перезапускается при изменении значка приложения. как этого избежать?

Сообщение Anonymous »

Код: Выделить всё

import 'dart:developer';
import 'dart:io';

import 'package:flutter/services.dart';
import 'package:flutter_app_icons/flutter_app_icons.dart';

import 'package:shared_preferences/shared_preferences.dart';
import 'package:swift_tv/presentation/core/util/remote_config.dart';

class AndroidDynamicAppIcon {
static const String _prefKeyIcon = "last_app_icon";
static const String _prefKeyIndex = "last_app_icon_index";

static final List iconList = const [
'default',
'christmas',
'dusshera',
'ganeshchathurthi',
'navratri',
'republicday',
'diwali',
'newyear',
'pongal'
];

/// Loads the last saved icon alias, default = "default"
static Future _getLastIcon() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString(_prefKeyIcon) ?? "default";
}

/// Persists the last selected icon alias
static Future _setLastIcon(String icon) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_prefKeyIcon, icon);
}

/// Loads the last index (default = 0)
static Future _getLastIndex() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getInt(_prefKeyIndex) ?? 0;
}

/// Saves the last index
static Future _setLastIndex(int index) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt(_prefKeyIndex, index);
}

static Future changeAppIconAndroid() async {
if (!Platform.isAndroid) return;

final rc = RemoteConfigService.instance;
int newIndex = rc.appIconIndex % iconList.length;
String newIcon = iconList[newIndex];

// load previously active icon + index from storage
String oldIcon = await _getLastIcon();
int lastIndex = await _getLastIndex();

// if index hasn’t changed, skip
if (newIndex == lastIndex) {
log("No icon change needed. Current index = $newIndex");
return;
}

log("Switching Android app icon from $oldIcon → $newIcon");

final _flutterAppIconsPlugin = FlutterAppIcons();

try {
await _setLastIcon(newIcon);
await _setLastIndex(newIndex);

await _flutterAppIconsPlugin.setIcon(icon: newIcon, oldIcon: oldIcon);

log(
newIcon == "default" ? "Reset to default icon" : "Changed to $newIcon",
);

// save the current icon + index for next launch

// small delay to let Android system settle
// await Future.delayed(const Duration(milliseconds: 300));
// Restart.restartApp();
} on PlatformException catch (e) {
log("PlatformException while changing icon: $e");
} catch (e) {
await _setLastIcon(oldIcon);
await _setLastIndex(lastIndex);
log("Unexpected error: $e");
}
}
}

выше приведен код для динамического изменения значка приложения в приложении Android. Я получаю индекс значка из удаленной конфигурации в Firebase. Я использую пакет flutter_app_icons для динамического изменения значка приложения на основе индекса. Но приложение перезапускается, когда я меняю значок приложения. Это заставляет пользователя думать о сбое приложения. Как я могу избежать этого? Я хочу получить индекс значка приложения и запланировать его, когда пользователь закроет приложение.

Подробнее здесь: https://stackoverflow.com/questions/797 ... o-avoid-it
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»