通过按钮颤动改变绘制圆的半径
Flutter change radius of drawed circle by buttons
作为 link 文章的后续。我正在开发一个 Flutter 项目,我想通过两个按钮增加圆的半径。
现在我已经部分成功了,但效果还不是很好。我真的不知道如何解释这个,但我会尽力而为:
发生的事情是,我一按减号按钮,它就变小了一步。如果我再次按下减号按钮,它会再次变小一点。但是一旦我再次按下加号,它就会保持相同的大小,直到我通过最高的数字。
一个video的问题如果没有解释清楚。
也许有人知道如何处理这个?
代码(去掉了不必要的代码):
class _AddRayPageState extends State<AddRayPage> {
List<Marker> myMarker = [];
final Set<Circle> circle = {};
GoogleMapController mapController;
int _n = 8;
LatLng startLoc = LatLng(52.0907374, 5.1214201);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Toevoegen'),
),
body: Stack(children: <Widget>[
GoogleMap(
onMapCreated: onMapCreated,
markers: Set.from(myMarker),
initialCameraPosition: CameraPosition(target: startLoc, zoom: 8),
circles: circle,
),
]),
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(left: 40.0),
child: Container(
child: Row(
children: <Widget>[
Container(
width: 40.0,
height: 40.0,
child: new FloatingActionButton(
heroTag: "btnAdd",
onPressed: add,
child: new Icon(
Icons.add,
color: Colors.black,
size: 30,
),
backgroundColor: Colors.white,
),
),
new Text('$_n', style: new TextStyle(fontSize: 40.0)),
Container(
width: 40.0,
height: 40.0,
child: new FloatingActionButton(
heroTag: "btnMinus",
onPressed: minus,
child: new Icon(
const IconData(0xe15b, fontFamily: 'MaterialIcons'),
color: Colors.black,
size: 30,
),
backgroundColor: Colors.white,
),
),
],
),
),
),
],
),
);
}
void add() {
setState(() {
_n++;
});
addRadiusToMap(_n);
}
void minus() {
setState(() {
if (_n != 1) _n--;
});
addRadiusToMap(_n);
}
void addRadiusToMap(radius) {
setState(() {
double reciprocal(double d) => 1000 * d;
circle.add(Circle(
circleId: CircleId("1"),
center: startLoc,
radius: reciprocal(radius.toDouble()),
));
});
}
circle 是一个 Set,一个 Set 不允许重复的对象,在 addRadiusToMap 中你添加了一个新的 Circle 对象,但是如果有一个具有相同字段的前一个对象(7 和 8 已经存在)它不会'不要添加它,我认为小部件 GoogleMaps 没有看到 Set<Circle>
中的变化并且没有 update/animate 新的 Circle,现在尝试在之前添加 circle.clear()
添加如果添加 return false(returns false 且集合未更改)
void add() {
setState(() {
_n++;
addRadiusToMap(_n);
});
}
void minus() {
if (_n != 1)
setState(() {
_n--;
addRadiusToMap(_n);
});
}
void addRadiusToMap(radius) {
//No purpose in having 2 setState
double reciprocal(double d) => 1000 * d;
circle.clear(); //Maybe clear the set before adding to avoid repeated values
circle.add(Circle(
circleId: CircleId("1"),
center: startLoc,
radius: reciprocal(radius.toDouble()),
));
}
我不太确定(我没有使用过 Google 地图包)Set<Circle>
的目的是什么,但据我了解代码,Set 不是真的更新了,因为你已经有了这些值
作为
现在我已经部分成功了,但效果还不是很好。我真的不知道如何解释这个,但我会尽力而为:
发生的事情是,我一按减号按钮,它就变小了一步。如果我再次按下减号按钮,它会再次变小一点。但是一旦我再次按下加号,它就会保持相同的大小,直到我通过最高的数字。
一个video的问题如果没有解释清楚。
也许有人知道如何处理这个?
代码(去掉了不必要的代码):
class _AddRayPageState extends State<AddRayPage> {
List<Marker> myMarker = [];
final Set<Circle> circle = {};
GoogleMapController mapController;
int _n = 8;
LatLng startLoc = LatLng(52.0907374, 5.1214201);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Toevoegen'),
),
body: Stack(children: <Widget>[
GoogleMap(
onMapCreated: onMapCreated,
markers: Set.from(myMarker),
initialCameraPosition: CameraPosition(target: startLoc, zoom: 8),
circles: circle,
),
]),
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(left: 40.0),
child: Container(
child: Row(
children: <Widget>[
Container(
width: 40.0,
height: 40.0,
child: new FloatingActionButton(
heroTag: "btnAdd",
onPressed: add,
child: new Icon(
Icons.add,
color: Colors.black,
size: 30,
),
backgroundColor: Colors.white,
),
),
new Text('$_n', style: new TextStyle(fontSize: 40.0)),
Container(
width: 40.0,
height: 40.0,
child: new FloatingActionButton(
heroTag: "btnMinus",
onPressed: minus,
child: new Icon(
const IconData(0xe15b, fontFamily: 'MaterialIcons'),
color: Colors.black,
size: 30,
),
backgroundColor: Colors.white,
),
),
],
),
),
),
],
),
);
}
void add() {
setState(() {
_n++;
});
addRadiusToMap(_n);
}
void minus() {
setState(() {
if (_n != 1) _n--;
});
addRadiusToMap(_n);
}
void addRadiusToMap(radius) {
setState(() {
double reciprocal(double d) => 1000 * d;
circle.add(Circle(
circleId: CircleId("1"),
center: startLoc,
radius: reciprocal(radius.toDouble()),
));
});
}
circle 是一个 Set,一个 Set 不允许重复的对象,在 addRadiusToMap 中你添加了一个新的 Circle 对象,但是如果有一个具有相同字段的前一个对象(7 和 8 已经存在)它不会'不要添加它,我认为小部件 GoogleMaps 没有看到 Set<Circle>
中的变化并且没有 update/animate 新的 Circle,现在尝试在之前添加 circle.clear()
添加如果添加 return false(returns false 且集合未更改)
void add() {
setState(() {
_n++;
addRadiusToMap(_n);
});
}
void minus() {
if (_n != 1)
setState(() {
_n--;
addRadiusToMap(_n);
});
}
void addRadiusToMap(radius) {
//No purpose in having 2 setState
double reciprocal(double d) => 1000 * d;
circle.clear(); //Maybe clear the set before adding to avoid repeated values
circle.add(Circle(
circleId: CircleId("1"),
center: startLoc,
radius: reciprocal(radius.toDouble()),
));
}
我不太确定(我没有使用过 Google 地图包)Set<Circle>
的目的是什么,但据我了解代码,Set 不是真的更新了,因为你已经有了这些值