GetX Firebase 流不更新 UI

GetX Firebase stream does not update UI

我遗漏了 GetX 和 Firebase 流的一些基本知识。 ListView 的 UI 不会更新,直到 UI(setState 或其他)发生变化。

我得到了一个 TodoController,它带有一个绑定到 Firebase 流的 RxList 和一个用于显示所有待办事项的 ListView。 ListView 未更新。

GetBuilder<TodoController>(
  builder: (_) => TodoListView(
    todos: _.todos,
  ),
),

DB class

final FirebaseFirestore _firestore = FirebaseFirestore.instance;
String uid = FirebaseAuth.instance.currentUser!.uid;
return _firestore
    .collection('todos')
    .snapshots()
    .map((QuerySnapshot query) {
  List<Todo> _todos = [];
  for (var todoDoc in query.docs) {
    _todos.add(
      Todo.fromDocumentSnapshot(todoDoc)
    );
  }
  return _todos;
});

控制器class

class TodoController extends GetxController {
  final RxList<Todo> _todos = RxList<Todo>([]);
  final TodosDB _db = TodosDB();

  @override
  void onReady() {
    _todos.bindStream(_db.getTodoStream());
    super.onReady();
  }

  List<Todo> get todos {
    // to some fancy stuff... doesn't matter if I make
    // use of .where or anything
    return _todos;
  }
}

通过将 GetBuilder 更改为 GetX

解决

GetBuilder 是 non-reactive 而 GetX 是反应式的

GetBuilder<TodoController>(
  builder: (_) => TodoListView(
    todos: _.todos,
  ),
),

改成这个

GetX<TodoController>(
  builder: (_) => TodoListView(
    todos: _.todos,
  ),
),