maps_screen (view)

 avatar
unknown
dart
5 months ago
2.5 kB
2
Indexable
import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

import '../../../../core/extensions/context_extensions.dart';
import '../../../../core/utils/core_utils.dart';
import '../bloc/find_bloc.dart';
import '../refactors/maps_header.dart';
import 'package:flutter/material.dart';

import '../refactors/maps_page_view.dart';

class MapsScreen extends StatefulWidget {
  const MapsScreen({super.key});

  @override
  State<MapsScreen> createState() => _MapsScreenState();
}

class _MapsScreenState extends State<MapsScreen>
    with SingleTickerProviderStateMixin {
  late TabController tabController;
  final Completer<GoogleMapController> gController = Completer();

  @override
  void initState() {
    tabController = TabController(length: 3, vsync: this);
    tabController.addListener(() {
      setState(() {});
    });
    context.read<FindBloc>().add(const GetChargeStationsEvent());
    super.initState();
  }

  @override
  void dispose() {
    tabController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: BlocConsumer<FindBloc, FindState>(
        listener: (context, state) {
          if (state is FindError) {
            CoreUtils.showSnackBar(context, state.message);
          } else if (state is ChargeStationsLoaded) {
            context.chargeStationsProvider
                .initChargeStations(state.chargeStations);

            context.read<FindBloc>().add(LoadMarkersEvent(
                  state.chargeStations,
                ));
          } else if (state is MarkersLoaded) {
            context.chargeStationsProvider.initMarkers(state.markers);
          } else if (state is FavoriteChargeStationsLoaded) {
            context
                .read<FindBloc>()
                .add(GetFavoriteChargeStationsEvent(context.currentUser!.id));
            context.chargeStationsProvider
                .initFavoriteChargeStations(state.favoriteChargeStations);
          }
        },
        builder: (context, state) {
          return Stack(
            children: [
              MapsPageView(
                tabController: tabController,
                gController: gController,
                state: state,
              ),
              MapsHeader(controller: tabController),
            ],
          );
        },
      ),
    );
  }
}
Editor is loading...
Leave a Comment