简体   繁体   English

Flutter Firebase 性能 - 未处理的异常

[英]Flutter Firebase Performance - unhandled exception

Getting an error while tracking HTTPMetric .跟踪HTTPMetric时出错。 It was working properly它工作正常

Check the traceback below:检查下面的回溯:

/flutter (10311): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(error, String index out of range: -1, null)
E/flutter (10311): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter (10311): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:316:33)
E/flutter (10311): <asynchronous suspension>
E/flutter (10311): #2      FirebasePerformance.newHttpMetric (package:firebase_performance/src/firebase_performance.dart:76:33)
E/flutter (10311): #3      _Client.send (package:<my_package>/api/api.dart:226:10)
E/flutter (10311): #4      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:43:6)
E/flutter (10311): #5      _Client.send (package:<my_package>/api/api.dart:224:37)
E/flutter (10311): #6      BaseClient._sendUnstreamed (package:http/src/base_client.dart:169:38)
E/flutter (10311): #7      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:43:6)
E/flutter (10311): #8      BaseClient._sendUnstreamed (package:http/src/base_client.dart:149:35)
E/flutter (10311): #9      BaseClient.post (package:http/src/base_client.dart:54:7)
E/flutter (10311): #10    MyAPI.post.<anonymous closure> (package:<my_package>/api/home.dart:17:33)
E/flutter (10311): #11     _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
E/flutter (10311): #12     _rootRunUnary (dart:async/zone.dart:1132:38)
E/flutter (10311): #13     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
E/flutter (10311): #14     _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
E/flutter (10311): #15     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
E/flutter (10311): #16     Future._propagateToListeners (dart:async/future_impl.dart:707:32)
E/flutter (10311): #17     Future._completeWithValue (dart:async/future_impl.dart:522:5)
E/flutter (10311): #18     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
E/flutter (10311): #19     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
E/flutter (10311): #20     BaseAPI.buildAuthHeaders (package:<my_package>/api/api.dart)
E/flutter (10311): #21     _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
E/flutter (10311): #22     _rootRunUnary (dart:async/zone.dart:1132:38)
E/flutter (10311): #23     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
E/flutter (10311): #24     _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
E/flutter (10311): #25     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
E/flutter (10311): #26     Future._propagateToListeners (dart:async/future_impl.dart:707:32)
E/flutter (10311): #27     Future._completeWithValue (dart:async/future_impl.dart:522:5)
E/flutter (10311): #28     Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:552:7)
E/flutter (10311): #29     _rootRun (dart:async/zone.dart:1124:13)
E/flutter (10311): #30     _CustomZone.run (dart:async/zone.dart:1021:19)
E/flutter (10311): #31     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
E/flutter (10311): #32     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
E/flutter (10311): #33     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter (10311): #34     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
E/flutter (10311): 
I/flutter (10311): Error caught: MissingPluginException(No implementation found for method HttpMetric#start on channel plugins.flutter.io/firebase_performance)
I/flutter (10311): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:314:7)
I/flutter (10311): <asynchronous suspension>
I/flutter (10311): #1      HttpMetric.start (package:firebase_performance/src/http_metric.dart:131:40)
I/flutter (10311): #2      _Client.send (package:<my_package>/api/api.dart:228:18)
I/flutter (10311): #3      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:43:6)
I/flutter (10311): #4      _Client.send (<my_package>/api/api.dart:224:37)
I/flutter (10311): #5      BaseClient._sendUnstreamed (package:http/src/base_client.dart:169:38)
I/flutter (10311): #6      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:43:6)
I/flutter (10311): #7      BaseClient._sendUnstreamed (package:http/src/base_client.dart:149:35)
I/flutter (10311): #8      BaseClient.post (package:http/src/base_client.dart:54:7)
I/flutter (10311): #9      MyAPI.post.<anonymous closure> (package<my_package>/api/home.dart:17:33)
I/flutter (10311): #10     _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
I/flutter (10311): #11    

Following is my setup以下是我的设置

abstract class BaseAPI {
  _Client client = _Client(http.Client());

  String encodeUrlParams(String url, Map<String, String> params) {
    Uri uri = Uri.parse(url);
    if (uri.hasQuery) params.addAll(uri.queryParameters);
    uri = uri.replace(queryParameters: params);
    return uri.toString();
  }

  String appendPath(String url, List pathSegments) {
    final pathSeg = pathSegments.map((ps) => ps.toString()).join("/");
    return url.endsWith("/") ? "$url$pathSeg/" : "$url/$pathSeg/";
  }

  Map<String, String> buildBasicHeaders() {
    return {
      HttpHeaders.contentTypeHeader: "application/json",
      HttpHeaders.acceptHeader: "application/json",
    };
  }
}

