Untitled

 avatar
unknown
dart
5 months ago
3.4 kB
3
Indexable
// ignore_for_file: unnecessary_const

import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutter_svg/svg.dart';

import 'package:provider/provider.dart';

import '../../../../core/common/app/providers/charge_stations_provider.dart';
import '../../../../core/extensions/context_extensions.dart';
import '../../../../core/res/colours.dart';
import '../../../../core/res/media_res.dart';
import '../../domain/entities/filter.dart';
import '../bloc/find_bloc.dart';
import 'filter_dialog.dart';

class ChargerstationSearchBar extends StatefulWidget {
  final TabController tabController;

  const ChargerstationSearchBar({super.key, required this.tabController});

  @override
  State<ChargerstationSearchBar> createState() =>
      _ChargerstationSearchBarState();
}

class _ChargerstationSearchBarState extends State<ChargerstationSearchBar> {
  final TextEditingController controller = TextEditingController();

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

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.symmetric(horizontal: 16),
      margin: EdgeInsets.only(
          top: MediaQuery.of(context).size.height * 0.06, bottom: 12),
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(12),
        border: Border.all(color: Colours.searchBorder, width: 1),
        color: Colors.white,
      ),
      child: TextField(
        controller: controller,
        onChanged: (query) {
          widget.tabController.animateTo(0);
          context.read<ChargeStationsProvider>().searchChargeStations(
                query,
              );
        },
        cursorColor: Colours.secondaryColour,
        style: const TextStyle(
          fontSize: 16,
          color: Colours.blackColour,
          fontWeight: FontWeight.w400,
        ),
        decoration: InputDecoration(
          floatingLabelBehavior: FloatingLabelBehavior.never,
          contentPadding: const EdgeInsets.symmetric(vertical: 12),
          icon: const Icon(
            Icons.search,
            color: Colours.greyColour,
          ),
          suffixIcon: InkWell(
            onTap: () {
              showModalBottomSheet(
                  context: context,
                  builder: (_) => FilterDialog(
                        onFilter: (Filter filter) {
                          debugPrint(filter.toString());
                          context
                              .read<FindBloc>()
                              .add(FilterChargeStationsEvent(filter));
                        },
                      ));
            },
            child: SvgPicture.asset(
              MediaRes.filterIcon,
            ),
          ),
          suffixIconConstraints:
              const BoxConstraints(minWidth: 24, maxHeight: 24),
          labelText: 'Find Charger Station',
          labelStyle: const TextStyle(
              fontSize: 16, color: Colours.secondaryColourDisabled),
          enabledBorder: const OutlineInputBorder(
            borderSide: BorderSide(color: Colors.transparent, width: 0),
          ),
          focusedBorder: const OutlineInputBorder(
            borderSide: BorderSide(color: Colors.transparent, width: 0),
          ),
        ),
      ),
    );
  }
}
Editor is loading...
Leave a Comment