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!)