谷歌地图落后于SliverAppBar

时间:2019-07-01 06:28:23

标签: flutter dart

我将Google Maps小部件添加到SliverAppBar,并且在滚动此视图时动画开始滞后。 https://www.dropbox.com/s/mg3hg4lb7kvxsao/RPReplay_Final1561960489.mp4?dl=0您能解释一下为什么动画滞后以及如何解决吗?

我尝试使用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 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),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ));
  }
}

0 个答案:

没有答案