maps_page_view (refactors)

 avatar
unknown
dart
5 months ago
3.7 kB
1
Indexable
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:provider/provider.dart';

import '../../../../core/common/app/providers/charge_stations_provider.dart';
import '../../../../core/common/app/providers/home_provider.dart';
import '../../../../core/common/views/loading_view.dart';
import '../bloc/find_bloc.dart';

import 'favorite_page_view.dart';
import 'list_page_view.dart';

class MapsPageView extends StatelessWidget {
  const MapsPageView({
    super.key,
    required this.tabController,
    required this.gController,
    required this.state,
  });

  final TabController tabController;
  final Completer<GoogleMapController> gController;
  final FindState state;

  double calculateMarkerSize(double zoom) {
    if (zoom <= 10) {
      return 20.0;
    } else if (zoom <= 15) {
      return 30.0;
    } else {
      return 40.0;
    }
  }

  // Set<Marker> _markers = {};
  @override
  Widget build(BuildContext context) {
    return Consumer<ChargeStationsProvider>(
        builder: (_, chargerStationProvider, __) {
      return SizedBox(
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.height,
        child: TabBarView(
          controller: tabController,
          physics: const NeverScrollableScrollPhysics(),
          children: [
            (chargerStationProvider.chargeStations != null)
                ? ListPageView(
                    chargeStations: chargerStationProvider.chargeStations!,
                  )
                : const LoadingView(),
            Consumer<HomeProvider>(builder: (_, homeProvider, __) {
              return state is FindLoading || state is! MarkersLoaded
                  ? const LoadingView()
                  : GoogleMap(
                      mapType: MapType.normal,
                      padding: EdgeInsets.only(
                          top: MediaQuery.of(context).size.height * 0.2),
                      myLocationButtonEnabled: true,
                      myLocationEnabled: true,
                      initialCameraPosition: CameraPosition(
                        target: LatLng(homeProvider.position!.latitude,
                            homeProvider.position!.longitude),
                        zoom: 14.4746,
                      ),
                      onMapCreated: (GoogleMapController controller) async {
                        if (!gController.isCompleted) {
                          gController.complete(controller);
                        }

                        WidgetsBinding.instance.addPostFrameCallback((_) async {
                          for (var chargeStation
                              in chargerStationProvider.chargeStations!) {
                            await controller.showMarkerInfoWindow(
                                MarkerId(chargeStation.id));
                          }
                        });
                      },
                      markers: chargerStationProvider.markers,
                    );
            }),
            (chargerStationProvider.favoriteChargeStations != null)
                ? (chargerStationProvider.favoriteChargeStations!.isNotEmpty ==
                        true)
                    ? FavoritePageView(
                        favoriteChargeStations:
                            chargerStationProvider.favoriteChargeStations!,
                      )
                    : const Center(child: Text("No favorite charge stations"))
                : const LoadingView(),
          ],
        ),
      );
    });
  }
}
Editor is loading...
Leave a Comment