我有一个关于切换小部件的简单例子,我的期望在单击按钮后显示circularProgressIndicator,然后在3秒后显示文本。对于我的例子,我使用钩子和钩子。
LoadingProvider
class IsLoading extends StateNotifier<bool> {
IsLoading() : super(false);
void toggleLoading(bool value) => state = value;
}
final isLoadingProvider = StateNotifierProvider((ref) => IsLoading());Main.dart
class TestingApp extends HookWidget {
@override
Widget build(BuildContext context) {
final IsLoading isLoading = useProvider(isLoadingProvider);
return Scaffold(
body: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Center(
child: isLoading.state ? CircularProgressIndicator() : Text('This Is Your Data'),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: FlatButton(
onPressed: () => showLoading(isLoading), child: Text('Toggle Loading')),
),
],
),
),
);
}
void showLoading(IsLoading isLoading) async {
isLoading.toggleLoading(true);
print("Proses");
await Future.delayed(const Duration(seconds: 3));
print("Done");
isLoading.toggleLoading(false);
}
}但是当我按下按钮时,它不是显示progressIndicator,而是显示文本,我收到了这样的警告:
The member 'state' can only be used within instance members of subclasses of 'package:state_notifier/state_notifier.dart'.
我漏掉了什么?
下面的文档说明了我的源代码:

发布于 2020-07-16 13:48:08
它在那里说,当你像那样调用增量时,它不会触发重建方法。
所以用读方法代替isLoading.toggleLoading(真)调用,这样它就可以重新构建isLoading.read(上下文).toggleLoading(真)这样的状态。
发布于 2022-01-09 16:22:30
为您的StateNotifierProvider提供两种类型,即要返回的类的类型和类的状态。
class IsLoading extends StateNotifier<bool> {
IsLoading() : super(false);
void toggleLoading(bool value) => state = value;
}
final isLoadingProvider =
StateNotifierProvider<IsLoading, bool>((ref) => IsLoading());在您的build方法( ConsumerStateWidget)中使用:
final isLoading = ref.watch(isLoadingProvider);
return Scaffold(body: Center(child:
isLoading ? CircularProgressIndicator() : Text('This Is Your Data'),))https://stackoverflow.com/questions/62934278
复制相似问题