热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter插件开发踩坑记

1.集成其他Flutter插件遇到的问题之一(Missing‘package’key)(Android)问题描述:D:\flutterSdk\flutter\.pub-cache\




1.集成其他Flutter插件遇到的问题之一(Missing ‘package’ key)(Android)

问题描述:

D:\flutterSdk\flutter\.pub-cache\hosted\pub.flutter-io.cn%47\wechat_kit-2.0.0\android\src\main\AndroidManifest.xml:6:9-50 Error:
Missing 'package' key attribute on element package at AndroidManifest.xml:6:9-50
D:\flutterSdk\flutter\.pub-cache\hosted\pub.flutter-io.cn%47\wechat_kit-2.0.0\android\src\main\AndroidManifest.xml Error:
Validation failed, exiting

解决办法:

出现这样的问题,原因是因为插件支持了Android 11的版本,在Android 11中跳转到第三方应用需要添加这样的标签在Manifest文件中,
然而出现这样的问题并不是要求我们支持的版本也要支持Android11,而是由于Gralde的版本比较低,识别不了这样的标签,没办法执行打包
这样的操作,我们只需要讲gradle版本升级一下就好了,这里给一个可以正常运行的版本,大家可以尝试一下
classpath 'com.android.tools.build:gradle:3.6.4'
distributiOnUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
相信大家应该指导在哪里修改吧。

2.UIKitView收不到Flutter传递参数的问题(IOS)

问题描述:

我们在开发IOS端插件的时候有时候会需要用到IOS的UIView,对应到Flutter中就是UIKitView,
这样就可以讲IOS原生的View和Flutter结合到一个程序中,通常,我们会将Flutter端的一些参数传递到IOS端,
这个地方有一个坑就是,需要重写一个方法,才能接收到Flutter传递的参数,否则接受不到.

解决办法

需要在继承了FlutterPlatformViewFactory这个类中,重写下面这个方法(以下为Swift代码案列)
func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
return FlutterStandardMessageCodec.sharedInstance()
}

3.Flutter跳转IOS原生页面(跳转IOS原生第三方sdk页面)(IOS)

问题描述:

1.我需要从Flutter 页面中直接打开一个第三方的IOS原生的页面,这个时候就会遇到跳转问题的坑.
在IOS页面跳转的时候通常需要一个UIViewController,或者是UIViewController里面的navgationViewController(好像是叫这个名字)来进行跳转,对于不熟悉IOS开发的人来说,太难了.(包括我),
通常拿到的UIViewController或者navgationViewController是空的,这个时候跳转就没有效果.下面介绍2种方式.
知道了问题的原因,所以我们只需要拿到UIViewController或者navgationViewController就可以了(有时候拿到了也不行,好像需要在同一个任务栈)

解决办法

1.通过FlutterViewController
2.模仿官方插件跳转的代码(推荐)
方法一(Swift代码)(不推荐)
// let window = ((UIApplication.shared.delegate?.window)!)!
//
//
// let aobjNavi = UINavigationController(rootViewController: FlutterViewController())
//
// window.rootViewCOntroller= aobjNavi
经过我的实践,这样拿到的NavigationController只能跳转一次,第二次好像就没有效果了。所以推荐下面这种方式
方法二(OC代码):
根据Flutter官方提供的插件flutter_webview 里面打开网页的操作我们可以找到相应的代码
//获取UIViewController,然后可以跳转
-(UIViewController *)viewControllerWithWindow:(UIWindow *)window {
UIWindow *windowToUse = window;
if (windowToUse == nil) {
for (UIWindow *window in [UIApplication sharedApplication].windows) {
if (window.isKeyWindow) {
windowToUse = window;
break;
}
}
}
UIViewController *topCOntroller= windowToUse.rootViewController;
while (topController.presentedViewController) {
topCOntroller= topController.presentedViewController;
}
return topController;
}
在使用的时候这样使用
[[self viewControllerWithWindow:nil] presentViewController:YourVC animated:YES completion:nil];
还有一个值得注意的地方,在IOS13以后,用这种方式打开,会有一种层叠效果显示,这个时候我们需要在你的VC上设置一个属性
YourVC.modalPresentatiOnStyle= UIModalPresentationFullScreen;
这样效果就是全屏的了。

