Dart ';流订阅<;位置数据>';无法分配给';流订阅<;地图<;字符串,双>&燃气轮机';
当前正在学习颤振,在尝试检测我的设备的位置时出现此错误: 无法分配“StreamSubscription”类型的值 到“StreamSubscription>类型的变量” 我一直在关注一个在线教程,但不知怎么的,出现了这个错误Dart ';流订阅<;位置数据>';无法分配给';流订阅<;地图<;字符串,双>&燃气轮机';,dart,flutter,location,Dart,Flutter,Location,当前正在学习颤振,在尝试检测我的设备的位置时出现此错误: 无法分配“StreamSubscription”类型的值 到“StreamSubscription>类型的变量” 我一直在关注一个在线教程,但不知怎么的,出现了这个错误 import 'package:flutter/material.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:location/location.dart'; import '
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:location/location.dart';
import 'dart:async';
import 'package:flutter/services.dart';
class MainPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => AppState();
}
class AppState extends State<MainPage> {
Map<String,double> currentLocation = new Map();
StreamSubscription<Map<String,double>> locationSubscription;
var location = new Location();
String error;
void initState() {
super.initState();
currentLocation['latitude'] = 0.0;
currentLocation['longitude'] = 0.0;
initPlatformState();
locationSubscription =
location.onLocationChanged().listen((Map<String,double> result) {
setState(() {
currentLocation = result;
});
});
}
void initPlatformState() async{
Map<String,double> myLocation;
try {
myLocation = await location.getLocation();
error="";
} on PlatformException catch(e) {
if(e.code == 'PERMISSION_DENIED')
error = "permission denied";
else if(e.code == "PERMISSION_DENIED_NEVER_ASK")
error = "permission denied";
myLocation = null;
}
setState(() {
currentLocation = myLocation;
});
}
@override
Widget build (BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text(""),
automaticallyImplyLeading: false,
),
body: Container(
child: FlutterMap(
options: MapOptions(
),
layers: [
TileLayerOptions(
),
]
),
)
);
}
}
导入“包装:颤振/材料.省道”;
导入“包:颤振图/颤振图.dart”;
导入“package:location/location.dart”;
导入“dart:async”;
导入“包:flifter/services.dart”;
类MainPage扩展了StatefulWidget{
@凌驾
State createState()=>AppState();
}
类AppState扩展了状态{
Map currentLocation=新映射();
流订阅位置订阅;
var location=新位置();
字符串错误;
void initState(){
super.initState();
当前位置['纬度]]=0.0;
当前位置[‘经度’]=0.0;
initPlatformState();
位置订阅=
location.onLocationChanged().listen((映射结果){
设置状态(){
当前位置=结果;
});
});
}
void initPlatformState()异步{
地图定位;
试一试{
myLocation=等待位置。getLocation();
错误=”;
}平台上异常捕获(e){
如果(e.code=='权限被拒绝')
error=“权限被拒绝”;
否则如果(e.code==“权限被拒绝\u从不要求”)
error=“权限被拒绝”;
myLocation=null;
}
设置状态(){
currentLocation=myLocation;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:对,
标题:文本(“”),
自动嵌入:false,
),
主体:容器(
孩子:地图(
选项:地图选项(
),
图层:[
TileLayerOptions(
),
]
),
)
);
}
}
如果您能给我提些建议,我将不胜感激。下面是我观看的视频:看起来本教程是使用较旧版本的
位置
插件完成的,因为v2.0.0版他们更改了api以返回结构化数据而不是地图
因此,您需要将所有的
地图类型更改为LocationData
,或者将插件版本设置为^1.4.0
,多亏了一位好心的人在另一个Fatter facebook群上的帮助,我尝试了很多方法,直到找到了这种方法。请确保在您的pubspec.yaml中将位置更新为最新版本
dependencies:
location: ^2.3.5
然后将其更改为以下代码:
LocationData\u currentLocation;
StreamSubscription _locationSubscription;
var_locationService=新位置();
字符串错误;
void initState(){
super.initState();
initPlatformState();
_locationSubscription=\u locationService
.onLocationChanged()
.listen((LocationData currentLocation)异步{
设置状态(){
_currentLocation=当前位置;
});
});
}
void initPlatformState()异步{
试一试{
_currentLocation=Wait_locationService.getLocation();
}平台上异常捕获(e){
如果(e.code=='权限被拒绝'){
错误='权限被拒绝';
}否则如果(e.code==“权限被拒绝\u从不要求”){
错误='权限被拒绝';
}
_currentLocation=null;
}