You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Provider包中Selector0类的用法、适用场景及示例咨询

关于Provider中Selector0的适用场景与示例

适用场景

  • 仅监听Provider状态变化,无需使用状态值:当你需要感知某个Provider的状态更新,但组件重建逻辑不依赖该Provider的具体数据时,Selector0是最优选择。
  • 简化无参数Selector写法:替代Selector<MyModel, void>这类冗余写法,更直观表达“不选择任何数据,仅监听变化”的意图。
  • 触发无数据依赖的重建:比如刷新时间戳、启动动画、执行日志记录等操作,只需要响应Provider的更新事件,不需要用到状态本身。

示例代码

以下是一个简单Demo:通过Selector0监听计数器Provider的变化,每次计数器更新时刷新显示当前时间戳(全程不使用计数器的数值)。

1. 定义Counter Provider

class Counter extends ChangeNotifier {
  int _count = 0;
  int get count => _count;

  void increment() {
    _count++;
    notifyListeners();
  }
}

2. 使用Selector0的组件

class TimestampDisplay extends StatelessWidget {
  const TimestampDisplay({super.key});

  @override
  Widget build(BuildContext context) {
    return Selector0<Counter>(
      // 无需选择数据,返回null即可
      selector: () => null,
      builder: (context, _) {
        // 每次Counter触发notifyListeners时,这里会重建并更新时间
        return Text('最后更新时间: ${DateTime.now().toLocal().toString()}');
      },
    );
  }
}

3. 主界面集成

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (context) => Counter(),
      child: const MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Selector0 示例')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const TimestampDisplay(),
              const SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  Provider.of<Counter>(context, listen: false).increment();
                },
                child: const Text('点击更新计数器'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

效果说明

点击“点击更新计数器”按钮时,Counter会触发状态更新,Selector0会感知到这一变化并重建TimestampDisplay组件,从而刷新显示的时间戳——整个过程没有使用Counter的count值,仅利用了它的状态更新事件。

内容的提问来源于stack exchange,提问作者Israr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:42:15