Поставщик флаттера перекрашивает, но не очищает последнюю краску - PullRequest
0 голосов
/ 12 апреля 2020

Я пробую Флаттер с Провайдером . Моя цель проста: я хочу использовать 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

1 Ответ

1 голос
/ 12 апреля 2020

Я пользуюсь провайдерской версией 4.0.5, и она работает нормально.

Примечание: я удаляю заряд заклинателей темы, потому что у меня его нет.

enter image description here

...