初めに
Dart言語を用いた、フレームワーク「Flutter」でのネイティブアプリ開発の時に起きたエラーです。備忘録としてメモ書きしておきますので、誰かの参考になればと思います。
##現状の問題
以下のようにコードを実行すると、Error: Method invocation is not a constant expression.
というエラーが出てきます。
mappage.dart
import 'package:flutter/material.dart';
import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class MapPage extends StatefulWidget {
const MapPage({Key? key}) : super(key: key);
=================
コード省略
=================
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
children: [
const TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
),
onSubmitted: (value) async {
CameraPosition result = await serchLatLng(value);
_controller.animateCamera(CameraUpdate.newCameraPosition(result));
},
),
Expanded(
child: GoogleMap(
markers: _markers,
initialCameraPosition: _initialPosition,
onMapCreated: (GoogleMapController controller) async {
await getCurrentPosition();
_controller = controller;
setState(() {
_markers.add(
Marker(
markerId: const MarkerId('3'),
position: currentPosition.target,
infoWindow: const InfoWindow(title: '現在地')),
);
});
_controller.animateCamera(
CameraUpdate.newCameraPosition(currentPosition));
},
myLocationEnabled: true,
myLocationButtonEnabled: true,
),
),
],
),
));
}
}
問題
色々調べてみましたが、全然解決策が出てこず、苦戦していました。
結論から言うと、とても簡単なエラーでした。TextField()理由は、親Widgetにconstが入っていたものが原因となっていました。
解決策
TextField()の前にconstを取り除くことで、簡単にエラーが解消されました。
mappage.dart
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
children: [
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
),
onSubmitted: (value) async {
CameraPosition result = await serchLatLng(value);
ぜひ、同じ境遇でお困りの方は、参考にしていただければと思います。