Flutter 例外:未找到任何材质本地化。尝试显示AlertDialog时

Flutter 例外:未找到任何材质本地化。尝试显示AlertDialog时,flutter,Flutter,试图通过从父窗口小部件调用函数来显示警报对话框 代码如下: void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Center( child: RaisedButt

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

代码如下:

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/颤振(4041):══╡ 用手势捕捉异常╞═══════════════════════════════════════════════════════════════════
I/flatter(4041):在处理手势时抛出以下断言:
I/颤振(4041):未发现材料定位。
I/flatter(4041):MyApp小部件需要本地化小部件祖先提供MaterialLocalization。
I/flatter(4041):本地化用于生成许多不同的消息、标签和缩写
I/颤振(4041):由材料库提供。
I/flatter(4041):要引入MaterialLocalization,可以在应用程序的根目录下使用MaterialApp
I/flatter(4041):自动包含它们,或者添加带有MaterialLocalizations委托的本地化小部件。
I/flatter(4041):找不到MaterialLocalizations祖先的特定小部件是:
I/颤振(4041):MyApp
I/flatter(4041):这个小部件的祖先是:
I/颤振(4041):[根]


它的内容是
在应用程序的根目录下使用MaterialApp
,我已经这样做了。我在这里做错了什么?

问题是,传递给
弹出式
函数的
上下文
变量实际上来自根。如果有意义,则它不包含在
材料PP

要解决这个问题,您可以重构小部件,使其具有自己的小部件的
主体,或者使用
生成器
,如:

@覆盖
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
body:Builder(Builder:(上下文)=>Center(
孩子:升起按钮(
已按下:(){
弹出窗口(上下文);
},
子项:文本(“单击”),
),
)),
),
);
}