mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-11-26 21:14:54 +00:00
99 lines
4.2 KiB
Dart
99 lines
4.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_bloc.dart';
|
|
import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_event.dart';
|
|
import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_state.dart';
|
|
import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart';
|
|
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
|
|
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
|
|
|
class RegionPage extends StatelessWidget {
|
|
const RegionPage({super.key});
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return BlocProvider(
|
|
create: (BuildContext context) => ProfileBloc()..add(RegionInitialEvent()),
|
|
child: BlocConsumer<ProfileBloc, ProfileState>(listener: (context, state) {
|
|
if (state is FailedState) {
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(
|
|
content: Text(state.errorMessage),
|
|
backgroundColor: Colors.red,
|
|
),
|
|
);
|
|
}
|
|
if (state is SaveState) {
|
|
Navigator.of(context).pop(true);
|
|
}
|
|
},
|
|
builder: (context, state) {
|
|
final profileBloc = BlocProvider.of<ProfileBloc>(context);
|
|
final regionList = state is RegionsLoadedState ? state.regions : [];
|
|
return DefaultScaffold(
|
|
padding: const EdgeInsets.all(0),
|
|
title: 'Region',
|
|
child: state is LoadingInitialState
|
|
? const Center(child: CircularProgressIndicator())
|
|
: Column(
|
|
children: [
|
|
TextFormField(
|
|
controller:profileBloc.searchController ,
|
|
onChanged: (value) {
|
|
profileBloc.add(SearchRegionEvent(query: value));
|
|
},
|
|
decoration: const InputDecoration(
|
|
prefixIcon: Icon(Icons.search),
|
|
hintText: 'Search',
|
|
fillColor: ColorsManager.textGray,
|
|
),
|
|
),
|
|
const SizedBox(height: 10),
|
|
Expanded(
|
|
child: Container(
|
|
decoration: const BoxDecoration(
|
|
color: ColorsManager.onPrimaryColor,
|
|
borderRadius: BorderRadius.only(
|
|
topLeft: Radius.circular(20),
|
|
topRight: Radius.circular(20),
|
|
),
|
|
),
|
|
child:Padding(
|
|
padding: const EdgeInsets.only(bottom: 10.0,top: 10.0,left: 15,right: 15),
|
|
child: ListView.builder(
|
|
itemCount: regionList.length,
|
|
itemBuilder: (context, index) {
|
|
return InkWell(
|
|
onTap: () {
|
|
profileBloc.add(SelectRegionEvent(val: regionList[index].id, context: context));
|
|
},
|
|
child:Column(
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.symmetric(horizontal: 10,),
|
|
child: SizedBox(
|
|
child: ListTile(
|
|
contentPadding: EdgeInsets.zero,
|
|
leading: BodyMedium(
|
|
fontSize: 15,
|
|
text: regionList[index].name,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
const Divider(color: ColorsManager.textGray), // Divider between items
|
|
],
|
|
),
|
|
);
|
|
},
|
|
)),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}));
|
|
}
|
|
}
|