flutter - Riverpods with hooks Flutter - 使用 Provider
问题描述
有人可以举一个最好使用riverpod_hooks在Riverpods中进行额外状态修改的示例 - 我希望能够在不制作额外小部件的情况下使用它,例如:
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,
完整源代码:
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);
推荐阅读
- python - fpdf“UnicodeEncodeError:'latin-1'编解码器无法在位置 88 编码字符'\u2013':序数不在范围内(256)”
- xcode - Xcode IDE Mac - “自动运行”继续运行。这正常吗?
- snowflake-cloud-data-platform - 在代码中使用 & 符号的存储过程的 Sqitch 部署导致失败
- reactjs - 使用 ReactJS 中表中的行中的数据从下拉列表中获取选定的值
- c - C语言:从字符串的BST中删除一个节点
- java - 允许用户输入更改地图
- javascript - 如何在 Google OAuth 客户端中使用私有 IP 作为“授权的 JavaScript 来源”?
- android - 即使应用程序被杀死或在后台,有没有办法跟踪 GPS 定位?颤振应用
- xcode - 在 React Native 项目中安装 Cocoapods 时出错
- c - 是否有充分的理由来检查布尔值是否相等?