4.集成第三方SDK遇到的问题(IOS)

4.1 如何添加引用ios的其他第三方的插件,比如支付宝。

需要在podspec文件中添加,如
s.dependency 'SDWebImage','4.4.0'

4.2 如果是拷贝的第三方sdk的代码,图片资源没有被正常引用

有时候,我们需要将第三方提供的代码文件夹直接拷贝到我们的项目目录中,里面包括代码文件和资源文件。在操作过程中,项目跑起来以后,
发现界面上中的图片资源没正常显示出来,最后发现打包的包里面没有对应的图片资源。
这个时候我们需要将代码文件下面的图片资源手动拷贝到插件目录的Assets文件夹中。比如别人的图片资源可能是xxxx.bundle,我们只需要将
这个目录拷贝到该目录中即可,然后再podspec中添加引用
s.resource_bundles = {
'yourModelName' => ['Assets/yourModelName.bundle/*.png'],
'yourModelName2' => ['Assets/yourModelName2.bundle/*.png'],
}

4.3 出现’OBJECT_METACLASS$_UTDIDPesistenFile’ 错误,(sdk冲突)

在这里插入图片描述

如上图,可以检查对应pod下面的sdk,如果有UTDID出现,首先检查是否有支付宝的sdk,如果有支付宝的sdk,则可以把支付宝的sdk替换成no-utdid的版本 https://opendocs.alipay.com/open/54/104509

在这里插入图片描述

这里有一个问题就是比如引用的是一个继承了支付宝sdk的插件,但是他没有使用no-utdid的sdk版本,这里有2种解决办法。
第一个是看有没有开源出来,可以手动下载修改,改成自己想要的版本
第二找到集成了支付宝的sdk插件的库,找到支付宝的sdk的目录,然后把no-utdid的版本本地替换掉原来的版本(经测试可行)

5.其他各种问题排查方法

1.如果发现插件项目修改了,但是引用的还是老的代码,这个时候可以先把插件项目给注释掉依次执行下面命令。
flutter clean
flutter pub get
如果一遍没效果,多执行几次,然后再去看看对应代码有没有更新
2.如果多人协同开发,请保持flutter版本一致。可以通过flutter --version 查看,最好的办法都更新到最新版本。
3.在Xcode种突然出现问题,原本可以正常运行的突然出现问题,依次执行下面命令
flutter clean (可以多执行几次)
flutter pub get
pod install
如果还是有异常问题,删除xcode缓存,如果是模拟器,删除模拟器缓存
4.莫名其妙的问题,本来还可以运行,突然就运行不了了。
新建项目,把现有的代码拷贝到新建的项目中。(已实践过,有效。哭~~~~~)


推荐阅读
  • 本文详细介绍了 com.apollographql.apollo.api.internal.Optional 类中的 orNull() 方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在 Mac 上配置 NDK
    本文详细介绍了如何在 Mac 上配置 Android NDK,包括设置环境变量和解决常见问题的方法。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • Vuforia 开发指南:第二章 环境配置与搭建
    本章节详细介绍了如何在Vuforia官网上完成账号注册及环境配置。首先,访问Vuforia官方网站并点击“Register”按钮,按照提示填写必要的个人信息。提交表单后,系统将验证信息并创建账户。接下来,用户需要下载并安装Vuforia开发工具,确保开发环境的顺利搭建。此外,还提供了详细的配置步骤和常见问题的解决方案,帮助开发者快速上手。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
  • 卓盟科技:动态资源加载技术的兼容性优化与升级 | Android 开发者案例分享
    随着游戏内容日益复杂,资源加载过程已不仅仅是简单的进度显示,而是连接玩家与开发者的桥梁。玩家对快速加载的需求越来越高,这意味着开发者需要不断优化和提升动态资源加载技术的兼容性和性能。卓盟科技通过一系列的技术创新,不仅提高了加载速度,还确保了不同设备和系统的兼容性,为用户提供更加流畅的游戏体验。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
author-avatar
mobiledu2502875213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有