Флаттер - Блок Пожарного Магазина - PullRequest
0 голосов
/ 26 сентября 2018

Я хотел бы знать, как реализовать шаблон Bloc для Firestore.
При применении Bloc для приложения приращения из приложения по умолчанию флаттера будет выглядеть следующим образом.

class IncrementBloc implements BlocBase {

  int _counter;


  StreamController<int> _counterController = StreamController<int>();
  StreamSink<int> get _inAdd => _counterController.sink;
  Stream<int> get outCounter => _counterController.stream;


  StreamController<int> _actionController = StreamController<int>();
  StreamSink<int> get incrementCounter => _actionController.sink;

  IncrementBloc() {
    _counter = 0;
    _actionController.stream.listen(_handleLogic);
  }

  void _handleLogic(data) {
    _counter += 1;
    _inAdd.add(_counter);
  }

  @override
  void dispose() {
    _counterController.close();
    _actionController.close();
  }
}

Вопрос в том, как реализовать эту логику для Firestore.Например, если я хочу обновить значение значка, когда пользователь получает нового подписчика, я должен прослушать новое создание документа Firestore.Но я не знаю, как создать Bloc Firestore версию, охватывающую эти вещи, и я не смог ее найти.Как я могу слушать это в Bloc Кто-нибудь подскажет, как его создать?

1 Ответ

0 голосов
/ 14 декабря 2018

Что-то вроде этого ниже должно работать для вас, просто добавьте слушателя на страницу, которую вы хотите показать это значение

class IncrementBloc implements BlocBase {

  int _counter;

  StreamController<int> _counterController = StreamController<int>();
  StreamSink<int> get _inAdd => _counterController.sink;
  Stream<int> get outCounter => _counterController.stream;


  StreamController<int> _actionController = StreamController<int>();
  StreamSink<int> get incrementCounter => _actionController.sink;

  IncrementBloc() {
    // Get the latest value from firebase and listen to stream
    countAPI.getNumber().then(number) {
      _counter = number;
      _inAdd(_counter);
    });
    _actionController.stream.listen(_handleLogic);
  }

  void _handleLogic(data) async {
    _counter += 1;
    await countAPI.updateNumber(_counter); // this updates firebase
  }

  @override
  void dispose() {
    _counterController.close();
    _actionController.close();
  }
}

class APIs {
  Future<int> getNumber() async {
    try {
      // Get number from firebase
    } catch (e) {
      // Error
    }
  }

  Future<void> updateNumber() async {
    // Firebase upload 
  }
}

APIs countAPI = APIs();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...