Flutter 谷歌地图在SliverAppBar中落后
我正在将谷歌地图小部件添加到SliverAppBar,当我滚动此视图时,动画开始滞后。你能解释一下为什么这个动画滞后,以及如何解决这个问题吗 我尝试使用SingleTickerProviderStateMixin使动画更平滑,但仍然没有结果Flutter 谷歌地图在SliverAppBar中落后,flutter,dart,Flutter,Dart,我正在将谷歌地图小部件添加到SliverAppBar,当我滚动此视图时,动画开始滞后。你能解释一下为什么这个动画滞后,以及如何解决这个问题吗 我尝试使用SingleTickerProviderStateMixin使动画更平滑,但仍然没有结果 class AnimatedGoogleMaps extends StatefulWidget { const AnimatedGoogleMaps({ Key key, @required CameraPosition kGoogleP
class AnimatedGoogleMaps extends StatefulWidget {
const AnimatedGoogleMaps({
Key key,
@required CameraPosition kGooglePlex,
@required Completer<GoogleMapController> controller,
})
: _kGooglePlex = kGooglePlex,
_controller = controller,
super(key: key);
final CameraPosition _kGooglePlex;
final Completer<GoogleMapController> _controller;
@override
_AnimatedGoogleMapsState createState() =>
_AnimatedGoogleMapsState();
}
class _AnimatedGoogleMapsState extends State<AnimatedGoogleMaps>
with SingleTickerProviderStateMixin {
AnimationController animation;
@override
void initState() {
super.initState();
animation = AnimationController(
vsync: this,
duration: Duration(seconds: 10),
);
animation.addListener(() {
this.setState(() {});
});
}
@override
void dispose() {
animation.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return GoogleMap(
mapType: MapType.normal,
initialCameraPosition: PageStateProvider
.getInstance()
.position ??
widget._kGooglePlex,
gestureRecognizers: Set()
..add(Factory<VerticalDragGestureRecognizer>(
() => VerticalDragGestureRecognizer())),
zoomGesturesEnabled: true,
onMapCreated: (GoogleMapController controller) {
widget._controller.complete(controller);
},
);
}
}
class AnimatedGoogleMaps扩展StatefulWidget{
常量动画谷歌地图({
关键点,
@所需摄像机位置kGooglePlex,
@所需的完井器控制器,
})
:_kGooglePlex=kGooglePlex,
_控制器=控制器,
超级(键:键);
最终摄像机位置_kGooglePlex;
最终完井器-控制器;
@凌驾
_AnimatedGoogleMapsState createState()=>
_AnimatedGoogleMapsState();
}
类_AnimatedGoogleMapsState扩展状态
使用SingleTickerProviderStateMixin{
动画控制器动画;
@凌驾
void initState(){
super.initState();
动画=动画控制器(
vsync:这个,,
持续时间:持续时间(秒数:10),
);
animation.addListener(){
this.setState((){});
});
}
@凌驾
无效处置(){
dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回谷歌地图(
mapType:mapType.normal,
initialCameraPosition:PageStateProvider
.getInstance()
.职位??
小部件。\u kGooglePlex,
手势识别器:Set()
…添加(工厂)(
()=>VerticalDraggesturererecognizer()),
zoomGesturesEnabled:对,
onMapCreated:(谷歌地图控制器){
控件。\u controller.complete(控制器);
},
);
}
}
class MainHomeViewStateUi扩展了MainHomeViewState
使用TickerProviderStateMixin{
int zoomLevel=0;
整数像素比率=1;
@凌驾
AppBar buildAppBar(){
返回null;
}
Completer _controller=Completer();
滚动控制器滚动控制器;
@凌驾
void initState(){
super.initState();
loadPosition();
}
静态最终摄像机位置_kGooglePlex=摄像机位置(
目标:拉丁美洲(59.4376129,24.7396893),
缩放:14.4746,
);
小部件构建体(构建上下文){
返回脚手架(
正文:安全区(
子:容器(
子:自定义滚动视图(
条子:[
滑杆(
扩展高度:MediaQuery
.of(上下文)
.尺寸
.高度-350.0,
浮动:假,
错,,
flexibleSpace:容器(
孩子:ClipRect(
子:堆栈(
儿童:[
动画谷歌地图(
kGooglePlex:_kGooglePlex,
控制器:_控制器),
定位(
前15名,
左:15,
子:容器(
宽度:MediaQuery
.of(上下文)
.尺寸
.宽度-30,
子项:搜索栏(),
)),
],
),
),
),
),
银表(
委托:SliverChildListDelegate(
[
容器(
身高:280,
子项:转盘Withindicator(),
),
AdItemsList(项目:imgList),
],
),
),
],
),
),
));
}
}
您是否解决了此延迟问题?
class MainHomeViewStateUi extends MainHomeViewState
with TickerProviderStateMixin {
int zoomLevel = 0;
int pixelRatio = 1;
@override
AppBar buildAppBar() {
return null;
}
Completer<GoogleMapController> _controller = Completer();
ScrollController scrollController;
@override
void initState() {
super.initState();
loadPosition();
}
static final CameraPosition _kGooglePlex = CameraPosition(
target: LatLng(59.4376129, 24.7396893),
zoom: 14.4746,
);
Widget buildBody(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Container(
child: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
expandedHeight: MediaQuery
.of(context)
.size
.height - 350.0,
floating: false,
pinned: false,
flexibleSpace: Container(
child: ClipRect(
child: Stack(
children: <Widget>[
AnimatedGoogleMaps(
kGooglePlex: _kGooglePlex,
controller: _controller),
Positioned(
top: 15,
left: 15,
child: Container(
width: MediaQuery
.of(context)
.size
.width - 30,
child: SearchBar(),
)),
],
),
),
),
),
SliverList(
delegate: SliverChildListDelegate(
[
Container(
height: 280,
child: CarouselWithIndicator(),
),
AdItemsList(items: imgList),
],
),
),
],
),
),
));
}
}