У меня есть приложение Flutter, в котором используется Workmanager, чтобы показать красное окно наложения для разбивших новостей через Flutter_overlay_window. Оверловое появляется правильно и воспроизводит звук, но он остается видимым на неопределенный срок, а не исчезает через 10 секунд, как запрограммировано в Workmanager.dart < /p>
Несмотря на то, что код запускается (подтверждается с помощью Debugprint), оверлей остается видимым даже после закрытия приложения или перезагрузки, и только закрывает кнопку «Br />». перезагружен.
Пожалуйста, предложите исправления или модификации кода, чтобы убедиться, что наложение автоматически закрывается даже на фоне < /p>
Мой манифест: < /p>
< /code>
breaking_news_overlay.dart: < /p>
class BreakingNewsOverlay extends StatefulWidget {
child: Text(
'Breaking News',
style: TextStyle(
color: Colors.white,
fontSize: 22,
fontWeight: FontWeight.bold,
),
),
),
),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
title,
style: const TextStyle(
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.right,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
const SizedBox(height: 4),
Text(
'more',
style: TextStyle(
color: Colors.white.withOpacity(0.8),
fontSize: 14,
),
),
],
),
),
),
IconButton(
icon: const Icon(Icons.close, color: Colors.white),
onPressed: () => FlutterOverlayWindow.closeOverlay(),
),
],
),
);
}
@override
void dispose() {
FlutterOverlayWindow.overlayListener.drain();
super.dispose();
}
}
< /code>
workmanager.dart: < /p>
const String breakingNewsTask = "checkBreakingNewsTask";
class AppStateObserver with WidgetsBindingObserver {
static bool isAppForeground = true;
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
isAppForeground = state == AppLifecycleState.resumed;
}
}
void setupAppStateObserver() {
final appStateObserver = AppStateObserver();
WidgetsBinding.instance.addObserver(appStateObserver);
}
void callbackDispatcher() {
Workmanager().executeTask((task, inputData) async {
if (task == breakingNewsTask) {
try {
final DatabaseReference newsRef =
FirebaseDatabase.instance.ref().child('BreakingNews');
final snapshot = await newsRef.limitToLast(1).get();
if (snapshot.exists) {
final data = snapshot.children.first.value as Map?;
final title = data?['BkgNewsTitle'] ?? '';
final date = data?['date'];
final isGranted = await FlutterOverlayWindow.isPermissionGranted();
if (!isGranted) {
log('Overlay permission not granted. Cannot show overlay.');
return Future.value(true);
}
debugPrint('flutter:');
await FlutterOverlayWindow.showOverlay(
height: 130,
width: WindowSize.matchParent,
alignment: OverlayAlignment.bottomCenter,
enableDrag: false,
overlayTitle: "BreakingNewsOverlay",
flag: OverlayFlag.defaultFlag,
);
final audioPlayer = AudioPlayer();
await audioPlayer.play(AssetSource('mp3/news-broadcast.mp3'));
debugPrint('flutter: ');
final completer = Completer();
Timer(const Duration(seconds: 10), () {
debugPrint('flutter: ');
completer.complete();
});
await completer.future;
if (AppStateObserver.isAppForeground) {
debugPrint('flutter: ###');
await FlutterOverlayWindow.closeOverlay();
debugPrint('flutter: done');
} else {
debugPrint('flutter: error');
}
}
} catch (e) {
log('Error in breaking news task: $e');
}
}
return Future.value(true);
});
}
Future initializeWorkManager() async {
setupAppStateObserver();
await Workmanager().initialize(
callbackDispatcher,
isInDebugMode: false,
);
);
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... aking-news
Приложение Flutter, которое использует Workmanager, чтобы показать красное оверлейное окно для предупреждения о новостях ⇐ Android
Форум для тех, кто программирует под Android
1746347796
Anonymous
У меня есть приложение Flutter, в котором используется Workmanager, чтобы показать красное окно наложения для разбивших новостей через Flutter_overlay_window. Оверловое появляется правильно и воспроизводит звук, но он остается видимым на неопределенный срок, а не исчезает через 10 секунд, как запрограммировано в Workmanager.dart < /p>
Несмотря на то, что код запускается (подтверждается с помощью Debugprint), оверлей остается видимым даже после закрытия приложения или перезагрузки, и только закрывает кнопку «Br />». перезагружен.
Пожалуйста, предложите исправления или модификации кода, чтобы убедиться, что наложение автоматически закрывается даже на фоне < /p>
Мой манифест: < /p>
< /code>
breaking_news_overlay.dart: < /p>
class BreakingNewsOverlay extends StatefulWidget {
child: Text(
'Breaking News',
style: TextStyle(
color: Colors.white,
fontSize: 22,
fontWeight: FontWeight.bold,
),
),
),
),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
title,
style: const TextStyle(
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.right,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
const SizedBox(height: 4),
Text(
'more',
style: TextStyle(
color: Colors.white.withOpacity(0.8),
fontSize: 14,
),
),
],
),
),
),
IconButton(
icon: const Icon(Icons.close, color: Colors.white),
onPressed: () => FlutterOverlayWindow.closeOverlay(),
),
],
),
);
}
@override
void dispose() {
FlutterOverlayWindow.overlayListener.drain();
super.dispose();
}
}
< /code>
workmanager.dart: < /p>
const String breakingNewsTask = "checkBreakingNewsTask";
class AppStateObserver with WidgetsBindingObserver {
static bool isAppForeground = true;
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
isAppForeground = state == AppLifecycleState.resumed;
}
}
void setupAppStateObserver() {
final appStateObserver = AppStateObserver();
WidgetsBinding.instance.addObserver(appStateObserver);
}
void callbackDispatcher() {
Workmanager().executeTask((task, inputData) async {
if (task == breakingNewsTask) {
try {
final DatabaseReference newsRef =
FirebaseDatabase.instance.ref().child('BreakingNews');
final snapshot = await newsRef.limitToLast(1).get();
if (snapshot.exists) {
final data = snapshot.children.first.value as Map?;
final title = data?['BkgNewsTitle'] ?? '';
final date = data?['date'];
final isGranted = await FlutterOverlayWindow.isPermissionGranted();
if (!isGranted) {
log('Overlay permission not granted. Cannot show overlay.');
return Future.value(true);
}
debugPrint('flutter:');
await FlutterOverlayWindow.showOverlay(
height: 130,
width: WindowSize.matchParent,
alignment: OverlayAlignment.bottomCenter,
enableDrag: false,
overlayTitle: "BreakingNewsOverlay",
flag: OverlayFlag.defaultFlag,
);
final audioPlayer = AudioPlayer();
await audioPlayer.play(AssetSource('mp3/news-broadcast.mp3'));
debugPrint('flutter: ');
final completer = Completer();
Timer(const Duration(seconds: 10), () {
debugPrint('flutter: ');
completer.complete();
});
await completer.future;
if (AppStateObserver.isAppForeground) {
debugPrint('flutter: ###');
await FlutterOverlayWindow.closeOverlay();
debugPrint('flutter: done');
} else {
debugPrint('flutter: error');
}
}
} catch (e) {
log('Error in breaking news task: $e');
}
}
return Future.value(true);
});
}
Future initializeWorkManager() async {
setupAppStateObserver();
await Workmanager().initialize(
callbackDispatcher,
isInDebugMode: false,
);
);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79605436/flutter-app-that-uses-workmanager-to-show-a-red-overlay-window-for-breaking-news[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия