首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >没有找到MaterialLocalizations - MyApp小部件需要由本地化小部件祖先提供MaterialLocalizations

没有找到MaterialLocalizations - MyApp小部件需要由本地化小部件祖先提供MaterialLocalizations
EN

Stack Overflow用户
提问于 2019-05-23 04:47:45
回答 10查看 53.7K关注 0票数 34

我只是想用按钮创建一个应用程序,当按下按钮时,它会显示一个警告信息。

但是它给了我这个错误(下面提到)。

我参考视频编写了这段代码。

我使用adb连接在android手机上运行这个应用程序。

请救救..!

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Test",
      home: Scaffold(
        appBar: AppBar(title: Text("Test")),
        body: Container(
          child: Center(
            child: RaisedButton(
              color: Colors.redAccent,
              textColor: Colors.white,
              onPressed: (){testAlert(context);},
              child: Text("PressMe"),
            ),
          ),
        ),
      ),
    );
  }
  void testAlert(BuildContext context){
    var alert = AlertDialog(
      title: Text("Test"),
      content: Text("Done..!"),
    );

    showDialog(
        context: context,
        builder: (BuildContext context){
          return alert;
        }
    );
  }
}

这就是我写的代码。我还尝试将testAlert()函数的内容直接插入到onPressed中,但不起作用。

错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Performing hot reload...
Syncing files to device ZUK Z2131...
Reloaded 0 of 419 libraries in 1,929ms.
I/flutter (18652): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter (18652): The following assertion was thrown while handling a gesture:
I/flutter (18652): No MaterialLocalizations found.
I/flutter (18652): MyApp widgets require MaterialLocalizations to be provided by a Localizations widget ancestor.
I/flutter (18652): Localizations are used to generate many different messages, labels,and abbreviations which are used
I/flutter (18652): by the material library. 
I/flutter (18652): To introduce a MaterialLocalizations, either use a  MaterialApp at the root of your application to
I/flutter (18652): include them automatically, or add a Localization widget with a MaterialLocalizations delegate.
I/flutter (18652): The specific widget that could not find a MaterialLocalizations ancestor was:
I/flutter (18652):   MyApp
I/flutter (18652): The ancestors of this widget were:
I/flutter (18652):   [root]
I/flutter (18652): 
I/flutter (18652): When the exception was thrown, this was the stack:
I/flutter (18652): #0      debugCheckHasMaterialLocalizations.<anonymous closure> (package:flutter/src/material/debug.dart:124:7)
I/flutter (18652): #1      debugCheckHasMaterialLocalizations (package:flutter/src/material/debug.dart:127:4)
I/flutter (18652): #2      showDialog (package:flutter/src/material/dialog.dart:635:10)
I/flutter (18652): #3      MyApp.testAlert (package:flutter_app/main.dart:33:5)
I/flutter (18652): #4      MyApp.build.<anonymous closure> (package:flutter_app/main.dart:19:29)
I/flutter (18652): #5      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
I/flutter (18652): #6      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
I/flutter (18652): #7      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
I/flutter (18652): #8      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
I/flutter (18652): #9      TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)
I/flutter (18652): #10     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)
I/flutter (18652): #11     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
I/flutter (18652): #12     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)
I/flutter (18652): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19)
I/flutter (18652): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
I/flutter (18652): #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
I/flutter (18652): #16     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
I/flutter (18652): #17     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
I/flutter (18652): #18     _invoke1 (dart:ui/hooks.dart:168:13)
I/flutter (18652): #19     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)
I/flutter (18652): 
I/flutter (18652): Handler: onTap
I/flutter (18652): Recognizer:
I/flutter (18652):   TapGestureRecognizer#d5d82(debugOwner: GestureDetector, state: possible, won arena, finalPosition:
I/flutter (18652):   Offset(220.2, 406.1), sent tap down)
I/flutter (18652): ════════════════════════════════════════════════════════════════════════════════════════════════════
W/ActivityThread(18652): handleWindowVisibility: no activity for token android.os.BinderProxy@59b4e8d
I/ViewRootImpl(18652): CPU Rendering VSync enable = true
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2019-05-23 05:02:03

这是因为您要传递给showDialog方法的上下文是一个在小部件树中还没有MaterialLocalizations小部件的contextMaterialLocalizations小部件是由MaterialApp小部件隐式添加的。

