0

私のコードでは、Dart によって有効になった新しい Null セーフティ機能を採用しています。現在、次の問題に直面しています。

オーバーライドされたメソッド「buildSuggestions」から、SearchDelegate クラスで、ファクトリ メソッド getLocations を呼び出します。

@override
 Widget buildSuggestions(BuildContext context) {

   if (query.isNotEmpty && query.length > 10) {

     final Future<ApiLocation> locationsSuggested = getIt.getAsync<ApiLocation>(param1: query);

前のコードで指摘したように、検索文字列を googleplaces API に渡す目的で、カスタム パラメーターを factoryParamAsync に渡しました。

@injectable
class ApiLocation {

  final Map<String,dynamic> _listLocations;
  
  ApiLocation(
      this._listLocations,
      );

  Map<String,dynamic> get listLocations {
    return _listLocations;
  }

  @factoryMethod
  static Future<ApiLocation> getLocations(@factoryParam String? searchString) async {

    final url = Uri.https('maps.googleapis.com','/maps/api/place/autocomplete/json', {
      'input': searchString,
      'key': '...',
      'language': 'es',
      'types': 'address',
      'sessiontoken': '...',
    });

    final response = await http.get(url,
      headers: <String, String>{
        'Content-Type': 'application/json; charset=UTF-8',
      },
    );

    final Map<String,dynamic> respuesta={
      'code': response.statusCode.toString(),
      'message': json.decode(response.body),
    };

    return ApiLocation(respuesta);
  }

}

新しい Null Safety 機能は、factoryParam を強制的に nullable として宣言します。

ここでのポイントは、以前はすべてのコードが魅力的に機能していましたが、新しい機能を採用すると、次のエラーがスローされるということです。

Error while creating ApiLocation
I/flutter (10807): Stack trace:
I/flutter (10807):  #0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:46:39)
I/flutter (10807): #1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:36:5)
I/flutter (10807): #2      _ServiceFactory.getObjectAsync (package:get_it/get_it_impl.dart:167:17)
I/flutter (10807): #3      _GetItImplementation.getAsync (package:get_it/get_it_impl.dart:384:25)
I/flutter (10807): #4      LocationSearch.buildSuggestions (package:karabitner_mobile/presentation/new_card_page/new_card_page.dart:2669:60)
I/flutter (10807): #5      _SearchPageState.build (package:flutter/src/material/search.dart:532:34)
I/flutter (10807): #6      StatefulElement.build (package:flutter/src/widgets/framework.dart:4612:27)
I/flutter (10807): #7      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4495:15)
I/flutter (10807): #8      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4667:11)
I/flutter (10807): #9      Element.rebuild (package:flutter/src/widgets/framework.dart:4189:5)
I/flutter (10807): #10     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2694:33)
I/flutter (10807): #11     WidgetsBinding.drawFrame (package:flutter/src/widgets/bindi

変数 String 'query' を String に変換しようとしましたか? それをテストして、同じエラーを取得します。factoryAsync で「instanceName」パラメーターを使用しようとしましたが、一部の応答では推奨されていません。

問題の明確なビジョンを示していただければ幸いです。どんな提案でも大歓迎です。

4

0 に答える 0