【问题标题】:Provider to RiverpodRiverpod 的提供者
【发布时间】:2022-11-11 12:05:53
【问题描述】:

所以我使用了 Flutter 游戏模板,我发现了这个:

 ProxyProvider2<SettingsController, ValueNotifier<AppLifecycleState>,
              AudioController>(
            // Ensures that the AudioController is created on startup,
            // and not "only when it's needed", as is default behavior.
            // This way, music starts immediately.
            lazy: false,
            create: (context) => AudioController()..initialize(),
            update: (context, settings, lifecycleNotifier, audio) {
              if (audio == null) throw ArgumentError.notNull();
              audio.attachSettings(settings);
              audio.attachLifecycleNotifier(lifecycleNotifier);
              return audio;
            },
            dispose: (context, audio) => audio.dispose(),
          ),

但不幸的是,我不喜欢提供者。如何将此提供程序转换为riverpod?

【问题讨论】:

    标签: flutter dart riverpod flutter-riverpod


    【解决方案1】:

    Riverpod 中的等价物是:

    final settingsProvider = Provider<SettingsController>(...);
    final appLifecycleStateProvider = Provider<ValueNotifier<AppLifecycleState>>(...);
    
    
    final audioControllerProivder = Provider<AudioController>((ref) {
      final audio = AudioController()..initialize();
      ref.onDispose(audio.dispose);
    
      ref.listen<SettingsController>(settingsProvider, (prev, next) {
        audio.attachSettings(next);
      });
      ref.listen<ValueNotifier<AppLifecycleState>>(appLifecycleStateProvider, (prev, next) {
        audio.attachLifecycleNotifier(next);
      });
    
      return audio;
    });
    

    尽管有可能通过使用ref.watch 来进一步简化这一点。但是上面的sn-p应该是一个好的开始

    【讨论】:

    • 我会试试这个
    • 顺便说一句, ValueNotifier<AppLifecycleState> 似乎是一个继承的小部件return InheritedProvider&lt;ValueNotifier&lt;AppLifecycleState&gt;&gt;.value( value: lifecycleListenable, child: widget.child, );
    • 如何在我的 Riverpod 中收听 ValueNotifier<Applifecycle> 继承的小部件?
    • 您可以将该提供程序转换为 Riverpod 的提供程序
    【解决方案2】:

    Remi Rousselet

    使用 ref.listen 不起作用,我所做的是将其更改为 ref.watch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 2021-08-11
      • 2022-10-24
      • 1970-01-01
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      相关资源
      最近更新 更多