Flutter 谷歌地图在SliverAppBar中落后

Flutter 谷歌地图在SliverAppBar中落后,flutter,dart,Flutter,Dart,我正在将谷歌地图小部件添加到SliverAppBar,当我滚动此视图时,动画开始滞后。你能解释一下为什么这个动画滞后,以及如何解决这个问题吗 我尝试使用SingleTickerProviderStateMixin使动画更平滑,但仍然没有结果 class AnimatedGoogleMaps extends StatefulWidget { const AnimatedGoogleMaps({ Key key, @required CameraPosition kGoogleP

我正在将谷歌地图小部件添加到SliverAppBar,当我滚动此视图时,动画开始滞后。你能解释一下为什么这个动画滞后,以及如何解决这个问题吗

我尝试使用SingleTickerProviderStateMixin使动画更平滑,但仍然没有结果

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),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ));
  }
}