Untitled

mail@pastecode.io avatar
unknown
dart
a year ago
6.7 kB
3
Indexable
Never
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:go_router/go_router.dart';
import 'package:get_it/get_it.dart';
import 'package:keen_app_consumer/blocs/rating/rating_bloc.dart';
import 'package:keen_app_consumer/config/app_config.dart';
import 'package:keen_app_consumer/di/modules/base_scope/router/module_router.dart';
import 'package:keen_core/keen_core.dart';
import 'package:keen_app_consumer/di/modules/base_scope/router/webview/module_webview_route.dart';

class TransactionHistoryDetailsFeedbackPage extends StatefulWidget {
  const TransactionHistoryDetailsFeedbackPage({
    required this.transactionId,
    required this.sessionType,
    super.key,
  });
  final int transactionId;
  final int sessionType;

  @override
  State<TransactionHistoryDetailsFeedbackPage> createState() =>
      _TransactionHistoryDetailsFeedbackPageState();
}

class _TransactionHistoryDetailsFeedbackPageState
    extends State<TransactionHistoryDetailsFeedbackPage> {
  bool _isEnabled = false;
  String? _comment;
  late final TextEditingController controller;
  static const int _kMaxCharacters = 700;
  @override
  void initState() {
    controller = TextEditingController();
    super.initState();
  }

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

  @override
  Widget build(BuildContext context) {
    final appLocalizations = AppLocalizations.of(context)!;
    return Column(
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        const SizedBox(
          height: 20,
        ),
        Text(
          appLocalizations.technical_problems,
          style: context.body1Bold,
        ),
        const SizedBox(
          height: 20,
        ),
        Text(
          appLocalizations.tell_us_what_went_wrong,
          style: context.body1,
        ),
        const SizedBox(
          height: 20,
        ),
        Align(
          alignment: Alignment.centerLeft,
          child: Padding(
            padding: EdgeInsets.fromLTRB(20, 5, 5, 0),
            child: Text(
              appLocalizations.comments,
              style: context.itemGreyTitle,
            ),
          ),
        ),
        const SizedBox(
          height: 5,
        ),
        Padding(
          padding: const EdgeInsets.symmetric(
            vertical: 8.0,
          ),
          child: Container(
            margin: const EdgeInsets.fromLTRB(20, 0, 20, 10),
            child: _FeedbackTextField(
                controller: controller,
                maxLenght: _kMaxCharacters,
                onChanged: (comment) {
                  setState(() {
                    _comment = comment;
                    _isEnabled = comment.isNotEmpty;
                    setState(() {});
                  });
                }),
          ),
          /*child: TextField(
            maxLines: 8,
            onChanged: (comment) {
              _comment = comment;
              _isEnabled = comment.isNotEmpty;
              setState(() {});
            },
            decoration: InputDecoration.collapsed(
              hintText: appLocalizations.commments_text_area,
            ),
          ),*/
        ),
        const Spacer(),
        Align(
          alignment: Alignment.bottomCenter,
          child: Container(
            width: double.infinity,
            margin: const EdgeInsets.all(20),
            child: PrimaryButton(
              text: appLocalizations.send_comments,
              enable: _isEnabled,
              onPressed: () {
                context.read<RatingBloc>().add(
                      NegativeRatingEvent(
                        sessionId: widget.transactionId,
                        sessionType: widget.sessionType,
                        comment: _comment,
                      ),
                    );
                context.pop();
              },
            ),
          ),
        ),
        const SizedBox(
          height: 10,
        ),
        const _PolicyTextButtons(),
        /* Row(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            Text(appLocalizations.comments_policy),
            Text(appLocalizations.user_agreement),
          ],
        ),*/
        const SizedBox(
          height: 10,
        ),
      ],
    );
  }
}

/*class _PolicyTextButtons extends StatelessWidget {
  const _PolicyTextButtons();
}*/

class _FeedbackTextField extends StatelessWidget {
  const _FeedbackTextField({
    required this.controller,
    required this.onChanged,
    required this.maxLenght,
  });
  final TextEditingController controller;
  final Function(String) onChanged;
  final int maxLenght;
  @override
  Widget build(BuildContext context) {
    return TextFormField(
      onChanged: onChanged,
      controller: controller,
      keyboardType: TextInputType.multiline,
      inputFormatters: [LengthLimitingTextInputFormatter(maxLenght)],
      decoration: InputDecoration(
          counterText: '${controller.text.length}/$maxLenght',
          hintText: AppLocalizations.of(context)!
              .technical_issue_text_field_placeholder),
      minLines: 10,
      maxLines: 35,
    );
  }
}

class _PolicyTextButtons extends StatelessWidget {
  const _PolicyTextButtons();

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        TextButton(
          onPressed: () => context.pushNamed(webViewRouteName,
              extra: WebViewExtra(
                title: AppLocalizations.of(context)!.user_agreement_link_text,
                url:
                    "https://help.keen.com/hc/en-us/articles/360060613533-Feedback-Policy",
              )),
          child: Text(AppLocalizations.of(context)!.feedback_policy),
        ),
        const SizedBox(width: 5),
        CircleAvatar(
          backgroundColor: context.keenColors.primary.withOpacity(.7),
          maxRadius: 2,
        ),
        const SizedBox(width: 5),
        TextButton(
          onPressed: () => context.pushNamed(webViewRouteName,
              extra: WebViewExtra(
                title: AppLocalizations.of(context)!.user_agreement_link_text,
                url: GetIt.instance<AppConfig>()
                    .localizedLinks
                    .userAgreement
                    .replaceAll('%s', 'en-us'),
              )),
          child: Text(AppLocalizations.of(context)!.user_agreement_link_text),
        )
      ],
    );
  }
}