class _Client extends http.BaseClient {
  _Client(this._inner);

  final http.Client _inner;

  HttpMethod _nameToEnum(String methodName) {
    switch (methodName) {
      case "GET":
        return HttpMethod.Get;
      case "POST":
        return HttpMethod.Post;
      case "HEAD":
        return HttpMethod.Head;
      case "PUT":
        return HttpMethod.Put;
      case "DELETE":
        return HttpMethod.Delete;
      default:
        return HttpMethod.Get;
    }
  }

  @override
  Future<http.StreamedResponse> send(http.BaseRequest request) async {
    final HttpMetric metric = FirebasePerformance.instance
        .newHttpMetric(request.url.toString(), _nameToEnum(request.method));

    await metric.start();

    http.StreamedResponse response;
    try {
      response = await _inner.send(request);
      metric
        ..responsePayloadSize = response.contentLength
        ..responseContentType = response.headers['Content-Type']
        ..requestPayloadSize = request.contentLength
        ..httpResponseCode = response.statusCode;
    } finally {
      await metric.stop();
    }

    return response;
  }
}

It was working properly before, suddenly it is throwing this error.它以前工作正常,突然它抛出这个错误。

This is known issue: https://github.com/FirebaseExtended/flutterfire/issues/1136这是已知问题: https://github.com/FirebaseExtended/flutterfire/issues/1136

This is happening because the URL is ending with "?".这是因为 URL 以“?”结尾。 removing it as suggested in issue will solve the problem.按照问题中的建议将其删除将解决问题。

From Issue:从问题:

Removing the trailing?去除尾随? fixes the issue解决问题

 var strUri = request.url.toString(); strUri = strUri.endsWith("?")? strUri.substring(0, strUri.length - 1): strUri; final HttpMetric metric = FirebasePerformance.instance.newHttpMetric(strUri, ...); ```

For the code in question the solution should be:对于有问题的代码,解决方案应该是:

String encodeUrlParams(String url, Map<String, dynamic> params) {
    Uri uri = Uri.parse(url);
    if (uri.hasQuery) params.addAll(uri.queryParameters);
    uri = uri.replace(queryParameters: params);
    final uriStr = uri.toString();
    return uriStr.endsWith("?")
        ? uriStr.substring(0, uriStr.length - 1)
        : uriStr;
  }

暂无
暂无

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

相关问题 Flutter Firebase 查询快照错误:“未处理的异常:错误状态:无元素” - Flutter firebase query snapshot error: "Unhandled Exception: Bad state: No element" Firebase/Flutter:未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'isNotEmpty' - Firebase/Flutter : Unhandled Exception: NoSuchMethodError: The getter 'isNotEmpty' was called on null Flutter-Firebase:未处理的异常:[firebase_functions/internal] 响应无效 JSON object - Flutter-Firebase: Unhandled Exception: [firebase_functions/internal] Response is not valid JSON object 未处理的异常:[firebase_auth/unknown] null:使用颤振/firebase 进行电话身份验证时出错 - Unhandled Exception: [firebase_auth/unknown] null: Error in Phone Authentication using flutter/firebase Flutter 项目,Firebase 登录不起作用并抛出未处理的异常:类型“FirebaseUser”不是“布尔”类型的子类型错误 - Flutter Project, Firebase Login not working And throwing Unhandled Exception: type 'FirebaseUser' is not a subtype of type 'bool' Error Flutter / Firebase 项目 - 是“未处理的异常:Null 检查运算符在 Z37A625 上使用导致66489C1DAE2997 值? - Flutter / Firebase project - Is `Unhandled Exception: Null check operator used on a null value` causing a blank screen? Flutter/Firebase 错误 - 未处理的异常:输入“_CompactLinkedHashSet”<void> &#39; 不是类型 &#39;FutureOr 的子类型<Set<Future<void> &gt;&gt;&#39; - Flutter/Firebase error - Unhandled Exception: type '_CompactLinkedHashSet<void>' is not a subtype of type 'FutureOr<Set<Future<void>>>' 未处理的异常:MissingPluginException(在通道 plugins.flutter.io/firebase_messaging 上找不到方法 getToken 的实现) - Unhandled Exception: MissingPluginException(No implementation found for method getToken on channel plugins.flutter.io/firebase_messaging) Flutter + Firebase 引发未处理的异常:此小部件已被卸载错误使用导航器更改视图 - Flutter + Firebase Throwing Unhandled Exception: This widget has been unmounted Error Using Navigator to change view 未处理的异常 MissingPluginException:在通道 plugins.flutter.io/firebase_core 上找不到方法 Firebase#initializeCore 的实现 - Unhandled Exception MissingPluginException: No implementation found for method Firebase#initializeCore on channel plugins.flutter.io/firebase_core
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM