flutter - 如何在没有 ConsumerWidget 或 HookWidget 的情况下在构建外部访问 Riverpod StateNotifier 状态?
问题描述
我有这堂课:
class BeatCounter extends StateNotifier<int> {
BeatCounter() : super(8);
int get counter => state;
void increment() {
if (state < 16) {
state++;
print('State $state');
} else
return;
}
void decrement() {
if (state > 1) {
state--;
} else
return;
}
}
final beatCounterProvider = StateNotifierProvider((ref) => BeatCounter());
并且想要访问扩展我不想(/知道如何)更改的 StatefullWidget 的类中的状态。所以我不能用'with'来扩展'ConsumerWidget'或'HookWidget'。我如何获得这堂课的状态?
class ChordsTrack extends BaseWidget {
ChordsTrack({Key key, @required this.sample}) : super(key: key);
final SOUND_SAMPLE sample;
@override
_ChordsTrackState createState() => _ChordsTrackState();
}
class _ChordsTrackState extends BaseState<ChordsTrack> {
MultitrackChordBassBoxCreator multitrackBox =
MultitrackChordBassBoxCreator();
List<bool> _data = List.generate(***BeatCounter().state***, (i) => false);
@override
void on<Signal>(Signal signal) {
setState(() => _data = AudioEngine.trackdata[widget.sample]);
}
...
}
新手问题,我知道,但非常感谢一些帮助。
解决方案
只需context.read(beatCounterProvider)
在您的initState
.
class _ChordsTrackState extends BaseState<ChordsTrack> {
MultitrackChordBassBoxCreator multitrackBox =
MultitrackChordBassBoxCreator();
List<bool> _data;
@override
void initState(){
super.initState();
_data = List.generate(context.read(beatCounterProvider).state, (i) => false);
}
@override
void on<Signal>(Signal signal) {
setState(() => _data = AudioEngine.trackdata[widget.sample]);
}
...
}
推荐阅读
- excel - 基于一个条件转置行和列的 VBA 宏
- tfs - 如何使用 TFS 在子文件夹上选择相同的扩展文件?
- reactjs - 如何从 Next Js URL 中删除子文件夹名称?
- iis - 如何在 IIS/Plesk 上将签名算法更改为 SHA-2
- csv - CSV 查找并保存到新文件
- python - urllib.error.URLError:
- mysql - BigQuery 中 MySQL 的 binary(8) 和 varbinary(16) 的等价物是什么?
- azure - 在 Azure Function 中编写视频
- c# - 使用公钥和私钥发送加密和签名的电子邮件,以便在 FMCSA 中提交数据
- pyqt5 - 从 QtWebEnginePage 获取重定向 url