Является ли использование StatelessWidget с Provider надежным способом добиться фонового запуска во Flutter?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Является ли использование StatelessWidget с Provider надежным способом добиться фонового запуска во Flutter?

Сообщение Anonymous »

Моя цель:

Создать приложение 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.

Подробнее здесь: https://stackoverflow.com/questions/790 ... background
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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