我想知道螢屏(StatelessWidget)是在前面還是在后面。現在,背景中的螢屏顯示 AlertDialog,但我只想在螢屏在前面時顯示對話框。有什么辦法嗎?
這是我使用 hooks_riverpod 的代碼。由于“主要是代碼”警告,我省略了一些行。
final _provider = provider801x;
class MyPage801x extends HookConsumerWidget {
MyPage801x({Key? key}) : super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
final String? message = ref.watch(_provider).message;
if (message != null) {
ref.read(_provider).done();
showResult(context, message); //don't want to show when in background.
}
return Scaffold(
appBar: AppBar(
title: Text('main screen'),
),
body: Container(),
);
}
Future<void> showResult(BuildContext context, String message) async {
Future.delayed(Duration(milliseconds: 500), () async {
await showOKOnlyDialog(context, message: message);
});
}
}
final provider801x = ChangeNotifierProvider.autoDispose((ref) => Notifier801x(ref));
class Notifier801x extends ChangeNotifier {
Notifier801x(this._ref) {
_iapManager = IAPManager4Android();
_refreshDataset();
_iapListener = _iapManager.onChangedIAP.listen((IAPTransactionStateEnum state) async {
_message = state.message! ' @801x';
notifyListeners();
});
}
String? _message = null;
String? get message => _message;
void done() {
_message = null;
}
void _refreshDataset() {
//fetch data
notifyListeners();
}
}
uj5u.com熱心網友回復:
你可以使用mounted這種情況。
mounted如果小部件對用戶可見或技術上位于螢屏堆疊的頂部,則為 true,否則將為 false。
所以,你可以像這樣使用它
if(mounted){
//do your stuff like show dialog or snackbar
}
uj5u.com熱心網友回復:
在 main 函式中使用靜態字串(或 DI ),在任何螢屏的構建函式中將其設定為類名。檢查此變數以了解哪個螢屏可見。
uj5u.com熱心網友回復:
此代碼有效!
if (ModalRoute.of(context)?.isCurrent ?? false) {
showResult(context, message);
}
我從下面的頁面得到了這個答案。謝謝你們!
顫振 | 如何知道小部件是否位于導航堆疊頂部(可見)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/487756.html
