Чтобы перестроить виджет во Flutter через определенные промежутки времени, вы можете использовать различные методы. Вот несколько примеров кода:
- Использование
Timer. periodic
:import 'dart:async'; import 'package:flutter/material.dart'; class RebuildWidget extends StatefulWidget { @override _RebuildWidgetState createState() => _RebuildWidgetState(); } class _RebuildWidgetState extends State<RebuildWidget> { Timer? _timer; int _counter = 0; @override void initState() { super.initState(); _timer = Timer.periodic(Duration(seconds: 5), (timer) { setState(() { _counter++; }); }); } @override void dispose() { _timer?.cancel(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Rebuild Widget'), ), body: Center( child: Text('Counter: $_counter'), ), ); } }
В этом примере метод Timer. periodic
используется для перестроения виджета каждые 5 секунд. Переменная _counter
увеличивается, а виджет обновляется с помощью setState
.
- Использование
StreamBuilder
:import 'dart:async'; import 'package:flutter/material.dart'; class RebuildWidget extends StatelessWidget { final Stream<int> _counterStream = Stream<int>.periodic(Duration(seconds: 5), (count) => count); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Rebuild Widget'), ), body: Center( child: StreamBuilder<int>( stream: _counterStream, builder: (context, snapshot) { if (snapshot.hasData) { return Text('Counter: ${snapshot.data}'); } else { return CircularProgressIndicator(); } }, ), ), ); } }
В этом примере StreamBuilder
используется для перестроения виджета каждые 5 секунд. _counterStream
генерирует новое значение каждые 5 секунд, и виджет обновляется последним значением.
- Использование
Timer
иsetState
:import 'dart:async'; import 'package:flutter/material.dart'; class RebuildWidget extends StatefulWidget { @override _RebuildWidgetState createState() => _RebuildWidgetState(); } class _RebuildWidgetState extends State<RebuildWidget> { int _counter = 0; @override void initState() { super.initState(); _startTimer(); } void _startTimer() { Timer(Duration(seconds: 5), () { setState(() { _counter++; _startTimer(); }); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Rebuild Widget'), ), body: Center( child: Text('Counter: $_counter'), ), ); } }
В этом примере Таймер
используется для перестройки виджета каждые 5 секунд. Функция _startTimer
вызывается первоначально и устанавливает таймер, который увеличивает переменную _counter
, а затем запускает таймер снова.