若要修复该问题,请尝试以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Test",
      home: TestPage(),
    );
  }
}

class TestPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Test")),
      body: Container(
        child: Center(
          child: RaisedButton(
            color: Colors.redAccent,
            textColor: Colors.white,
            onPressed: () {
              testAlert(context);
            },
            child: Text("PressMe"),
          ),
        ),
      ),
    );
  }

  void testAlert(BuildContext context) {
    var alert = AlertDialog(
      title: Text("Test"),
      content: Text("Done..!"),
    );

    showDialog(
        context: context,
        builder: (BuildContext context) {
          return alert;
        });
  }
}
票数 31
EN

Stack Overflow用户

发布于 2019-10-16 16:10:07

在我的例子中,一个简单的解决方法就是简单地将MaterialApp小部件移动到main()方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
main() {
  runApp(MaterialApp(home: App()));
}
票数 34
EN

Stack Overflow用户

发布于 2020-07-28 04:18:06

当您切换到不受GlobalMaterialLocalizations委托支持的语言时,也会发生这种情况。这是一个很难理解的信息,因为它说你应该把MaterialApp放在树的顶端,但它可能已经存在了。

在我的例子中,我正在本地化的语言(英国威尔士语- cy-GB)不会自动满足需求。我必须为样板字符串编写自己的委托,并将其添加到应用程序根目录的本地化列表中。

白俄罗斯代表的代码是这里。我调整了它以迎合威尔士语。它包含日期格式信息,以及材料设计认为您可能需要的大约70个股票短语,如“选择所有”、“页面of”等。

如果您需要创建一个包含未在全局材料本地化中列出的语言的委托,那么一旦创建了委托,查看代码基,然后在树的顶部附近有一行如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MaterialApp(
 localizationsDelegates: [
   GlobalMaterialLocalizations.delegate,
   GlobalWidgetsLocalizations.delegate,
   GlobalCupertinoLocalizations.delegate,
 ],
 supportedLocales: [
    const Locale('en', ''), // English, no country code
    const Locale('he', ''), // Hebrew, no country code
    const Locale.fromSubtags(languageCode: 'zh')
  ],
  // ...
)

只需将CyMaterialLocalizations.delegate (或您所称的新语言委托)添加到localizationsDelegates列表中即可。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56275595

