実現したいこと
ElevatedButtonを押下した時にonPressedに指定したメソッドが動くようにしたい。
発生している問題・分からないこと
ElevatedButtonのonPressedにメソッドを指定しているのですが、
ボタンを押下してもメソッドが反応しません。
記述の仕方が悪いのか?色々調べたのですが、解決できずに困っています。
Flutter/dartの学習を始めたばかりで、何か基本的な間違いをしているかも知れませんが、
よろしくお願いいたします。
該当のソースコード
import 'package:flutter/material.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:geolocator/geolocator.dart'; import 'package:latlong2/latlong.dart'; import 'package:geocoding/geocoding.dart' as geoCoding; //緯度 double latitude = 0; //経度 double longitude = 0; // 国名 String Country = ""; // 県名 String AdministrativeArea = ""; // 市名 String Locality = ""; void main() async { // runAppを呼び出す前にバインディングを初期化する. WidgetsFlutterBinding.ensureInitialized(); //位置情報サービス利用可否 bool serviceEnabled; //位置情報の取得権限 LocationPermission permission; // 位置情報サービスが有効かをテスト serviceEnabled = await Geolocator.isLocationServiceEnabled(); // 位置情報サービスが有効でない場合 if (!serviceEnabled) { return Future.error('位置情報サービスが利用できません。'); } // 位置情報の取得権限が有効かをテスト permission = await Geolocator.checkPermission(); if (permission == LocationPermission.denied) { // 位置情報の取得権限が無い場合、ユーザに許可を求める permission = await Geolocator.requestPermission(); // 位置情報の権限取得を拒否された場合 if (permission == LocationPermission.denied) { return Future.error('位置情報の権限取得を拒否されました。'); } } // 位置情報の権限が永久に拒否されている場合 if (permission == LocationPermission.deniedForever) { return Future.error('位置情報の権限が永久に拒否されています。'); } // 位置情報を取得 Position position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high); // 緯度と経度を取得 latitude = position.latitude; longitude = position.longitude; print('現在地の緯度は、$latitudeです。'); print('現在地の経度は、$longitudeです。'); // 取得した位置情報の経度と緯度を使い、詳細情報を取り出す final placeMarks = await geoCoding.placemarkFromCoordinates( position.latitude, position.longitude); // 上記のplaceMarksは配列で帰ってくるので一つだけ取り出す final placeMark = placeMarks[0]; Country = placeMark.country.toString(); // 国名 AdministrativeArea = placeMark.administrativeArea.toString(); // 県名 Locality = placeMark.locality.toString(); // 市名 print('現在地の国名は、$Countryです。'); print('現在地の県名は、$AdministrativeAreaです。'); print('現在地の市名は、$Localityです。'); // getLocation(); runApp(const MapApp()); } Future<void> getLocation() async { // 位置情報を取得 Position position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high); // 緯度と経度を取得 latitude = position.latitude; longitude = position.longitude; print('現在地の緯度は、$latitudeです。'); print('現在地の経度は、$longitudeです。'); // 取得した位置情報の経度と緯度を使い、詳細情報を取り出す final placeMarks = await geoCoding.placemarkFromCoordinates( position.latitude, position.longitude); // 上記のplaceMarksは配列で帰ってくるので一つだけ取り出す final placeMark = placeMarks[0]; Country = placeMark.country.toString(); // 国名 AdministrativeArea = placeMark.administrativeArea.toString(); // 県名 Locality = placeMark.locality.toString(); // 市名 print('現在地の国名は、$Countryです。'); print('現在地の県名は、$AdministrativeAreaです。'); print('現在地の市名は、$Localityです。'); } class MapApp extends StatefulWidget { const MapApp({super.key}); @override State<MapApp> createState() => _MapApp(); } class _MapApp extends State<MapApp> { final String _title = 'OpenMaps'; List<CircleMarker> circleMarkers = []; @override void initState() { super.initState(); initLocation(); } @override Widget build(BuildContext context) { return MaterialApp( title: 'OpenMap', theme: ThemeData( primarySwatch: Colors.blue, ), home: Scaffold( appBar: AppBar( title: Text(_title), actions: <Widget>[ //現在地ボタン SizedBox( width: 36, height: 36, child: ElevatedButton( style: ElevatedButton.styleFrom( elevation: 10, backgroundColor: Colors.amber[500], shape: const CircleBorder(), padding: const EdgeInsets.all(2), ), // onPressed: null, //ボタン無効化 onPressed: () => _onButtonPressed(), child: const Icon( Icons.refresh_sharp, color: Colors.blue, ), ), ), const SizedBox( width: 10, ), ], ), extendBodyBehindAppBar: false, body: FlutterMap( // マップ表示設定 options: MapOptions( center: LatLng(latitude, longitude), zoom: 16.0, interactiveFlags: InteractiveFlag.all, enableScrollWheel: true, scrollWheelVelocity: 0.00001, ), //マップ画像にOpenStreetMapを設定 children: [ TileLayer( urlTemplate: "https://tile.openstreetmap.jp/{z}/{x}/{y}.png", userAgentPackageName: 'land_place', ), // 現在地マーカーのレイアー設定 CircleLayer(circles: circleMarkers), ], ), ), ); } _onButtonPressed() { print('ボタンが押されました。'); } Future<void> initLocation() async { initCircleMarker(latitude, longitude); setState(() {}); } //現在地を示す赤丸(CircleMarker)の描画メソッド void initCircleMarker(double latitude, double longitude) { CircleMarker circleMarler = CircleMarker( color: const Color.fromARGB(255, 235, 64, 64).withOpacity(0.9), radius: 10, borderColor: Colors.white.withOpacity(0.9), borderStrokeWidth: 2, point: LatLng(latitude, longitude), ); circleMarkers.add(circleMarler); } }
試したこと・調べたこと
上記の詳細・結果
色々試してみたが、どれも解決に至らず
補足
特になし

0 コメント