微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

No MaterialLocalizations found (Flutter)

显示simpledialog时候程序报错 No MaterialLocalizations found 没有找到 MaterialLocalizations

 

搜索找到原因 runApp 需要先调用 StatelessWidget 返回一个 MaterialApp实例.

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

class MainPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      debugShowCheckedModeBanner: false,
      home: HomePage(),
    );
  }
}

 也就是说runApp 直接接受一个 StatefulWidget就会出现这个错误

 

完整代码

import 'package:Flutter/material.dart';

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

class MainPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      debugShowCheckedModeBanner: false,
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePage createState() {
    return _HomePage(title: '简单对话框组件');
  }
}

enum Department { treasury, state }

class _HomePage extends State<HomePage> {
  _HomePage({Key key, @required this.title});

  final String title;

  ThemeData themeData = new ThemeData.light();
  Future<void> _askedToLead() async {
    switch (await showDialog<Department>(
        context: context,
        builder: (BuildContext context) {
          return simpledialog(
            title: const Text('Select assignment'),
            children: <Widget>[
              simpledialogOption(
                onpressed: () {
                  Navigator.pop(context, Department.treasury);
                },
                child: const Text('Treasury department'),
              ),
              simpledialogOption(
                onpressed: () {
                  Navigator.pop(context, Department.state);
                },
                child: const Text('State department'),
              ),
            ],
          );
        })) {
      case Department.treasury:
        // Let's go.
        // ...
        break;
      case Department.state:
        // ...
        break;
    }
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: this.title,
      debugShowCheckedModeBanner: false,
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text(this.title),
        ),
        body: null,
        floatingActionButton: FloatingActionButton(
          child: Icon(Icons.format_list_numbered),
          onpressed: _askedToLead,
        ),
      ),
      theme: themeData,
    );
  }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