Флаттер: Как я могу навигатор.pop? - PullRequest
0 голосов
/ 31 марта 2019

Я занимаюсь разработкой простого приложения, используя Flutter.

У него есть список задач, и если пользователь щелкает один из них, он отображает детали интерфейса.

В пользовательском интерфейсе есть кнопка удаления. Поэтому, когда пользователь нажимает кнопку, задача должна быть удалена, а пользовательский интерфейс должен быть возвращен к предыдущему пользовательскому интерфейсу (Todo list UI).

Я использую шаблон BloC.

class DetailsTodo extends StatelessWidget {

  final TodoRepository _todoRepository;
  final String _todoId;
  final DetailsTodoBloc bloc;

  DetailsTodo(this._todoRepository, this._todoId)
      : this.bloc = DetailsTodoBloc(_todoRepository, _todoId);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: StreamBuilder<Todo>(
            stream: bloc.todo,
            builder: (context, snapshot) {
              final todo = snapshot.data;
              print("[DetailsTodo][JOS] todo: $todo");
              return Text(todo.name);
            }),
      ),
    );
  }

А вот и BloC:

class DetailsTodoBloc {
  final TodoRepository _todoRepository;
  final String _todoId;

  final _getTodoSubject = PublishSubject<Todo>();

  final _deleteTodSubject = PublishSubject<String>();

  Stream<Todo> get todo => _getTodoSubject.stream;

  Sink<String> get delete => _deleteTodSubject.sink;

  DetailsTodoBloc(this._todoRepository, this._achievementRepository, this._todoId) {
    _getTodo();
    _deleteTodSubject.listen(_deleteTodo);
  }

  Future<Null> _getTodo() async {
    final todo = await _todoRepository.get(_todoId);
    _getTodoSubject.add(todo);
  }


  void _deleteTodo(String todoId) async {
    final result = await _todoRepository.delete(todoId);
    _getTodoSubject.add(null); // I want to notify to the UI to call "Navigator.pop". But I don't know how to do it.
  }
}

Я не знаю, как я могу вызвать «Navigator.pop» после завершения удаления задачи.

...