gpt4 book ai didi

flutter - 尝试显示 AlertDialog 时出现异常 : No MaterialLocalizations found.

转载 作者:IT王子 更新时间:2023-10-29 07:12:02 25 4
gpt4 key购买 nike

尝试通过从父小部件调用函数来显示警报对话框。

代码如下:

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: RaisedButton(
onPressed: () {
popUp(context);
},
child: Text("Click"),
),
),
),
);
}

void popUp(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(title: Text("ok"),);
},
);
}
}

但是得到以下异常:

I/flutter ( 4041): ══╡ 手势异常 ╞═════════════════════════════ ══════════════════════════════════════
I/flutter ( 4041 ): 处理手势时抛出以下断言:
I/flutter ( 4041): 未找到 MaterialLocalizations。
I/flutter ( 4041): MyApp 小部件需要由 Localizations 小部件祖先提供的 MaterialLocalizations。
I/flutter ( 4041 ):本地化用于生成许多不同的消息、标签和缩写,这些消息、标签和缩写被使用
I/flutter ( 4041 ): 由 Material 库提供。
I/flutter(4041):要引入 MaterialLocalizations,请在应用程序的根目录使用 MaterialApp 来
I/flutter ( 4041): 自动包含它们,或者添加一个带有 MaterialLocalizations 委托(delegate)的 Localization 小部件。
I/flutter ( 4041): 找不到 MaterialLocalizations 祖先的特定小部件是:
我/flutter (4041):MyApp
I/flutter ( 4041): 这个小部件的祖先是:
我/flutter (4041):[根]

它显示在应用程序的根目录下使用 MaterialApp 我已经完成了。我在这里做错了什么?

最佳答案

问题是您传递给 popUp 函数的 context 变量实际上来自根。如果有意义的话,它不包含在 MaterialApp 中。

要解决这个问题,您可以重构您的小部件,使 body 成为它自己的小部件,或者使用 Builder,例如:

  @override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Builder(builder: (context) => Center(
child: RaisedButton(
onPressed: () {
popUp(context);
},
child: Text("Click"),
),
)),
),
);
}

关于flutter - 尝试显示 AlertDialog 时出现异常 : No MaterialLocalizations found.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com