You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter调用Material Dialog出现No MaterialLocalizations found错误如何解决?

解决Flutter中“No MaterialLocalizations found.”弹窗错误

嗨,我来帮你搞定这个弹窗打不开的问题~

问题原因

你遇到的No MaterialLocalizations found.错误,核心原因是context使用不当:你在_showMaterialDialog里传入的context是_OverAppState的上下文,这个上下文属于MaterialApp本身,而showDialog需要的是MaterialApp子树内部的上下文(只有子树里的context才能访问到Material相关的本地化资源)。

修复方法

最简便的解决方式是用Builder组件包裹你的按钮,这样就能获取到MaterialApp子树内的context,具体修改如下:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() { runApp(OverApp()); }

class OverApp extends StatefulWidget {
  @override
  _OverAppState createState() => _OverAppState();
}

class _OverAppState extends State<OverApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('List'),
        ),
        // 用Builder包裹按钮,获取子树context
        body: Builder(
          builder: (context) {
            return RaisedButton(
              child: Text('Show Material Dialog'),
              onPressed: () => _showMaterialDialog(context),
            );
          },
        ),
      ),
    );
  }

  // 接收子树的context参数
  _showMaterialDialog(BuildContext context) {
    showDialog(
        context: context,
        builder: (_) => AlertDialog(
              title: Text("Material Dialog"),
              content: Text("Hey!"),
              actions: <Widget>[
                FlatButton(
                  child: Text('Close me!'),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                )
              ],
            ));
  }
}

修改说明

  1. 用Builder组件包裹RaisedButton,Builder会提供一个属于当前子树的context;
  2. 将_showMaterialDialog改成接收BuildContext参数的方法,传入Builder提供的context;
  3. 这样showDialog就能找到所需的MaterialLocalizations资源,弹窗就能正常打开啦~

另外还有一种方案是给Scaffold设置GlobalKey,通过key.currentContext来调用showDialog,不过用Builder的方式更轻量直观。

内容的提问来源于stack exchange,提问作者김동현

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:37:35