从函数更新小部件的装饰画
Update the Painted Decoration of The Widget from a Function
不知道标题写得对不对,我会尽力解释我的问题。我现在有一个更新当前用户位置的功能,效果很好。问题是绘制的指针保留在那个确切的位置,因为装饰在小部件内绘制一次并且永远不会改变。
我查看了 google 如何使用标记 object,但这似乎不适用于我的应用程序,因为我没有使用法线贴图。
void updateLocationPin(LocationData newLocalData, Uint8List imageData){
LatLng latLng = LatLng(newLocalData.latitude!, newLocalData.longitude!);
this.setState(() {
/* marker = Marker(
markerId: MarkerId("home"),
position: latLng,
rotation: 0.5,
draggable: false,
flat: true,
zIndex: 2,
anchor: Offset(0.5, 0.5),
icon: BitmapDescriptor.fromBytes(imageData)
);*/
xPosition = latLng.longitude;
yPosition = latLng.latitude;
ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text("Position: ${xPosition}, ${yPosition}"), duration: Duration(milliseconds: 5000), ), );
});
}
@override
Widget build(BuildContext context) {
var dpr = MediaQuery.of(context).devicePixelRatio;
return Scaffold(
body: SafeArea(
child: Stack(
children: [
GestureDetector(
child: InteractiveViewer(
transformationController: controller,
constrained: false,
minScale: 0.1,
maxScale: 1.0,
child: Stack(children: [
Image.asset(
"assets/images/$level",
),
Positioned(
left: xPosition,
top: yPosition,
child: Container(
width: 50.0 / dpr,
height: 50.0 / dpr,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.red,
),
),
),
]),
boundaryMargin: EdgeInsets.all(100),
),
),
],
),
),
);
}
每次 updateLocationPin
被调用时我如何更新绘制的圆圈?我可能应该事先指出这一点,但我是一个完全的初学者,试图通过做一些 self-coding 来学习,如果有人指出我可能遗漏的任何问题或不正确的代码,我们将不胜感激。提前致谢,祝所有阅读者圣诞快乐。
试试这个:
Color _newColor = Colors.red;
void updateLocationPin(LocationData newLocalData, Uint8List imageData){
LatLng latLng = LatLng(newLocalData.latitude!, newLocalData.longitude!);
this.setState(() {
/* marker = Marker(
markerId: MarkerId("home"),
position: latLng,
rotation: 0.5,
draggable: false,
flat: true,
zIndex: 2,
anchor: Offset(0.5, 0.5),
icon: BitmapDescriptor.fromBytes(imageData)
);*/
xPosition = latLng.longitude;
yPosition = latLng.latitude;
_newColor = Colors.blue;
ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text("Position: ${xPosition}, ${yPosition}"), duration: Duration(milliseconds: 5000), ), );
});
}
@override
Widget build(BuildContext context) {
var dpr = MediaQuery.of(context).devicePixelRatio;
return Scaffold(
body: SafeArea(
child: Stack(
children: [
GestureDetector(
child: InteractiveViewer(
transformationController: controller,
constrained: false,
minScale: 0.1,
maxScale: 1.0,
child: Stack(children: [
Image.asset(
"assets/images/$level",
),
Positioned(
left: xPosition,
top: yPosition,
child: Container(
width: 50.0 / dpr,
height: 50.0 / dpr,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: _newColor,
),
),
),
]),
boundaryMargin: EdgeInsets.all(100),
),
),
],
),
),
);
}
不知道标题写得对不对,我会尽力解释我的问题。我现在有一个更新当前用户位置的功能,效果很好。问题是绘制的指针保留在那个确切的位置,因为装饰在小部件内绘制一次并且永远不会改变。
我查看了 google 如何使用标记 object,但这似乎不适用于我的应用程序,因为我没有使用法线贴图。
void updateLocationPin(LocationData newLocalData, Uint8List imageData){
LatLng latLng = LatLng(newLocalData.latitude!, newLocalData.longitude!);
this.setState(() {
/* marker = Marker(
markerId: MarkerId("home"),
position: latLng,
rotation: 0.5,
draggable: false,
flat: true,
zIndex: 2,
anchor: Offset(0.5, 0.5),
icon: BitmapDescriptor.fromBytes(imageData)
);*/
xPosition = latLng.longitude;
yPosition = latLng.latitude;
ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text("Position: ${xPosition}, ${yPosition}"), duration: Duration(milliseconds: 5000), ), );
});
}
@override
Widget build(BuildContext context) {
var dpr = MediaQuery.of(context).devicePixelRatio;
return Scaffold(
body: SafeArea(
child: Stack(
children: [
GestureDetector(
child: InteractiveViewer(
transformationController: controller,
constrained: false,
minScale: 0.1,
maxScale: 1.0,
child: Stack(children: [
Image.asset(
"assets/images/$level",
),
Positioned(
left: xPosition,
top: yPosition,
child: Container(
width: 50.0 / dpr,
height: 50.0 / dpr,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.red,
),
),
),
]),
boundaryMargin: EdgeInsets.all(100),
),
),
],
),
),
);
}
每次 updateLocationPin
被调用时我如何更新绘制的圆圈?我可能应该事先指出这一点,但我是一个完全的初学者,试图通过做一些 self-coding 来学习,如果有人指出我可能遗漏的任何问题或不正确的代码,我们将不胜感激。提前致谢,祝所有阅读者圣诞快乐。
试试这个:
Color _newColor = Colors.red;
void updateLocationPin(LocationData newLocalData, Uint8List imageData){
LatLng latLng = LatLng(newLocalData.latitude!, newLocalData.longitude!);
this.setState(() {
/* marker = Marker(
markerId: MarkerId("home"),
position: latLng,
rotation: 0.5,
draggable: false,
flat: true,
zIndex: 2,
anchor: Offset(0.5, 0.5),
icon: BitmapDescriptor.fromBytes(imageData)
);*/
xPosition = latLng.longitude;
yPosition = latLng.latitude;
_newColor = Colors.blue;
ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text("Position: ${xPosition}, ${yPosition}"), duration: Duration(milliseconds: 5000), ), );
});
}
@override
Widget build(BuildContext context) {
var dpr = MediaQuery.of(context).devicePixelRatio;
return Scaffold(
body: SafeArea(
child: Stack(
children: [
GestureDetector(
child: InteractiveViewer(
transformationController: controller,
constrained: false,
minScale: 0.1,
maxScale: 1.0,
child: Stack(children: [
Image.asset(
"assets/images/$level",
),
Positioned(
left: xPosition,
top: yPosition,
child: Container(
width: 50.0 / dpr,
height: 50.0 / dpr,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: _newColor,
),
),
),
]),
boundaryMargin: EdgeInsets.all(100),
),
),
],
),
),
);
}