【问题标题】:Riverpods with hooks Flutter - using ProviderRiverpods with hooks Flutter - 使用 Provider
【发布时间】:2021-05-17 07:26:26
【问题描述】:

有人可以举一个在 Riverpods 中进行额外状态修改的示例,最好使用riverpod_hooks - 我希望能够在不制作额外小部件的情况下使用它,例如:

onPress: () {
           useProvider(genderProvider).state = Gender.female;
           },

我在理解 Riverpods 文档中关于在实施后使用提供程序方面有点困难。我了解增量部分 .state++,但我找不到初始化后更改状态值的明确示例。如 x 初始化为零,但您只想将其设为 42 或输入值。

例如,我有一个 Gender {male, female, non-binary} 枚举,并且我创建了一个 GenderProvider,但我无法找出能够使用按钮在我的应用中更改性别的最佳方法。我也不完全确定 Provider 和 RiverPods 有多少相似之处,似乎有很多语义差异?

这是我目前在我的代码中声明提供程序的方式:

enum Gender {
  male,
  female,
  nonBinary
}

final genderProvider = StateProvider((_) => Gender.female);

提前致谢,感谢任何建议。

【问题讨论】:

    标签: flutter flutter-dependencies riverpod flutter-state flutter-hooks


    【解决方案1】:
    onPress: () => context.read(genderProvider).state = Gender.female,
    

    完整源代码:

    import 'package:flutter/foundation.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter_hooks/flutter_hooks.dart';
    import 'package:hooks_riverpod/hooks_riverpod.dart';
    
    void main() {
      runApp(
        ProviderScope(
          child: MaterialApp(
            debugShowCheckedModeBanner: false,
            title: 'Flutter Demo',
            home: HomePage(),
          ),
        ),
      );
    }
    
    class HomePage extends HookWidget {
      @override
      Widget build(BuildContext context) {
        final gender = useProvider(genderProvider).state;
        return Scaffold(
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text('Gender: ${describeEnum(gender)}'),
                const SizedBox(height: 16.0),
                ElevatedButton(
                  child: Text('MALE'),
                  onPressed: () => context.read(genderProvider).state = Gender.male,
                ),
                const SizedBox(height: 8.0),
                ElevatedButton(
                  child: Text('FEMALE'),
                  onPressed: () =>
                      context.read(genderProvider).state = Gender.female,
                ),
              ],
            ),
          ),
        );
      }
    }
    
    enum Gender { male, female, nonBinary }
    
    final genderProvider = StateProvider((_) => Gender.female);
    

    【讨论】:

    • 谢谢!这真的很有帮助!
    猜你喜欢
    • 2022-12-19
    • 2022-10-07
    • 2021-05-31
    • 2019-06-06
    • 2020-11-06
    • 2020-10-27
    • 2021-05-29
    • 2020-10-16
    • 1970-01-01
    相关资源
    最近更新 更多