Flutter 有没有办法在颤振中使用CupertinoAlertDialog创建pop模态?

Flutter 有没有办法在颤振中使用CupertinoAlertDialog创建pop模态?,flutter,flutter-layout,Flutter,Flutter Layout,应用程序背后的功能: 右上角的足球是一个图标按钮 一旦点击了足球图标按钮,它会在屏幕中间创建一个模态弹出窗口,而模态框的外部则模糊。 警告框显示标题“Success!”,然后显示内容“You's in The football universe!” 我已经包含了一个图像示例,演示了代码成功后的效果 import'包装:flift/cupertino.dart'; 进口“包装:颤振/材料.省道”; 导入“包装:材料\设计\图标\颤振/材料\设计\图标\颤振.dart”; void main()=

应用程序背后的功能:

  • 右上角的足球是一个图标按钮
  • 一旦点击了足球图标按钮,它会在屏幕中间创建一个模态弹出窗口,而模态框的外部则模糊。
  • 警告框显示标题“Success!”,然后显示内容“You's in The football universe!”
  • 我已经包含了一个图像示例,演示了代码成功后的效果

    import'包装:flift/cupertino.dart';
    进口“包装:颤振/材料.省道”;
    导入“包装:材料\设计\图标\颤振/材料\设计\图标\颤振.dart”;
    void main()=>runApp(MyApp());
    类MyApp扩展了无状态小部件{
    @凌驾
    小部件构建(构建上下文){
    返回材料PP(
    标题:“欢迎来到弗利特”,
    家:脚手架(
    appBar:appBar(
    背景颜色:颜色。深紫色[200],
    行动:[
    图标按钮(
    图标:图标(
    足球,
    颜色:颜色。灰色[800],
    ),
    iconSize:30,
    按下:()=>{
    库珀蒂诺阿尔托酒店(
    标题:文本('Success!'),
    内容:文本(“你在足球世界里!”),
    ),
    },
    ),
    ],
    ),
    正文:中(
    child:Text('Hello World'),
    ),
    ),
    );
    }
    }
    
    问题:

  • 没有显示任何错误
  • 弹出模式的功能未被执行
  • 我尝试过但没有成功的事情:

  • 我尝试创建另一个无状态小部件,然后将该无状态小部件的名称包含在appBar中

  • 看起来您需要调用showDialog并将您的CupertinoAlertDialog传递给构建器

    onPressed: () => {
       showDialog(
          context: context,
          builder: (BuildContext context) => CupertinoAlertDialog(
             title: Text('Success!'),
             content: Text('You are in the football universe!')
          ),
       ),
    },
    

    看起来您需要调用showDialog并将您的CupertinoAlertDialog传递给构建器

    onPressed: () => {
       showDialog(
          context: context,
          builder: (BuildContext context) => CupertinoAlertDialog(
             title: Text('Success!'),
             content: Text('You are in the football universe!')
          ),
       ),
    },
    

    您可以复制粘贴运行下面的完整代码
    步骤1:您可以使用
    showDialog

    步骤2:将
    MaterialApp
    移动到上层
    void main()=>runApp(MaterialApp(标题:“欢迎来到颤振”,主页:MyApp())

    代码片段

    Future<void> _handleClickMe() async {
        return showDialog<void>(
          context: context,
          barrierDismissible: false, // user must tap button!
          builder: (BuildContext context) {
            return CupertinoAlertDialog(
              title: Text('Success!'),
              content: Text('You are in the football universe!'),
            );
          },
        );
      }
    
    Future\u handleClickMe()异步{
    返回显示对话框(
    上下文:上下文,
    barrierDismissible:false,//用户必须点击按钮!
    生成器:(BuildContext上下文){
    返回CupertinoAlertDialog(
    标题:文本('Success!'),
    内容:文本(“你在足球世界里!”),
    );
    },
    );
    }
    
    工作演示

    完整代码

    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
    
    void main() => runApp(MaterialApp(title: 'Welcome to Flutter', home: MyApp()));
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      
      Future<void> _handleClickMe() async {
        return showDialog<void>(
          context: context,
          barrierDismissible: false, // user must tap button!
          builder: (BuildContext context) {
            return CupertinoAlertDialog(
              title: Text('Success!'),
              content: Text('You are in the football universe!'),
            );
          },
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            backgroundColor: Colors.deepPurple[200],
            actions: <Widget>[
              IconButton(
                icon: Icon(
                  MdiIcons.soccer,
                  color: Colors.grey[800],
                ),
                iconSize: 30,
                onPressed: () => _handleClickMe(),
              ),
            ],
          ),
          body: Center(
            child: Text('Hello World'),
          ),
        );
      }
    }
    
    import'包装:flift/cupertino.dart';
    进口“包装:颤振/材料.省道”;
    导入“包装:材料\设计\图标\颤振/材料\设计\图标\颤振.dart”;
    void main()=>runApp(MaterialApp(标题:“欢迎来到颤振”,主页:MyApp());
    类MyApp扩展了StatefulWidget{
    @凌驾
    _MyAppState createState()=>\u MyAppState();
    }
    类MyAppState扩展了状态{
    Future\u handleClickMe()异步{
    返回显示对话框(
    上下文:上下文,
    barrierDismissible:false,//用户必须点击按钮!
    生成器:(BuildContext上下文){
    返回CupertinoAlertDialog(
    标题:文本('Success!'),
    内容:文本(“你在足球世界里!”),
    );
    },
    );
    }
    @凌驾
    小部件构建(构建上下文){
    返回脚手架(
    appBar:appBar(
    背景颜色:颜色。深紫色[200],
    行动:[
    图标按钮(
    图标:图标(
    足球,
    颜色:颜色。灰色[800],
    ),
    iconSize:30,
    按下时:()=>\u handleClickMe(),
    ),
    ],
    ),
    正文:中(
    child:Text('Hello World'),
    ),
    );
    }
    }
    
    您可以复制粘贴运行下面的完整代码
    步骤1:您可以使用
    showDialog

    步骤2:将
    MaterialApp
    移动到上层
    void main()=>runApp(MaterialApp(标题:“欢迎来到颤振”,主页:MyApp())

    代码片段

    Future<void> _handleClickMe() async {
        return showDialog<void>(
          context: context,
          barrierDismissible: false, // user must tap button!
          builder: (BuildContext context) {
            return CupertinoAlertDialog(
              title: Text('Success!'),
              content: Text('You are in the football universe!'),
            );
          },
        );
      }
    
    Future\u handleClickMe()异步{
    返回显示对话框(
    上下文:上下文,
    barrierDismissible:false,//用户必须点击按钮!
    生成器:(BuildContext上下文){
    返回CupertinoAlertDialog(
    标题:文本('Success!'),
    内容:文本(“你在足球世界里!”),
    );
    },
    );
    }
    
    工作演示

    完整代码

    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
    
    void main() => runApp(MaterialApp(title: 'Welcome to Flutter', home: MyApp()));
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      
      Future<void> _handleClickMe() async {
        return showDialog<void>(
          context: context,
          barrierDismissible: false, // user must tap button!
          builder: (BuildContext context) {
            return CupertinoAlertDialog(
              title: Text('Success!'),
              content: Text('You are in the football universe!'),
            );
          },
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            backgroundColor: Colors.deepPurple[200],
            actions: <Widget>[
              IconButton(
                icon: Icon(
                  MdiIcons.soccer,
                  color: Colors.grey[800],
                ),
                iconSize: 30,
                onPressed: () => _handleClickMe(),
              ),
            ],
          ),
          body: Center(
            child: Text('Hello World'),
          ),
        );
      }
    }
    
    import'包装:flift/cupertino.dart';
    进口“包装:颤振/材料.省道”;
    导入“包装:材料\设计\图标\颤振/材料\设计\图标\颤振.dart”;
    void main()=>runApp(MaterialApp(标题:“欢迎来到颤振”,主页:MyApp());
    类MyApp扩展了StatefulWidget{
    @凌驾
    _MyAppState createState()=>\u MyAppState();
    }
    类MyAppState扩展了状态{
    Future\u handleClickMe()异步{
    返回显示对话框(
    上下文:上下文,
    barrierDismissible:false,//用户必须点击按钮!
    生成器:(BuildContext上下文){
    返回CupertinoAlertDialog(
    标题:文本('Success!'),
    内容:文本(“你在足球世界里!”),
    );
    },
    );
    }
    @凌驾
    小部件构建(构建上下文){
    返回脚手架(
    appBar:appBar(
    背景颜色:颜色。深紫色[200],
    行动:[
    图标按钮(
    图标:图标(
    足球,
    颜色:颜色。灰色[800],
    ),
    iconSize:30,
    按下时:()=>\u handleClickMe(),
    ),
    ],
    ),
    正文:中(
    child:Text('Hello World'),
    ),
    );
    }
    }
    
    为什么需要有状态的小部件而不是无状态的小部件?为什么需要“未来”、“异步”和“异步”@您需要上下文,所以您需要有状态的小部件。这就是我们