В настоящее время я работаю над приложением Flutter. Здесь, когда состояние жизненного цикла приложения меняется на возобновление, мне нужно установить значение в поставщике Riverpod для обновления состояния страницы. однако я не могу вызвать поставщика в методе DidChangeAppLifecycleState. как мне еще решить свою проблему?
Код, который я пробовал для этого, выглядит следующим образом: (я назвал значение, которое хочу установить, «что-то»
final homePageProvider = ChangeNotifierProvider((ref) => HomePageState());
class HomePageState extends ChangeNotifier {
bool _something = false
bool get something => _isEmailVerified;
void setSomething(bool value) {
_something = value;
notifyListeners();
}
}
class NewHome extends ConsumerWidget with WidgetsBindingObserver{
@override
Widget build(BuildContext context, WidgetRef ref) {
WidgetsBinding.instance.addObserver(this);
... //other code for the ui
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
switch (state) {
case AppLifecycleState.resumed:
if (condition == false) {
ref.read(homePageProvider).setSomething(true);
}
break;
case AppLifecycleState.paused:
break;
case AppLifecycleState.detached:
break;
case AppLifecycleState.inactive:
break;
case AppLifecycleState.hidden:
break;
}
}
}





Кажется, ваш виджет должен быть виджетом с состоянием
Кроме того, вы можете использовать новый AppLifecycleListener, а затем получать доступ к ссылке везде, где вам это нужно:
class AppLifecyclePage extends ConsumerStatefulWidget {
const AppLifecyclePage({super.key});
@override
State<AppLifecyclePage> createState() => _AppLifecyclePageState();
}
class _AppLifecyclePageState extends State<AppLifecyclePage> {
late final AppLifecycleListener _listener;
@override
void initState() {
super.initState();
_listener = AppLifecycleListener(
onStateChange: _onStateChanged,
);
}
@override
void dispose() {
_listener.dispose();
super.dispose();
}
void _onStateChanged(AppLifecycleState state) {
switch (state) {
case AppLifecycleState.resumed:
_onResumed();
}
}
void _onResumed() {
if (condition == false) {
ref.read(homePageProvider).setSomething(true);
}
}
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Placeholder(),
);
}
}