当前位置:   article > 正文

flutter 问题记录_您的应用存在隐藏最近任务列表名称的行为,不符合华为应用市场审核标准。

您的应用存在隐藏最近任务列表名称的行为,不符合华为应用市场审核标准。

1、listview 上下有空白间隔:MediaQuery.removePadding包裹

  1. MediaQuery.removePadding(context: context,
  2. removeBottom: true,
  3. removeTop: true,
  4. child: ListView.builder(
  5. shrinkWrap: true,
  6. physics: NeverScrollableScrollPhysics(),
  7. itemCount: 5,
  8. itemBuilder: (context, index){
  9. return AssetsImage('home-bg-top.png', fit: BoxFit.fitWidth,);
  10. },
  11. )
  12. )

2、flutter 打包Android debug和release包如果出现部分功能不一致,可能为 Flutter1.17以后增加了自带混淆功能。(在开发阿里百川功能时遇到的问题总结)

     解决两种方式:
                          1)增加flutter plugins在Android中proguard-rules.pro中的混淆配置

                          2)关闭混淆

  1. minifyEnabled false //删除无用代码
  2. useProguard false //代码压缩设置
  3. shrinkResources false //删除无用资源
  4. signingConfig signingConfigs.config
  5. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

3、ios pod install 慢,导致部分库导入不成功。
    在podfile中增加:source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'

    pod库版本低会导致部分flutter库导入不成功(jpush_flutter),解决(更新最新库)

pod repo update master

     ios运行或打包错误,一部分原因需要在android studio devices运行一遍,再在xcode中运行解决                         

4、微信相关,fluwx 3.4.2

     1)微信5.4.3开始jcenter关停。需要在根目录build.gradle增加mavenCentral()

     2) Android端由于kotlin版本问题导致:org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: wrong bytecode错误。

    解决:修改根目录build.gradle,kotlin版本为1.3.72

5、系统分享,引用库:share_plus: ^2.1.4

    问题:安卓分享朋友多图在部分机型出现:分享失败,多文件分享仅支持照片格式。

    解决:需要下载库手动引入到plugins中,修改安卓Share.java文件中getUrisForPaths方法如下:

  1. file = copyToShareCacheFolder(file);
  2. //uris.add(FileProvider.getUriForFile(getContext(), providerAuthority, file));
  3. ApplicationInfo applicationInfo = getContext().getApplicationInfo();
  4. int targetSDK = applicationInfo.targetSdkVersion;
  5. if (targetSDK >= Build.VERSION_CODES.N && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  6. uris.add(Uri.parse(MediaStore.Images.Media.insertImage(getContext().getContentResolver(), file.getAbsolutePath(), file.getName(), null)));
  7. } else {
  8. uris.add(Uri.fromFile(file));
  9. }

6、webview_cookie_manager:1.0.3 库ios最低版本是11.0

        设备运行可以,但是hoc打包会出现module not found错误

        解决:

       需要在xcode-info中iOS Deployment Target中设置对应11

7、部分安卓机型(oppo r9s):
:DioError [DioErrorType.DEFAULT]: HandshakeException: Handshake error in client (OS Error:
CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:354)) 无法获取本地证书

解决:
添加如下代码 强行信任

  1. Dio dio = Dio();
  2. (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client){
  3. client.badCertificateCallback=(cert, host, port){
  4. return true;
  5. };
  6. };

 CachedNetworkImage:https证书导致的问题解决:

  1. CachedNetworkImage(
  2. width: width,
  3. height: height,
  4. fit: fit,
  5. imageUrl: imageUrl,
  6. cacheManager: EsoImageCacheManager(),
  7. );
  1. import 'dart:async';
  2. import 'package:flutter_cache_manager/flutter_cache_manager.dart';
  3. import 'package:http/http.dart' as http;
  4. import 'dart:io';
  5. /// 缓存管理
  6. class EsoImageCacheManager extends CacheManager {
  7. static const key = 'libEsoCachedImageData';
  8. static EsoImageCacheManager _instance;
  9. factory EsoImageCacheManager() {
  10. _instance ??= EsoImageCacheManager._();
  11. return _instance;
  12. }
  13. EsoImageCacheManager._() : super(Config(key, fileService: EsoHttpFileService()));
  14. }
  15. class EsoHttpFileService extends FileService {
  16. HttpClient _httpClient;
  17. EsoHttpFileService({HttpClient httpClient}) {
  18. _httpClient = httpClient ?? HttpClient();
  19. _httpClient.badCertificateCallback = (cert, host, port) => true;
  20. }
  21. @override
  22. Future<FileServiceResponse> get(String url,
  23. {Map<String, String> headers = const {}}) async {
  24. final Uri resolved = Uri.base.resolve(url);
  25. final HttpClientRequest req = await _httpClient.getUrl(resolved);
  26. headers?.forEach((key, value) {
  27. req.headers.add(key, value);
  28. });
  29. final HttpClientResponse httpResponse = await req.close();
  30. final http.StreamedResponse _response = http.StreamedResponse(
  31. httpResponse.timeout(Duration(seconds: 60)), httpResponse.statusCode,
  32. contentLength: httpResponse.contentLength,
  33. reasonPhrase: httpResponse.reasonPhrase,
  34. isRedirect: httpResponse.isRedirect,
  35. );
  36. return HttpGetResponse(_response);
  37. }
  38. }

