Flutter 3.29.0 改进了CupertinoAlertDialog在黑暗模式下的原生保真度

社区成员thejitenpatel改进了CupertinoAlertDialog在黑暗模式下的原生保真度,如下图所示:

在这里插入图片描述
旧版本的展示效果如下:请添加图片描述
使用案例如下:

  void _showAlertDialog(BuildContext context) {
    showCupertinoDialog<void>(
      context: context,
      builder:
          (BuildContext context) => CupertinoAlertDialog(
            title: const Text('Alert'),
            content: const Text('Proceed with destructive action?'),
            actions: <CupertinoDialogAction>[
              CupertinoDialogAction(
                //该参数用于指定该按钮是否为默认操作按钮。
                // 如果设置为 true,按钮上的文本会以加粗样式显示,
                // 以突出显示该操作是对话框的默认选择。默认值为 false。
                isDefaultAction: true,
                //可选的回调函数,当用户点击该 CupertinoDialogAction 按钮时会触发此函数。
                // 如果该参数为 null,按钮将变为不可用状态。
                onPressed: () {
                  Navigator.pop(context);
                },
                child: const Text('No'),
              ),
              CupertinoDialogAction(
                isDestructiveAction: true,
                onPressed: () {
                  Navigator.pop(context);
                },
                child: const Text('Yes'),
              ),
            ],
          ),
    );
  }
  • isDestructiveAction:该参数用于指定该按钮是否为具有破坏性的操作按钮,例如删除操作。如果设置为 true,按钮上的文本会以红色样式显示,以提醒用户该操作可能会带来不可恢复的后果。默认值为 false。
  • isDefaultAction:该参数用于指定该按钮是否为默认操作按钮。如果设置为 true,按钮上的文本会以加粗样式显示,以突出显示该操作是对话框的默认选择。默认值为 false。
    【公众号 biglead】
