Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 标记在热重新加载后显示,但在按下按钮时不显示。(颤振-谷歌地图)_Flutter - Fatal编程技术网

Flutter 标记在热重新加载后显示,但在按下按钮时不显示。(颤振-谷歌地图)

Flutter 标记在热重新加载后显示,但在按下按钮时不显示。(颤振-谷歌地图),flutter,Flutter,当我尝试在我的谷歌地图中放置一个标记时,它直到我单击“热重新加载”才会显示。我是否在某处缺少setState() 我的问题是我不知道在哪里。这个软件包的文档真的很混乱,因为谷歌地图控制器从一开始就进行了更新和大幅更改。许多指南根本没有帮助,因为代码已经更改 import 'package:geolocator/geolocator.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'packa

当我尝试在我的谷歌地图中放置一个标记时,它直到我单击“热重新加载”才会显示。我是否在某处缺少
setState()

我的问题是我不知道在哪里。这个软件包的文档真的很混乱,因为谷歌地图控制器从一开始就进行了更新和大幅更改。许多指南根本没有帮助,因为代码已经更改

import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:flutter/material.dart';
import 'package:mobile_app_dev/UI/base_widget.dart';
import 'package:mobile_app_dev/UI/widgets.dart';

import '../main.dart';

class myMapScreen extends StatefulWidget {
  @override
  myMapState createState() => myMapState();

}

class myMapState extends State<myMapScreen> {

  PageController _pageController;
  GoogleMapController mapController;
  LatLng center = const LatLng(37.352727, -122.034227);
//  Location location = new Location();
  Position currentLocation;

  final Set<Marker> _markers = {};

  void _getLocation() async {
    var currentLocation = await Geolocator()
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.best);

    setState(() {
      _markers.clear();
      final marker = Marker(
        markerId: MarkerId("curr_loc"),
        position: LatLng(currentLocation.latitude, currentLocation.longitude),
        infoWindow: InfoWindow(title: 'Your Location'),
        icon: BitmapDescriptor.defaultMarker
      );
      _markers.add(marker);
    });

