Skip to content
Snippets Groups Projects
pay_form.dart 5.89 KiB
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

import '../../data/models/payment_cubit.dart';
import '../../data/models/payment_state.dart';
import '../../data/models/transaction_cubit.dart';
import '../../g1/api.dart';
import '../logger.dart';
import '../ui_helpers.dart';
import 'g1_textfield.dart';

class PayForm extends StatefulWidget {
  const PayForm({super.key});

  @override
  State<PayForm> createState() => _PayFormState();
}

class _PayFormState extends State<PayForm> {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  final TextEditingController _commentController = TextEditingController();

//  static final RegExp _englishRegExp = RegExp('^[\u0000-\u007F]*\$');
  // static final RegExp _englishRegExp = RegExp(r'^[a-zA-Z0-9\s.,;:!?()\-]*$');

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<PaymentCubit, PaymentState>(
        builder: (BuildContext context, PaymentState state) {
      if (state.comment != null && _commentController.text != state.comment) {
        _commentController.text = state.comment;
      }
      return Form(
        key: _formKey,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            const G1PayAmountField(),
            const SizedBox(height: 10.0),
            TextFormField(
              controller: _commentController,
              onChanged: (String? value) {
                final bool? validate = _commentValidate();
                if (validate != null &&
                    value != null &&
                    value.isNotEmpty &&
                    validate) {
                  context.read<PaymentCubit>().setComment(value);
                }
              },
              decoration: InputDecoration(
                labelText: tr('g1_form_pay_desc'),
                hintText: tr('g1_form_pay_hint'),
                border: const OutlineInputBorder(),
              ),
              validator: (String? value) {
                if (value != null && !basicEnglishCharsRegExp.hasMatch(value)) {
                  return tr('valid_comment');
                }
                return null;
              },
              maxLines: null,
            ),
            const SizedBox(height: 10.0),
            ElevatedButton(
              onPressed: !state.canBeSent() ||
                      _commentValidate() == false ||
                      state.amount == null ||
                      !_weHaveBalance(context, state.amount!)