query<T, TRef extends Ref> method

T query<T, TRef extends Ref>(
  1. ScopedQueryBase<T, TRef> query, {
  2. bool? autoDisposeWhenUnreferenced,
})

It is possible to manage the status by passing query.

Defining ScopedQuery in a global scope allows you to manage state individually and safely.

ScopedQuery allows you to cache all values, while ChangeNotifierScopedQuery monitors values and notifies updates when they change.

queryを渡して状態を管理することが可能です。

ScopedQueryをグローバルなスコープに定義しておくことで状態を個別に安全に管理することができます。

ScopedQueryを使うとすべての値をキャッシュすることができ、ChangeNotifierScopedQueryを使うと値を監視して変更時に更新通知を行います。

final valueNotifierQuery = ChangeNotifierScopedQuery(
  () => ValueNotifier(0),
);

class TestPage extends PageScopedWidget {
  @override
  Widget build(BuildContext context, PageRef ref) {
    final valueNotifier = ref.app.query(valueNotifierQuery);

    return Scaffold(
      body: Center(child: Text("${valueNotifier.value}")),
    );
  }
}

Implementation

T query<T, TRef extends Ref>(
  ScopedQueryBase<T, TRef> query, {
  bool? autoDisposeWhenUnreferenced,
}) {
  return getScopedValue<T, _QueryValue<T, TRef>>(
    (ref) => _QueryValue<T, TRef>(
      query: query,
      ref: this as TRef,
      listen: query.listen,
      autoDisposeWhenUnreferenced:
          autoDisposeWhenUnreferenced ?? query.autoDisposeWhenUnreferenced,
    ),
    listen: query.listen,
    name: query.queryName,
  );
}