    currentLocation = currentLocation;
  }


  void _onMapCreated(GoogleMapController controller) {
    mapController = controller;
  }

  @override
  void initState() {
    _markers.clear();
    super.initState();
    _pageController = PageController();
    _getLocation();
  }

  @override
  void dispose() {
    _pageController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return BaseWidget(builder: (context, sizingInformation) {
      return Scaffold(
        backgroundColor: MyApp.backgroundColor,
        appBar: AppBar(
          automaticallyImplyLeading: true,
          backgroundColor: MyApp.appBarColor,
          title: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[

              Text(
                'Map View',
                style: TextStyle(
                    color: MyApp.whiteNoChangeColor,
                    fontSize: 25.0,
                    fontWeight: FontWeight.bold
                ),
              ),
            ],
          ),
          centerTitle: true,
          actions: <Widget>[
            Padding(
                padding: EdgeInsets.only(right: 20.0),
                child: GestureDetector(
                  onTap: () async {
                    _getLocation();

                  },
                  child: Icon(
                    Icons.search,
                    size: 26.0,
                  ),
                )
            )
          ],
        ),
        body: Container(
          height: sizingInformation.myScreenSize.height,
          width: sizingInformation.myScreenSize.width,
          child: Stack(
            children: <Widget>[
              GoogleMap(
                onMapCreated: _onMapCreated,
                initialCameraPosition: CameraPosition(
                  target: center,
                  zoom: 15.0,
                ),
                myLocationEnabled: true,
                mapType: MapType.hybrid,
                compassEnabled: true,
                markers: _markers,
          ),
              Positioned(
                child: FlatButton(
                  color: Colors.green,
                  child: Text("button"),
                  onPressed: (){
                    final marker = Marker(
                      markerId: MarkerId("curr_loc"),
                      position: center,
                      infoWindow: InfoWindow(title: 'Your Location'),
                      icon: BitmapDescriptor.defaultMarker
                    );
                    _markers.add(marker);
//                    _getLocation();
                  },
                ),
              )


            ],
          ),
        ),
      );
    },
    );
  }
}
import'包:geologitor/geologitor.dart';
导入“包:google_-maps_-flatter/google_-maps_-flatter.dart”;
进口“包装:颤振/材料.省道”;
导入“package:mobile_app_dev/UI/base_widget.dart”;
导入“package:mobile_app_dev/UI/widgets.dart”;
导入“../main.dart”;
类myMapScreen扩展StatefulWidget{
@凌驾
myMapState createState()=>myMapState();
}
类myMapState扩展了状态{
页面控制器_页面控制器;
谷歌地图控制器;
LatLng中心=常数LatLng(37.352727,-122.034227);
//位置=新位置();
位置当前位置;
最终集_标记={};
void\u getLocation()异步{
var currentLocation=等待地理定位器()
.getCurrentPosition(所需精度:定位精度。最佳);
设置状态(){
_标记。清除();
最终标记=标记(
markerId:markerId(“curr_loc”),
位置:LatLng(当前位置.纬度,当前位置.经度),
infoWindow:infoWindow(标题:“您的位置”),
图标:BitmapDescriptor.defaultMarker
);
_标记。添加(标记);
});
currentLocation=当前位置;
}
void\u onMapCreated(谷歌地图控制器){
mapController=控制器;
}
@凌驾
void initState(){
_标记。清除();
super.initState();
_pageController=pageController();
_getLocation();
}
@凌驾
无效处置(){
_pageController.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回BaseWidget(生成器:(上下文,大小信息){
返回脚手架(
backgroundColor:MyApp.backgroundColor,
appBar:appBar(
自动嵌入:正确,
背景颜色:MyApp.appBarColor,
标题:世界其他地区(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
正文(
“地图视图”,
样式:TextStyle(
颜色:MyApp.whiteNoChangeColor,
字体大小:25.0,
fontWeight:fontWeight.bold
),
),
],
),
标题:对,
行动:[
填充物(
填充:仅限边缘设置(右侧:20.0),
儿童:手势检测器(
onTap:()异步{
_getLocation();
},
子:图标(
Icons.search,
尺寸:26.0,
),
)
)
],
),
主体:容器(
高度:sizingInformation.myScreenSize.height,
宽度:sizingInformation.myScreenSize.width,
子:堆栈(
儿童:[
谷歌地图(
onMapCreated:_onMapCreated,
initialCameraPosition:CameraPosition(
目标:中心,
缩放:15.0,
),
myLocationEnabled:对,
mapType:mapType.hybrid,
同谋:是的,
标记:_标记,
),
定位(
孩子:扁平按钮(
颜色:颜色。绿色,
子项:文本(“按钮”),
已按下:(){
最终标记=标记(
markerId:markerId(“curr_loc”),
位置:中,
infoWindow:infoWindow(标题:“您的位置”),
图标:BitmapDescriptor.defaultMarker
);
_标记。添加(标记);
//_getLocation();
},
),
)
],
),
),
);
},
);
}
}

**只需在onPressed中添加一个setState方法,请检查以下示例**

     onPressed: (){
                final marker = Marker(
                  markerId: MarkerId("curr_loc"),
                  position: center,
                  infoWindow: InfoWindow(title: 'Your Location'),
                  icon: BitmapDescriptor.defaultMarker
                );
             setState((){
                        _markers.add(marker);
                       });
              },

只需创建一个标记列表,首先必须清除该列表,然后在该列表上添加标记

  var markers = Set<Marker>();


 addMarker(double lat, double lng, String id) {
    var marker = Marker(
      markerId: MarkerId(id),
      position: LatLng(
        lat,
        lng,
      ),
      infoWindow: InfoWindow(title: locationName),
      onTap: () {},
    );

    markers.clear();
    markers.add(marker);
  }
var markers=Set();
addMarker(双lat、双lng、字符串id){
变量标记=标记(
markerId:markerId(id),
职位:LatLng(
拉特,
液化天然气,
),
infoWindow:infoWindow(标题:locationName),
onTap:(){},
);
标记。清除();
标记。添加(标记);
}

我也有同样的问题。

我发现解决这个问题的唯一方法是在谷歌地图小部件的onTap选项中移动你的
getLocation()

是的,你需要
setState
onPressed:(){
当我这样做时,即使我按下“热重新加载”按钮,标记也不会出现。我想知道设置状态是否实际上不会影响google地图小部件?