复制
相关文章
Flutte部件目录-基本部件(一)
一个容器首先用padding包围子组件(由decoration中出现的所有边框填满),然后将附加constraints应用于填充范围(将width和height作为约束合并(如果其中任一个非空)。然后container被 margin描述的额外的空白空间包围。
南郭先生
2018/08/14
7.5K0
【Flutter 实战】国际化及App 内切换语言功能
当应用程序支持不同语言的时候,就需要对应用程序进行国际化,当然国际化不仅仅指文字,也可以是布局、图片等。Flutter 已经提供了组件来实现国际化,下面是实现国际化的步骤:
老孟Flutter
2020/11/26
7.5K0
Flutte部件目录-基本部件(三) 顶
要显示snackbar或持久底部表,请通过Scaffold.of获取当前BuildContext的ScaffoldState,然后使用ScaffoldState.showSnackBar和ScaffoldState.showBottomSheet函数。
南郭先生
2018/08/14
6.3K0
Flutte部件目录-基本部件(三)
                                                    顶
Flutte部件目录-基本部件(二) 顶
支持以下图像格式:JPEG,PNG,GIF,GIF动画,WebP,WebP动画,BMP和WBMP
南郭先生
2018/08/14
4.4K0
Flutte部件目录-基本部件(二)
                                                    顶
Flutter之drawer详细分析(你要的操作都有)
可以看到,根据我们对drawer的认识,并不是想要的结果,所以这个drawer并不完整,然后我们继续添加代码,修改drawer
rhyme_lph
2018/12/07
4.4K0
Flutter之drawer详细分析(你要的操作都有)
QSplitter(分离部件)
The QSplitter class implements a splitter widget. A splitter lets the user control the size of child widgets by dragging the boundary between them. Any number of widgets may be controlled by a single splitter. The typical use of a QSplitter is to create several widgets and add them using insertWidget() or addWidget().
全栈程序员站长
2022/08/03
7560
QSplitter(分离部件)
Flutter自制插件之r_calendar日历插件
image r_calendar ??Flutter日历插件,支持自定义日历,月视图/周视图切换、点击拦截、单选(切换月自动选)、多选(散选/聚选) .----------------------
rhyme_lph
2020/02/18
2.6K1
Flutter自制插件之r_calendar日历插件
Flutte部件目录-布局
一个部件,将其子部件的体积缩小到可用空间的一部分。有关布局算法的更多详细信息,请参阅RenderFractionallySizedOverflowBox。
南郭先生
2018/08/14
1.5K0
多人部件解析
Towards Real World Human Parsing: Multiple-Human Parsing in the Wild https://arxiv.org/abs/1705.07206
用户1148525
2019/05/26
5930
Qt常用窗口部件
从《C++.GUI.Qt.4编程(第二版)》上整理来的。 Qt提供4中类型的按钮:QPushButton、QToolButton、QCheckBox 和 QRadioButton。QPushButto
tanmx
2018/05/25
1.9K0
QMainWindow 添加中心部件
上几篇文章我们使用 QMainWindow 添加了菜单栏、工具栏、状态栏等控件,他们分别在窗口中起到不同的作用。但千万别忽略了中间位置,因为中间位置是我们用来添加其他控件的位置,如果你直接在对象中new了某些其他控件(比如一个button),那么这个控件会覆盖菜单栏导致不能正常显示。这就需要我们来创建一个中心部件,以保证各个控件之间不会冲突。
我与梦想有个约会
2023/10/20
2350
QMainWindow 添加中心部件
建造者模式(部件构造)
造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
幺鹿
2018/08/21
5690
建造者模式(部件构造)
【QT】QT窗口部件
QT提供的默认部件基类包括QMainWindow、QWidget、和QDialog,这三个部件基类也是用的最多的。
半生瓜的blog
2023/05/13
1.3K0
【QT】QT窗口部件
[flutter专题]6详解AppBar小部件
应用栏是各种应用程序中最常用的组件之一。它可用于容纳搜索字段、以及在页面之间导航的按钮,或者只是页面标题。由于它是一个如此常用的组件,因此 Flutter 为该功能提供了一个名为AppBar的专用小部件。
徐建国
2021/11/30
16.5K0
[flutter专题]6详解AppBar小部件
智能汽车“增量部件”争夺战(一):汽车芯片没有弯道超车
这是一个标志性的事件,即华为通过现行说法揭示了一个在整车之外的巨量市场,其中包括高精地图、芯片、感知硬件(激光雷达)、电池、智能座舱等,在庞大而纷繁的智能汽车产业链中,这些“增量部件”随便拎一个出来,又有着各自特有的产业逻辑。
用户2908108
2021/01/29
6690
智能汽车“增量部件”争夺战(一):汽车芯片没有弯道超车
Flutter 入门指北之基础部件
原文:https://www.jianshu.com/p/8ddb16902ce6
陈宇明
2020/12/16
1.3K0
Flutte部件目录-Material Components 顶
底部导航栏可轻松浏览并在单次点击之间在顶层视图之间切换。 BottomNavigationBar小部件实现此组件。
南郭先生
2018/08/14
9.5K0
Flutte部件目录-Material Components
                                                    顶
Butterfly 主题添加天气小部件
  如果你想要做一件事情,首先,你应该去了解这件事情,了解这件事情别人有没有做过。第二,这件事情你可不可以做的比别人更好。
小孙同学
2022/01/17
9380
Butterfly 主题添加天气小部件
PyQt QStackedWidget(层叠窗口部件)
QStackedWidget (层叠窗口部件)和 QTabWidget 的作用相似,都可以把多组不同的部件 放置到不同的页面显示,从而节省 窗口空间。它们的使用方法也相似,通过下面的方法可以添加页面:
用户6021899
2019/08/14
3.4K0
微信小程序 没有找到 node_modules 目录
此时小程序项目目录下面已经有了node_modules 目录; 但是点击小程序构建npm 还是报 没有找到node_modules 目录
用户1437675
2019/02/22
2.5K0
微信小程序 没有找到 node_modules 目录

相似问题

未发现MaterialLocalizations。DatePickerDialog小部件需要由本地化小部件祖先提供MaterialLocalizations

126

测试:找不到MaterialLocalizations。AppBar小部件需要提供MaterialLocalizations

130

找不到MaterialLocalizations的特定小部件

10

颤振- TextField:没有找到MaterialLocalizations

11

没有发现MaterialLocalizations

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文