Skip to content

Commit 39b8612

Browse files
committed
feat: input text clearing
1 parent f77d16c commit 39b8612

File tree

5 files changed

+49
-0
lines changed

5 files changed

+49
-0
lines changed

lib/presentation/home/bloc/home_bloc.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
2424
),
2525
),
2626
) {
27+
on<HomeTextCleared>(_onHomeTextCleared);
2728
on<HomeTextChanged>(
2829
_onHomeTextChanged,
2930
transformer: restartableDebounce(const Duration(milliseconds: 500)),
@@ -33,6 +34,14 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
3334
final HomeRepository homeRepository;
3435
final SettingsBloc settingsBloc;
3536

37+
void _onHomeTextCleared(
38+
HomeTextCleared event,
39+
Emitter<HomeState> emit,
40+
) {
41+
event.textController.clear();
42+
emit(state.empty());
43+
}
44+
3645
Future<void> _onHomeTextChanged(
3746
HomeTextChanged event,
3847
Emitter<HomeState> emit,

lib/presentation/home/bloc/home_event.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ sealed class HomeEvent extends Equatable {
88
List<Object?> get props => [];
99
}
1010

11+
final class HomeTextCleared extends HomeEvent {
12+
const HomeTextCleared({required this.textController});
13+
final TextEditingController textController;
14+
15+
@override
16+
List<Object?> get props => [textController];
17+
}
18+
1119
final class HomeTextChanged extends HomeEvent {
1220
const HomeTextChanged({required this.sourceText});
1321

lib/presentation/home/view/home_page.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
12
import 'package:flutter/material.dart';
23
import 'package:flutter_bloc/flutter_bloc.dart';
34
import 'package:gap/gap.dart';
45
import 'package:qack/constants/constants.dart';
56
import 'package:qack/layout/layout_handler.dart';
67
import 'package:qack/presentation/home/bloc/home_bloc.dart';
78
import 'package:qack/presentation/home/components/components.dart';
9+
import 'package:qack/theme/theme.dart';
810
import 'package:qack/widgets/input/input.dart';
911

1012
class HomePage extends StatelessWidget {
@@ -40,6 +42,9 @@ class HomeView extends StatelessWidget {
4042

4143
@override
4244
Widget build(BuildContext context) {
45+
const theme = LightTheme();
46+
final textController = TextEditingController();
47+
4348
return Scaffold(
4449
body: SafeArea(
4550
child: CustomScrollView(
@@ -51,6 +56,25 @@ class HomeView extends StatelessWidget {
5156
Gap(topContentPadding),
5257
const AppSearchBar(),
5358
InputText(
59+
controller: textController,
60+
suffix: InkWell(
61+
customBorder: RoundedRectangleBorder(
62+
borderRadius: BorderRadius.circular(8),
63+
),
64+
onTap: () {
65+
textController.clear();
66+
context
67+
.read<HomeBloc>()
68+
.add(const HomeTextChanged(sourceText: ''));
69+
},
70+
child: Padding(
71+
padding: const EdgeInsets.all(8),
72+
child: Icon(
73+
EvaIcons.closeSquareOutline,
74+
color: theme.inputTextThemeData.iconColor,
75+
),
76+
),
77+
),
5478
maxLength: 6000,
5579
minLines: 5,
5680
maxLines: 5,

lib/presentation/landing/view/landing_page.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
33
import 'package:qack/layout/layout_handler.dart';
4+
import 'package:qack/presentation/history/view/history_page.dart';
45
import 'package:qack/presentation/home/view/home_page.dart';
56
import 'package:qack/presentation/landing/components/components.dart';
67
import 'package:qack/presentation/settings/view/settings_page.dart';
@@ -33,6 +34,8 @@ class _MobileLandingPageState extends State<MobileLandingPage> {
3334
switch (state.selectedPage) {
3435
case SelectedPage.home:
3536
return const HomePage();
37+
case SelectedPage.history:
38+
return const HistoryPage();
3639
case SelectedPage.settings:
3740
return const SettingsPage();
3841
}
@@ -59,6 +62,8 @@ class _TabletLandingPageState extends State<TabletLandingPage> {
5962
switch (state.selectedPage) {
6063
case SelectedPage.home:
6164
return const HomePage();
65+
case SelectedPage.history:
66+
return const HistoryPage();
6267
case SelectedPage.settings:
6368
return const SettingsPage();
6469
}

lib/widgets/input/input_text.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class InputText extends StatelessWidget {
1818
this.errorStyle,
1919
this.prefix,
2020
this.prefixIcon,
21+
this.suffix,
2122
this.suffixIcon,
2223
this.prefixIconConstraints,
2324
this.suffixIconConstraints,
@@ -46,6 +47,7 @@ class InputText extends StatelessWidget {
4647

4748
final Widget? prefix;
4849
final Widget? prefixIcon;
50+
final Widget? suffix;
4951
final Widget? suffixIcon;
5052

5153
final BoxConstraints? prefixIconConstraints;
@@ -96,6 +98,7 @@ class InputText extends StatelessWidget {
9698
child: prefixIcon!,
9799
)
98100
: null,
101+
suffix: suffix,
99102
suffixIcon: suffixIcon != null
100103
? IconTheme(
101104
data: IconThemeData(color: inputTextTheme.iconColor),

0 commit comments

Comments
 (0)