gpt4 book ai didi

flutter - 带钩子(Hook)的 Riverpods Flutter - 使用 Provider

转载 作者:行者123 更新时间:2023-12-05 02:01:57 25 4
gpt4 key购买 nike

有人可以给出一个在 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);

在此先感谢,我感谢任何建议。

最佳答案

onPress: () => context.read(genderProvider).state = Gender.female,

enter image description here

完整源代码:

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);

关于flutter - 带钩子(Hook)的 Riverpods Flutter - 使用 Provider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66190584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com