Моя цель:
Создать приложение Flutter с таймером обратного отсчета для Android. Таймеры, которые я запускаю, должны продолжать работать, даже если экран телефона заблокирован или пользователь переключается на другое приложение.
Что я нашел в Интернете:
Это и это, которые сложны.
На вид более простое решение:
Оно использует StatelessWidget и Provider, чтобы, казалось бы, создавать виджеты, имеющие состояние, потому что Provider уведомляет виджеты об изменениях. Таким образом, можно динамически добавлять новые таймеры, и обратный отсчет таймера не останавливается, даже если экран телефона заблокирован или пользователь переключается на другое приложение. Никаких дополнений в AndroidManifest.xml не требуется.
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'dart:async';
class TimerProvider with ChangeNotifier {
List _timers = [];
List _timerInstances = [];
List get timers => _timers;
void addTimer(int duration) {_timers.add(duration); _startTimer(_timers.length - 1); notifyListeners();}
void decrementTimer(int index) {if (_timers[index] > 0) {_timers[index]--; notifyListeners();}}
void _startTimer(int index) {
if (_timerInstances.length TimerScreen(index: index),),);},
),
);
},
);
},
),
floatingActionButton: FloatingActionButton(onPressed: () {Provider.of(context, listen: false).addTimer(60);}, child: Icon(Icons.add),),
);
}
}
void main() {runApp(MyApp());}
Добавлены зависимости:
cupertino_icons: ^1.0.6
provider: ^6.1.2
Мой вопрос:
Ранее я использовал виджеты с сохранением состояния и FlutterBackground.enableBackgroundExecution() через пакет import ': flutter_background/flutter_background.dart';, но когда экран телефона блокируется, таймер приостанавливается. Но если вы запустите код, который я предоставил выше, он действительно работает, если экран телефона заблокирован, и работает, если пользователь переключается на другое приложение, даже без использования flutter_background.
Я новичок в Flutter, поэтому мне хотелось бы знать, является ли создание приложения таким образом с использованием StatelessWidget «хорошей разработкой» в экосистеме Flutter/Dart? Я планирую расширить функциональность, чтобы иметь возможность приостанавливать/воспроизводить таймер на экране таймера, а также иметь отдельный экран, на котором можно будет редактировать продолжительность таймера. Я также буду сохранять таймеры в хранилище с помощью Hive.
ОБНОВЛЕНИЕ:
Riverpod можно использовать для создания некоторых классов с состоянием. . Следующий код также был сгенерирован ChatGPT4o, и он работает, даже если пользователь переключается на другое приложение или блокирует экран телефона.
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'dart:async';
// Define a ChangeNotifierProvider for the TimerProvider
class TimerProvider extends ChangeNotifier {
List _timers = [];
List _timerInstances = [];
List get timers => _timers;
int defaultDuration = 300;
void addTimer(int duration) {_timers.add(duration);_startTimer(_timers.length - 1);notifyListeners();}
void decrementTimer(int index) {if (_timers[index] > 0) {_timers[index]--;notifyListeners();}}
void _startTimer(int index) {
if (_timerInstances.length TimerScreen(index: index)),);},
),
);
},
),
floatingActionButton: FloatingActionButton(onPressed: () {ref.read(timerProvider).addTimer(timerData.defaultDuration);}, child: Icon(Icons.add),),
);
}
}
void main() {
runApp(MyApp());
}
Зависимости:
cupertino_icons: ^1.0.6
flutter_riverpod: ^2.5.1
Подробнее здесь: https://stackoverflow.com/questions/790 ... background
Является ли использование StatelessWidget с Provider надежным способом добиться фоновой работы во Flutter? [закрыто] ⇐ Android
Форум для тех, кто программирует под Android
1727607171
Anonymous
[b]Моя цель:[/b]
Создать приложение Flutter с таймером обратного отсчета для Android. Таймеры, которые я запускаю, должны продолжать работать, даже если экран телефона заблокирован или пользователь переключается на другое приложение.
[b]Что я нашел в Интернете:[/b]
Это и это, которые сложны.
[b]На вид более простое решение:[/b]
Оно использует StatelessWidget и Provider, чтобы, казалось бы, создавать виджеты, имеющие состояние, потому что Provider уведомляет виджеты об изменениях. Таким образом, можно динамически добавлять новые таймеры, и обратный отсчет таймера не останавливается, даже если экран телефона заблокирован или пользователь переключается на другое приложение. Никаких дополнений в AndroidManifest.xml не требуется.
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'dart:async';
class TimerProvider with ChangeNotifier {
List _timers = [];
List _timerInstances = [];
List get timers => _timers;
void addTimer(int duration) {_timers.add(duration); _startTimer(_timers.length - 1); notifyListeners();}
void decrementTimer(int index) {if (_timers[index] > 0) {_timers[index]--; notifyListeners();}}
void _startTimer(int index) {
if (_timerInstances.length TimerScreen(index: index),),);},
),
);
},
);
},
),
floatingActionButton: FloatingActionButton(onPressed: () {Provider.of(context, listen: false).addTimer(60);}, child: Icon(Icons.add),),
);
}
}
void main() {runApp(MyApp());}
[b]Добавлены зависимости:[/b]
cupertino_icons: ^1.0.6
provider: ^6.1.2
[b]Мой вопрос:[/b]
Ранее я использовал виджеты с сохранением состояния и FlutterBackground.enableBackgroundExecution() через пакет import ': flutter_background/flutter_background.dart';, но когда экран телефона блокируется, таймер приостанавливается. Но если вы запустите код, который я предоставил выше, [b]он действительно работает[/b], если экран телефона заблокирован, и работает, если пользователь переключается на другое приложение, даже без использования flutter_background.
Я новичок в Flutter, поэтому мне хотелось бы знать, является ли создание приложения таким образом с использованием StatelessWidget «хорошей разработкой» в экосистеме Flutter/Dart? Я планирую расширить функциональность, чтобы иметь возможность приостанавливать/воспроизводить таймер на экране таймера, а также иметь отдельный экран, на котором можно будет редактировать продолжительность таймера. Я также буду сохранять таймеры в хранилище с помощью Hive.
[b]ОБНОВЛЕНИЕ:[/b]
Riverpod можно использовать для создания некоторых классов с состоянием. . Следующий код также был сгенерирован ChatGPT4o, и он работает, даже если пользователь переключается на другое приложение или блокирует экран телефона.
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'dart:async';
// Define a ChangeNotifierProvider for the TimerProvider
class TimerProvider extends ChangeNotifier {
List _timers = [];
List _timerInstances = [];
List get timers => _timers;
int defaultDuration = 300;
void addTimer(int duration) {_timers.add(duration);_startTimer(_timers.length - 1);notifyListeners();}
void decrementTimer(int index) {if (_timers[index] > 0) {_timers[index]--;notifyListeners();}}
void _startTimer(int index) {
if (_timerInstances.length TimerScreen(index: index)),);},
),
);
},
),
floatingActionButton: FloatingActionButton(onPressed: () {ref.read(timerProvider).addTimer(timerData.defaultDuration);}, child: Icon(Icons.add),),
);
}
}
void main() {
runApp(MyApp());
}
Зависимости:
cupertino_icons: ^1.0.6
flutter_riverpod: ^2.5.1
Подробнее здесь: [url]https://stackoverflow.com/questions/79005879/is-the-use-of-statelesswidget-with-provider-a-reliable-way-to-achieve-background[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия