私のコードでは、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」パラメーターを使用しようとしましたが、一部の応答では推奨されていません。
問題の明確なビジョンを示していただければ幸いです。どんな提案でも大歓迎です。