我可以在不傳遞背景關系的情況下在函式內顯示對話框嗎?
void test(){
showDialog(context: context, builder: (_) => AlertDialog(
content: Column(
children: [
Row(
children: const [
Icon(Icons.check_circle, color: Colors.green,),
Text("Hi"),
],
)
],
),
));
}
對不起,我沒有很好地解釋,沒有將背景關系傳遞給函式,而不是 showDialog
uj5u.com熱心網友回復:
根據檔案(https://api.flutter.dev/flutter/material/showDialog.html),您不能,這是必需的。
uj5u.com熱心網友回復:
簡短的回答是不,你不能。
長答案:首先,BuildContext
是一個物件型別,所以為了消除context
屬性和context
值之間的沖突,我們將把它重命名為contextGotFromUI
.
注意:contextGotFromUI
這里只是一個BuildContext
物件 sp,我們可以隨意重命名它。
只是為了不被同名混淆
void test(){
showDialog(context: contextGotFromUI, builder: (_) => AlertDialog(
content: Column(
children: [
Row(
children: const [
Icon(Icons.check_circle, color: Colors.green,),
Text("Hi"),
],
)
],
),
));}
中的context
屬性showDialog
需要從它的實作中設定:
Future<T?> showDialog<T>({
required BuildContext context,
required WidgetBuilder builder,
bool barrierDismissible = true,
// more code
這BuildContext
是在顫振中理解的一個重要主題,在用戶實際導航并隨時看到的螢屏頂部顯示一個對話框小部件,這BuildContext
就是告訴它在具有特定背景關系的小部件頂部顯示它的原因,以及不是其他螢屏。
從showDialog 官方檔案:
context 引數用于查找對話框的導航器和主題。它僅在呼叫方法時使用。在對話框關閉之前,可以安全地從樹中洗掉其對應的小部件。
因此,為了顯示來自外部方法的對話框,您需要傳遞context
屬于特定小部件的 a ,然后在以下位置使用它showDialog
:
void test(BuildContext contextGotFromUI){
showDialog(context: contextGotFromUI, builder: (_) => AlertDialog(
content: Column(
children: [
Row(
children: const [
Icon(Icons.check_circle, color: Colors.green,),
Text("Hi"),
],
)
],
),
));}
然后從您呼叫該方法的 UI 中傳遞它:
Widget build(BuildContext) {
// widgets
//...
onPressed: () {
test(context); // will show an expected dialog on the screen
}
}
uj5u.com熱心網友回復:
是的,您可以,但您必須在有狀態小部件中創建函式,而不是在普通類中。如果您在普通類中創建函式,則需要背景關系!
void test(BuildContext context){
showDialog(context: context, builder: (_) => AlertDialog(
content: Column(
children: [
Row(
children: const [
Icon(Icons.check_circle, color: Colors.green,),
Text("Hi"),
],
)
],
),
));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/531638.html
標籤:扑颤振警报对话框