8、webview_flutter:2.0.10版本
不显示网页:I/X509Util: Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

解决:下载源码,导入plugins。修改FlutterWebViewClient.java文件中internalCreateWebViewClient和internalCreateWebViewClientCompat方法,增加:

  1. @Override
  2. public void onReceivedSslError(WebView view, SslErrorHandler handler,
  3. SslError error) {
  4. handler.proceed();
  5. }

网页字体不随系统字体大小变化:

Android:WebSettings settings = webView.getSettings(); settings.setTextZoom(100);

iOS:body { -webkit-text-size-adjust: none !important; }

9、集成支付宝支付Tobias库时与flutter_alibc冲突。主要为UTDID冲突

解决:去阿里文档中心 https://docs.open.alipay.com/54/104509 重新下载没有UTDID冲突的库

下载-解压,替换如下图(删除原来的):

10、Android 11 存储权限问题(targetSdkVersion 30)

①AndroidManifest.xml  增加   

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

② flutter权限判断 

 if (await Permission.storage.request().isGranted && await Permission.manageExternalStorage.request().isGranted) {}

11、webview 微信支付,商家参数错误其中一个问题解决(android端referer丢失问题)
针对:webview_flutter:2.0.10

  1. 39行增加:
  2. String mReffer = "";
  3. 91行修改:
  4. @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  5. boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
  6. if (!hasNavigationDelegate) {
  7. return false;
  8. }
  9. Map<String, String> header = new HashMap<>();
  10. if (request != null&&request.getRequestHeaders()!=null) {
  11. header = request.getRequestHeaders();
  12. }
  13. header.put("Referer", mReffer);
  14. notifyOnNavigationRequest(request.getUrl().toString(), header, view, request.isForMainFrame());
  15. return request.isForMainFrame();
  16. }
  17. 125行修改:
  18. boolean shouldOverrideUrlLoading(WebView view, String url) {
  19. if (!hasNavigationDelegate) {
  20. return false;
  21. }
  22. Map<String, String> header = new HashMap<>();
  23. header.put("Referer", mReffer);
  24. notifyOnNavigationRequest(url, header, view, true);
  25. return true;
  26. }
  27. 194行增加:
  28. @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  29. @Nullable
  30. @Override
  31. public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
  32. Map<String, String> lRequestHeaders = request.getRequestHeaders();
  33. if (lRequestHeaders.containsKey("Referer")) {
  34. mReffer = lRequestHeaders.get("Referer");
  35. }
  36. return super.shouldInterceptRequest(view, request);
  37. }
  38. 251行增加:
  39. @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  40. @Nullable
  41. @Override
  42. public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
  43. Map<String, String> lRequestHeaders = request.getRequestHeaders();
  44. if (lRequestHeaders.containsKey("Referer")) {
  45. mReffer = lRequestHeaders.get("Referer");
  46. }
  47. return super.shouldInterceptRequest(view, request);
  48. }

12、Hero动画,当包含子组件有TextField是报错如下:

No Material widget found. Hero Animation is not working with TextField

解决:Hero子组件用Material包含。

  1. Hero(
  2. tag: "search",
  3. child: Material(
  4. type: MaterialType.transparency,
  5. child: Row(
  6. children: [
  7. //TextField(),
  8. //GestureDetector(),
  9. ],
  10. ),
  11. ),
  12. );

13、安卓任务栏文件名称不显示,在老版flutter会出现问题。(华为提版:您的应用存在隐藏最近任务列表名称的行为,不符合华为应用市场审核标准),解决:

在MainActivity文件中重写 setTaskDescription:

  1. //因flutter里会重置setTaskDescription,会导致最近任务标题消失,所以这里需要把标题重新设置
  2. @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
  3. override fun setTaskDescription(taskDescription: ActivityManager.TaskDescription?) {
  4. val description: ActivityManager.TaskDescription
  5. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
  6. description = ActivityManager.TaskDescription("名称", R.mipmap.ic_launcher)
  7. } else {
  8. description = ActivityManager.TaskDescription("名称", BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher))
  9. }
  10. super.setTaskDescription(description)
  11. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/389940
推荐阅读
相关标签
  

闽ICP备14008679号