<think>我们正在处理一个关于将Flutter项目升级到3.29.2版本的问题。根据提供的引用,特别是引用[3]中提到了从Flutter2.10.5升级到3.29.3的经验,我们可以借鉴其步骤,但目标版本是3.29.2,所以类似。 步骤概述: 1. 确保Flutter环境安装正确,并且当前环境可以升级到指定版本。 2. 升级Flutter SDK到指定版本(3.29.2)。 3. 检查并更新项目中的依赖(插件)以确保兼容性。 4. 解决升级过程中可能出现的各种兼容性问题(如Android环境配置、插件之间的兼容性等)。 详细步骤: 1. **升级Flutter SDK到3.29.2** 首先,我们需要将本地的Flutter SDK升级到3.29.2版本。可以通过以下命令: ```bash flutter channel stable # 确保在稳定通道(如果3.29.2在stable通道) flutter upgrade ``` 但是,`flutter upgrade`会升级到当前通道的最新版本,不一定是3.29.2。如果我们需要特定版本,可以切换到该版本对应的标签(tag): ```bash flutter version 3.29.2 ``` 注意:`flutter version`命令需要安装特定版本的SDK,如果本地没有,它会自动下载。 2. **检查Flutter环境** 运行`flutter doctor`,确保所有环境都配置正确(Android工具链、iOS工具链等)。修复所有问题。 3. **升级项目依赖** 在项目根目录下,运行: ```bash flutter pub upgrade ``` 这个命令会升级所有依赖到最新版本(根据pubspec.yaml的约束)。但是,我们可能需要手动调整一些依赖的版本以兼容Flutter 3.29.2。 4. **处理Android和iOS的构建配置** - **Android**: 检查`android/build.gradle`文件中的配置: - 确保Gradle插件版本和Gradle版本兼容。对于Flutter 3.29.2,通常需要AGP(Android Gradle Plugin)7.0以上,Gradle版本7.3以上。 - 在`android/gradle/wrapper/gradle-wrapper.properties`中,设置合适的Gradle版本,例如: ```gradle distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip ``` - 在`android/build.gradle`中,修改classpath: ```gradle classpath &#39;com.android.tools.build:gradle:7.3.0&#39; ``` 具体版本请参考官方文档或引用[3]中提到的版本对应关系。 - **iOS**: 如果升级后iOS构建失败,可能需要更新CocoaPods,并重新安装pod: ```bash sudo gem install cocoapods cd ios pod repo update pod install ``` 5. **解决依赖冲突** 根据引用[3],升级过程中可能会遇到插件与Flutter SDK不兼容、插件之间不兼容的问题。我们需要: - 运行项目,查看控制台报错。 - 根据报错信息,逐个解决。常见的做法是升级有问题的插件到兼容版本,或者暂时移除不兼容的插件直到找到解决方案。 6. **测试** 在升级完成后,进行全面的测试,确保应用在Android和iOS上运行正常。 注意:如果升级过程中遇到网络问题(如引用[2]中提到的依赖解析慢),可以配置国内镜像源(如阿里云)来加速。 引用[2]提供了修改Flutter项目中gradle构建脚本的镜像源的方法,我们可以参考: 修改`flutter.gradle`文件(位于Flutter SDK的packages/flutter_tools/gradle目录下)或者项目中的`android/build.gradle`文件,将仓库地址改为阿里云镜像。 在`android/build.gradle`中修改: ```gradle buildscript { repositories { // 使用阿里云镜像 maven { url &#39;https://maven.aliyun.com/repository/google&#39; } maven { url &#39;https://maven.aliyun.com/repository/jcenter&#39; } maven { url &#39;http://maven.aliyun.com/nexus/content/groups/public&#39; } } ... } ``` 但是,更推荐在项目的`build.gradle`中修改,因为修改SDK目录下的文件可能会在SDK升级后被覆盖。 另外,引用[1]提到了在遇到`pub upgrade`问题时,可以尝试切换通道并升级。但我们已经指定了版本,所以不需要切换通道,除非该版本不在stable通道。 如果我们的目标版本3.29.2在stable通道,那么使用`flutter channel stable`后,再使用`flutter version 3.29.2`即可。 如果遇到无法下载SDK的问题,可以考虑使用国内镜像(如Flutter社区镜像)设置环境变量。 总结步骤: 1. 升级Flutter SDK到3.29.2(使用`flutter version 3.29.2`)。 2. 运行`flutter doctor`修复环境问题。 3. 在项目目录下运行`flutter pub upgrade`升级依赖,如果遇到问题,手动调整pubspec.yaml中的依赖版本。 4. 更新Android和iOS的构建配置(Gradle、AGP、CocoaPods等)。 5. 解决可能出现的依赖冲突和构建错误(根据错误日志逐个解决)。 6. 测试应用。 注意:每个项目情况不同,可能需要处理特定的问题。引用[3]强调了版本兼容性和问题排查的重要性。 相关问题: 1. 如何回滚到之前的Flutter版本? 2. 升级Flutter后,如何解决插件不兼容的问题? 3. 在升级Flutter项目时,如何确保Android和iOS的构建配置正确?</think>要将Flutter项目升级到版本3.29.2,请按照以下系统化步骤操作,注意版本兼容性和常见问题的解决: ### 1. **升级Flutter SDK** ```bash # 切换到稳定通道(确保包含3.29.2) flutter channel stable # 升级SDK到指定版本 flutter upgrade --force 3.29.2 # 验证版本 flutter --version ``` > 若下载缓慢,可配置国内镜像[^2]: > ```bash > export PUB_HOSTED_URL=https://pub.flutter-io.cn > export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn > ``` ### 2. **更新项目依赖** ```bash cd your_project_directory # 升级所有依赖 flutter pub upgrade --major-versions # 清除构建缓存 flutter clean ``` ### 3. **关键配置调整** #### **Android端** (`android/build.gradle`) ```gradle buildscript { ext { // 适配Flutter 3.29.2 kotlin_version = &#39;1.9.22&#39; // 最低要求1.9.0 agp_version = &#39;8.1.0&#39; // 兼容版本 } repositories { maven { url &#39;https://maven.aliyun.com/repository/google&#39; } // 国内加速[^2] } dependencies { classpath "com.android.tools.build:gradle:$agp_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } ``` #### **iOS端** ```bash cd ios pod repo update # 更新CocoaPods仓库 pod install --repo-update ``` ### 4. **解决常见兼容性问题** - **插件冲突**:检查`pubspec.yaml`,确保所有插件支持Flutter 3.x: ```yaml dependencies: flutter_localizations: sdk: flutter # 显式指定兼容版本(示例) provider: ^6.1.1 # 最低支持3.29.2的版本 ``` - **Gradle版本**:在`android/gradle/wrapper/gradle-wrapper.properties`中设置: ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip ``` - **Java/Kotlin版本**:确保Android Studio使用JDK 17+[^3] ### 5. **验证与测试** ```bash flutter doctor # 检查环境完整性 flutter run -d chrome # 测试Web端 flutter build apk --release # 构建Android包 ``` ### ⚠️ 关键注意事项 1. **版本兼容性**: 若插件报错,在[pub.dev](https://pub.dev)查询插件文档,确认其支持Flutter 3.29.2 2. **增量升级**: 大版本升级建议分阶段进行(如先升到3.10.x再至3.29.2)[^3] 3. **回滚方案**: 使用Git保存当前状态,升级失败时可回退: ```bash git add . git commit -m "Pre-upgrade snapshot" ``` > **典型错误处理**: > - `Resolving dependencies...`卡住:配置阿里云仓库[^2] > - `Java version mismatch`:升级Android Studio至2023.1+ > - `Plugin incompatible`:运行`flutter pub outdated`查看可升级版本 --- ### 相关问题 1. 如何检查现有Flutter项目与3.29.2的兼容性? 2. 升级后iOS构建失败出现`Undefined symbol`错误如何解决? 3. Flutter 3.29.2相比3.0有哪些重大API变更需要适配? [^1]: 配置Flutter开发环境和解决升级问题 [^2]: 使用国内镜像加速依赖解析 [^3]: Flutter版本升级的兼容性处理方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早起的年轻人

创作源于分享

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值