Регулярный запуск кода — обычное требование во многих приложениях Flutter. Если вам нужно обновить компоненты пользовательского интерфейса, получить данные из API или выполнить фоновые задачи, выполнение кода каждую секунду может иметь решающее значение. В этой статье блога мы рассмотрим различные методы достижения этой цели во Flutter, а также примеры кода и пошаговые инструкции.
Методы запуска кода каждую секунду:
- Timer. periodic():
Один из самых простых способов запускать код каждую секунду — использовать функциюTimer.periodic(), предоставляемую языком Dart. Эта функция позволяет вам многократно выполнять функцию обратного вызова в течение заданной продолжительности. Вот пример:
import 'dart:async';
void main() {
Timer.periodic(Duration(seconds: 1), (timer) {
// Code to be executed every second
print('Running code every second');
});
}
- Stream. periodic():
Другой подход — использовать конструкторStream.periodic(), который генерирует события с указанным интервалом. Комбинируя его сStreamSubscription, вы можете выполнять код повторно. Вот пример:
import 'dart:async';
void main() {
StreamSubscription periodicStreamSubscription =
Stream.periodic(Duration(seconds: 1), (count) {
// Code to be executed every second
print('Running code every second');
}).listen(null);
}
- AnimatedBuilder():
Если вы хотите обновлять компоненты пользовательского интерфейса каждую секунду, вы можете использовать виджетAnimatedBuilder. Он перестраивается в каждом кадре анимации, позволяя выполнять код через определенный интервал. Вот пример:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: AnimatedBuilder(
animation: MyAnimationController(),
builder: (context, child) {
// Code to be executed every second
print('Running code every second');
return Container();
},
),
),
),
);
}
}
class MyAnimationController extends AnimationController
with AnimationMixin {
MyAnimationController() : super(duration: Duration(seconds: 1));
}
- Тикер Flutter:
КлассTickerиз среды Flutter также можно использовать для выполнения кода каждую секунду. Создав тикер и зарегистрировав обратный вызов, можно добиться желаемого поведения. Вот пример:
import 'package:flutter/material.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
Ticker ticker = Ticker((elapsed) {
// Code to be executed every second
print('Running code every second');
});
ticker.start();
}
- Dart Isolate:
Dart поддерживает изоляты, которые представляют собой независимые рабочие процессы, которые могут выполнять задачи одновременно. Создав отдельный изолят и используяTimer, вы сможете выполнять код каждую секунду. Вот пример:
import 'dart:async';
import 'dart:isolate';
void main() {
Isolate.spawn(runCodeEverySecond, null);
}
void runCodeEverySecond(dynamic data) {
Timer.periodic(Duration(seconds: 1), (timer) {
// Code to be executed every second
print('Running code every second');
});
}
- Плагин Workmanager:
Если вам нужно запускать код каждую секунду в фоновом режиме, плагинworkmanagerможет оказаться полезным. Он предоставляет простой API для планирования задач через определенные промежутки времени. Вот пример:
// Add the workmanager dependency in pubspec.yaml
import 'package:flutter/material.dart';
import 'package:workmanager/workmanager.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
Workmanager.initialize(callbackDispatcher);
Workmanager.registerPeriodicTask(
"1",
"myTask",
frequency: Duration(seconds: 1),
);
}
void callbackDispatcher() {
Workmanager.executeTask((taskName, inputData) {
// Code to be executed every second
print('Running code every second');
return Future.value(true);
});
}
- Плагин фоновой выборки.
Другим вариантом запуска кода каждую секунду в фоновом режиме является плагинbackground_fetch. Это позволяет вам планировать периодические задачи и выполнять код, даже когда приложение не активно. Вот пример:
// Add the background_fetch dependency in pubspec.yaml
import 'package:flutter/material.dart';
import 'package:flutter_background_fetch/flutter_background_fetch.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
FlutterBackgroundFetch.initialize();
FlutterBackgroundFetch.registerHeadlessTask((taskId) async {
// Code to be executed every second
print('Running code every second');
FlutterBackgroundFetch.finish(taskId);
});
}
В этой статье мы рассмотрели различные методы ежесекундного запуска кода во Flutter. Мы рассмотрели такие методы, как Timer.periodic(), Stream.periodic(), AnimatedBuilder(), Flutter Ticker, изоляты Dart, workmanagerи плагин background_fetch. У каждого метода есть свои преимущества и варианты использования, поэтому выберите тот, который лучше всего соответствует вашим конкретным требованиям.
Используя эти методы, вы можете гарантировать, что ваше приложение Flutter выполняет код через регулярные промежутки времени, что позволяет беспрепятственно выполнять такие задачи, как обновления пользовательского интерфейса, получение данных и фоновая обработка.