简体   繁体   English

如何使用 Flutter 在 Android 中显示 iOS/cupertino 警报对话框?

[英]How to display iOS/cupertino alert dialog in Android using Flutter?

我试图在我的 Flutter 应用程序中显示一个 iOS 主题的对话框,但我在文档中找不到任何内容

The keyword for Android theme/style is Material (default design), the keyword for iOS theme/style is Cupertino . Android 主题/样式的关键字是Material (默认设计),iOS 主题/样式的关键字是Cupertino Every iOS theme widget has the prefix Cupertino .每个 iOS 主题小部件都有前缀Cupertino So that, for you requirement, we can guess the keyword is CupertinoDialog / CupertinoAlertDialog这样,根据您的要求,我们可以猜测关键字是CupertinoDialog / CupertinoAlertDialog

You can refer here for all of them https://flutter.io/docs/reference/widgets/cupertino您可以在此处参考所有这些https://flutter.io/docs/reference/widgets/cupertino

new CupertinoAlertDialog(
  title: new Text("Dialog Title"),
  content: new Text("This is my content"),
  actions: <Widget>[
    CupertinoDialogAction(
      isDefaultAction: true,
      child: Text("Yes"),
    ),
    CupertinoDialogAction(
      child: Text("No"),
    )
  ],
)

First you check if platForm ios or android .. then return widget for the current device ..首先你检查 platForm ios 还是 android .. 然后返回当前设备的小部件..

Future<bool> showAlertDialog({
  @required BuildContext context,
  @required String title,
  @required String content,
  String cancelActionText,
  @required String defaultActionText,
}) async {
  if (!Platform.isIOS) {
    return showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text(title),
        content: Text(content),
        actions: <Widget>[
          if (cancelActionText != null)
            FlatButton(
              child: Text(cancelActionText),
              onPressed: () => Navigator.of(context).pop(false),
            ),
          FlatButton(
            child: Text(defaultActionText),
            onPressed: () => Navigator.of(context).pop(true),
          ),
        ],
      ),
    );
  }

  // todo : showDialog for ios
  return showCupertinoDialog(
    context: context,
    builder: (context) => CupertinoAlertDialog(
      title: Text(title),
      content: Text(content),
      actions: <Widget>[
        if (cancelActionText != null)
          CupertinoDialogAction(
            child: Text(cancelActionText),
            onPressed: () => Navigator.of(context).pop(false),
          ),
        CupertinoDialogAction(
          child: Text(defaultActionText),
          onPressed: () => Navigator.of(context).pop(true),
        ),
      ],
    ),
  );
}

I used CupertinoAlertDialog inside the ShowDialog , you can find the same below我在ShowDialog 中使用了CupertinoAlertDialog ,您可以在下面找到相同的内容

showDialog(
      context: context,
      builder: (BuildContext context) => CupertinoAlertDialog(
        title: new Text("Dialog Title"),
        content: new Text("This is my content"),
        actions: <Widget>[
          CupertinoDialogAction(
            isDefaultAction: true,
            child: Text(StringConstants.BIOMETRICAUTHORIZED),
          ),
          CupertinoDialogAction(
            child: Text("No"),
          )
        ],
      )
    );

The following is a simple example of how to create a simple alert with two button in Flutter,以下是如何在 Flutter 中创建带有两个按钮的简单警报的简单示例,

import a import 'package:flutter/cupertino.dart';导入import 'package:flutter/cupertino.dart'; and Copy and paste below code and Call it showAlertDialog(context);并复制并粘贴下面的代码并称之为showAlertDialog(context); where you want to show Dialog.你想在哪里显示对话框。

这是我的结果

void showAlertDialog(BuildContext context) {

  showDialog(
    context: context,
    child:  CupertinoAlertDialog(
      title: Text("Log out?"),
      content: Text( "Are you sure you want to log out?"),
      actions: <Widget>[
        CupertinoDialogAction(
            isDefaultAction: true,
            onPressed: (){
              Navigator.pop(context);
            },
            child: Text("Cancel")
        ),
        CupertinoDialogAction(
          textStyle: TextStyle(color: Colors.red),
            isDefaultAction: true,
            onPressed: () async {
              Navigator.pop(context);
              SharedPreferences prefs = await SharedPreferences.getInstance();
              prefs.remove('isLogin');
              Navigator.pushReplacement(context,
                  MaterialPageRoute(builder: (BuildContext ctx) => LoginScreen()));
            },
            child: Text("Log out")
        ),
      ],
    ));
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM