Untitled

 avatar
unknown
plain_text
5 months ago
4.8 kB
3
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 '../../../../core/res/colours.dart';
import '../../../../core/res/fonts.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,
    required this.handleRefresh,
  });

  final TabController tabController;
  final Completer<GoogleMapController> gController;
  final FindState state;
  final Future<void> Function() handleRefresh;

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

  @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: [
            // List View Tab
            (chargerStationProvider.chargeStations != null &&
                    chargerStationProvider.chargeStations!.isNotEmpty)
                ? ListPageView(
                    chargeStations: (state is FilteredChargeStationsLoaded)
                        ? chargerStationProvider.filterListChargeStations!
                        : chargerStationProvider.chargeStations!,
                    handleRefresh: handleRefresh,
                  )
                : const LoadingView(),

            // Map View Tab
            Consumer<HomeProvider>(builder: (_, homeProvider, __) {
              return (state is FindLoading ||
                      (state is! MarkersLoaded &&
                          state is! OpenMapsNavigationSuccess &&
                          state is! AddFavoriteChargeStationsSuccess &&
                          state is! DeleteFavoriteChargeStationsSuccess))
                  ? 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: 16,
                      ),
                      onMapCreated: (GoogleMapController controller) async {
                        if (!gController.isCompleted) {
                          gController.complete(controller);
                        }

                        // WidgetsBinding.instance.addPostFrameCallback((_) async {
                        //   if (chargerStationProvider.markers.isNotEmpty) {
                        //     context.read<FindBloc>().add(LoadMarkersEvent(
                        //           chargerStationProvider.chargeStations!,
                        //         ));
                        //     print('Markers loaded');
                        //   }
                        // });
                      },
                      markers: chargerStationProvider.markers,
                    );
            }),

            // Favorite Tab

            (chargerStationProvider.favoriteChargeStations != null &&
                    chargerStationProvider.favoriteChargeStations!.isNotEmpty)
                ? FavoritePageView(
                    favoriteChargeStations:
                        chargerStationProvider.favoriteChargeStations!,
                    handleRefresh: handleRefresh,
                  )
                : const Center(
                    child: Text(
                      'No favorite charge stations',
                      style: TextStyle(
                          fontFamily: Fonts.poppins,
                          fontSize: 16,
                          fontWeight: FontWeight.w500,
                          color: Colours.blackColour),
                    ),
                  ),
          ],
        ),
      );
    });
  }
}
Editor is loading...
Leave a Comment