Я пробую Флаттер с Провайдером . Моя цель проста: я хочу использовать StreamProvider
, чтобы выдавать новое целое число каждую секунду и печатать это целое число. Я не заинтересован в достижении этой цели каким-либо другим способом, потому что я хочу конкретно научиться работать с StreamProvider
.
Проблема в том, что, хотя в каждую секунду печатается новое значение, предыдущее состояние не очищается, поэтому числа накладываются друг на друга.
Как мне решить эту проблему?
Исходный код и снимок экрана:
import 'package:provider/provider.dart';
import 'package:spellcharger/theme/dark.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Stream<int> timedCounter(Duration interval, [int maxCount]) async* {
int i = 0;
while (true) {
await Future.delayed(interval);
yield i++;
if (i == maxCount) break;
}
}
@override
Widget build(BuildContext context) {
return StreamProvider.value(
value: timedCounter(new Duration(seconds: 1), 2000),
initialData: 0,
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
theme: darkTheme,
home: CounterWrapper() // LoginScreen(title: 'SpellCharger'),
),
);
}
}
class CounterWrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<int>(
builder: (_, a, child) {
// THIS IS REPAINTING BUT NOT CLEARING THE PREVIOUS PAINT
return Text(a.toString());
}
);
}
}
![enter image description here](https://i.stack.imgur.com/XPVYf.png)