实施CupertinoActionSheet的正确方法是什么?

用户名

我试图在我的flutter应用程序中实现CupertinoActionSheet,但是我一直失败。我非常确定我拥有所有必要的东西,但是我一直遇到以下错误:

请求的导航器操作使用了不包含导航器的上下文。

我不明白为什么会收到此错误。实施CupertinoActionSheet的正确方法是什么?

码:

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
          child: Center(
            child: Container(
              color: Colors.black,
              child: Padding(
                padding: const EdgeInsets.all(20.0),
                child: Card(
                  elevation: 20,
                  child: Column(
                      mainAxisAlignment: MainAxisAlignment.start,
                      mainAxisSize: MainAxisSize.min,
                      children: <Widget>[
                        Padding(
                          padding: const EdgeInsets.only(top: 180.0),
                          child: CupertinoButton(
                            color: Colors.black,
                            child: Text(
                              'Click me',
                              style: TextStyle(color: Colors.white),
                            ),
                            onPressed: () {
                              final act = CupertinoActionSheet(
                                  title: Text('Select Option'),
                                  message:
                                      Text('Which option?'),
                                  actions: <Widget>[
                                    CupertinoActionSheetAction(
                                      child: Text('1'),
                                      onPressed: () {
                                        print('pressed');
                                      },
                                    )
                                  ],
                                  cancelButton:                                     CupertinoActionSheetAction(
                                    child: Text('Cancel'),
                                    onPressed: () {
                                      Navigator.pop(context);
                                    },
                                  ));
                              showCupertinoModalPopup(
                                  context: context,
                                  builder: (BuildContext context) => act);
                            },
                          ),
                        ),
                      ]),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }

}
chunhunghan

您可以使用StatefulBuilder,请参见
代码段下方的完整代码

children: <Widget>[
                        StatefulBuilder(builder:
                            (BuildContext context, StateSetter setState) {
                          return Padding(
                            padding: const EdgeInsets.only(top: 180.0),
                            child: CupertinoButton(

在此处输入图片说明

完整的代码

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
          child: Center(
            child: Container(
              color: Colors.black,
              child: Padding(
                padding: const EdgeInsets.all(20.0),
                child: Card(
                  elevation: 20,
                  child: Column(
                      mainAxisAlignment: MainAxisAlignment.start,
                      mainAxisSize: MainAxisSize.min,
                      children: <Widget>[
                        StatefulBuilder(builder:
                            (BuildContext context, StateSetter setState) {
                          return Padding(
                            padding: const EdgeInsets.only(top: 180.0),
                            child: CupertinoButton(
                              color: Colors.black,
                              child: Text(
                                'Click me',
                                style: TextStyle(color: Colors.white),
                              ),
                              onPressed: () {
                                final act = CupertinoActionSheet(
                                    title: Text('Select Option'),
                                    message: Text('Which option?'),
                                    actions: <Widget>[
                                      CupertinoActionSheetAction(
                                        child: Text('1'),
                                        onPressed: () {
                                          print('pressed');
                                        },
                                      )
                                    ],
                                    cancelButton: CupertinoActionSheetAction(
                                      child: Text('Cancel'),
                                      onPressed: () {
                                        Navigator.pop(context);
                                      },
                                    ));
                                showCupertinoModalPopup(
                                    context: context,
                                    builder: (BuildContext context) => act);
                              },
                            ),
                          );
                        })
                      ]),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用Redux实施事务的正确方法是什么

实施动画边框底部的正确方法是什么?

对案例类值实施约束的正确方法是什么

在iOS应用中实施MVC模式的正确方法是什么?

实施AsyncTask的正确方法是什么?静态或非静态嵌套类?

在Vue.js 2.0中的v模型上实施格式化的正确方法是什么

在基本索引表单上实施delete all选项的正确方法是什么

实施操纵Dom的第三方库的正确方法是什么?

在我的Sprite-Kit游戏中实施此动作的正确方法是什么?

在vega-lite中实施自定义点击处理程序的正确方法是什么

实施自定义Laravel护照授予的正确方法是什么?

正确的方法是什么?

实施控制的最佳方法是什么

什么是对IFormFile实施Fluent验证的正确方法

使用正确的Grails ORM(GORM)实施是什么?

实施重新排序方法的最佳方法是什么?

实施“计时器”的最佳方法是什么?

实施用户帐户激活的最佳方法是什么?

实施Google云存储的最佳方法是什么?

实施“半虚拟”方法的最佳实践是什么?

实施简单文档管理系统的最佳方法是什么?

Microsoft在OWIN中实施扩展方法CreatePerOwinContext的目的是什么

对网站实施“记住我”的最佳方法是什么?

为PowerShell脚本实施翻译的最佳方法是什么?

使用APEX实施动态矩阵报告的最佳方法是什么?

什么是通过Workbox实施离线回退的正确方法

重写通用方法的正确方法是什么?

调用方法的正确方法是什么?

在实施Karatsuba算法时,该方法只计算了少量的数字,但是大的答案不正确,这是什么问题?