Aidra Connect 10.0.2+16
Aidra Connect Mobile Application
Loading...
Searching...
No Matches
faq_dialog.dart
Go to the documentation of this file.
1import 'package:connect/core/localization/app_localizations.dart';
2
3import '/core/ui/screens/views/faild_to_fetch_data_view.dart';
4import '/features/settings/domain/entities/faq_entity.dart';
5import '/features/settings/presentation/logic/faq_cubit/faq_cubit.dart';
6import 'package:flutter/material.dart';
7import 'package:flutter_bloc/flutter_bloc.dart';
8import 'package:flutter_screenutil/flutter_screenutil.dart';
9
11 const FaqDialog({super.key});
12
13 @override
14 State<FaqDialog> createState() => _FaqDialogState();
15}
16
17class _FaqDialogState extends State<FaqDialog> {
18 @override
19 void initState() {
21 super.initState();
22 }
25 context.read<FaqCubit>().loadFaq();
26 }
27
28 @override
29 Widget build(BuildContext context) {
30 return Column(
31 mainAxisSize: MainAxisSize.min,
32 children: [
33 BlocBuilder<FaqCubit, FaqState>(
34 builder: (context, state) {
35 if (state is FaqLoadingSuccessfully) {
36 return FAQListWidget(faqs: state.faqs);
37 } else if (state is FaqLoadingFailure) {
38 return FailedToFetchDataView(
39 onRetry: () {
40 _loadfaqs();
41 },
42 padding: EdgeInsets.zero,
43 failureMessage: state.failure.message,
44 );
45 } else {
46 return Center(
47 child: Padding(
48 padding: EdgeInsets.all(15.sp),
49 child: SizedBox(
50 height: 30.sp,
51 width: 30.sp,
52 child: const CircularProgressIndicator(),
53 ),
54 ),
55 );
56 }
57 },
58 ),
59 ],
60 );
61 }
62}
63
64class FAQListWidget extends StatelessWidget {
65 final List<FAQEntity> faqs;
66
67 const FAQListWidget({super.key, required this.faqs});
68
69 @override
70 Widget build(BuildContext context) {
71 return faqs.isEmpty
72 ? Padding(
73 padding: EdgeInsets.all(15.0),
74 child: Center(
75 child: Text(
76 AppLocalizations.of(context)
77 .translate('Nothing to show here right now'),
78 style: Theme.of(context).textTheme.bodySmall,
79 ),
80 ),
81 )
82 : ListView.separated(
83 shrinkWrap: true,
84 itemCount: faqs.length,
85 separatorBuilder: (context, index) => Divider(
86 height: 10.sp,
87 thickness: 0.7,
88 ),
89 itemBuilder: (context, index) {
90 final faq = faqs[index];
91 return FAQItemWidget(faq: faq);
92 },
93 );
94 }
95}
96
97class FAQItemWidget extends StatelessWidget {
99
100 const FAQItemWidget({super.key, required this.faq});
101
102 @override
103 Widget build(BuildContext context) {
104 return Theme(
105 data: Theme.of(context).copyWith(dividerColor: Colors.transparent),
106 child: ExpansionTile(
107 title: Text(
108 faq.name ??
109 AppLocalizations.of(context).translate('No name available'),
110 style: Theme.of(context).textTheme.bodySmall,
111 ),
112 children: [
113 Padding(
114 padding: EdgeInsets.symmetric(horizontal: 14.sp, vertical: 5.sp),
115 child: Opacity(
116 opacity: 0.7,
117 child: Text(
118 faq.answer ??
119 AppLocalizations.of(context)
120 .translate('No answer available'),
121 style: Theme.of(context).textTheme.bodySmall,
122 ),
123 ),
124 ),
125 ],
126 ),
127 );
128 }
129}
AppLocalizations(this.locale)
String translate(String key)
static AppLocalizations of(BuildContext context)
const FaqDialog({super.key})
override State< FaqDialog > createState()
final List< FAQEntity > faqs
final Widget child
const FAQListWidget({super.key, required this.faqs})
override Widget build(BuildContext context)
final Widget child
final EdgeInsets padding
override void initState()
const FaqDialog({super.key})
_loadfaqs()
const FAQItemWidget({super.key, required this.faq})
class FAQListWidget extends StatelessWidget faq
const FaqLoadingFailure({required this.failure})
override Widget build(BuildContext context)
final String title