ui: Migrate [AddContactPage] to Bloc

This commit is contained in:
2022-03-26 18:01:15 +01:00
parent 7a999d40d8
commit 489ef364c1
13 changed files with 221 additions and 80 deletions

View File

@@ -1,52 +1,25 @@
/*
import "package:moxxyv2/ui/constants.dart";
import "package:moxxyv2/ui/helpers.dart";
import "package:moxxyv2/ui/widgets/topbar.dart";
import "package:moxxyv2/ui/widgets/textfield.dart";
import "package:moxxyv2/ui/widgets/button.dart";
import "package:moxxyv2/ui/constants.dart";
import "package:moxxyv2/ui/helpers.dart";
import "package:moxxyv2/ui/redux/state.dart";
import "package:moxxyv2/ui/redux/addcontact/actions.dart";
import "package:moxxyv2/ui/bloc/addcontact_bloc.dart";
import "package:flutter/material.dart";
import "package:flutter_redux/flutter_redux.dart";
import "package:flutter_bloc/flutter_bloc.dart";
class _AddContactPageViewModel {
final bool doingWork;
final String? errorText;
final void Function(String jid) addContact;
final void Function() resetErrors;
const _AddContactPageViewModel({ required this.addContact, required this.doingWork, required this.resetErrors, this.errorText });
}
// TODO: Reset the errorText using WillPopScope
class AddContactPage extends StatelessWidget {
final TextEditingController _controller;
AddContactPage({ Key? key }) : _controller = TextEditingController(), super(key: key);
void _addToRoster(BuildContext context, _AddContactPageViewModel viewModel) {
if (_controller.text.isEmpty) return;
viewModel.resetErrors();
viewModel.addContact(_controller.text);
}
const AddContactPage({ Key? key }) : super(key: key);
@override
Widget build(BuildContext context) {
return StoreConnector<MoxxyState, _AddContactPageViewModel>(
converter: (store) => _AddContactPageViewModel(
doingWork: store.state.globalState.doingWork,
errorText: store.state.addContactErrorText,
addContact: (jid) => store.dispatch(AddContactAction(jid: jid)),
resetErrors: () => store.dispatch(AddContactSetErrorLogin())
),
builder: (context, viewModel) => Scaffold(
return BlocBuilder<AddContactBloc, AddContactState>(
builder: (context, state) => Scaffold(
appBar: BorderlessTopbar.simple(title: "Add new contact"),
body: Column(
children: [
Visibility(
visible: viewModel.doingWork,
visible: state.working,
child: const LinearProgressIndicator(value: null)
),
@@ -54,11 +27,14 @@ class AddContactPage extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: paddingVeryLarge).add(const EdgeInsets.only(top: 8.0)),
child: CustomTextField(
maxLines: 1,
controller: _controller,
labelText: "XMPP-Address",
onChanged: (value) => context.read<AddContactBloc>().add(
JidChangedEvent(value)
),
enabled: !state.working,
cornerRadius: textfieldRadiusRegular,
contentPadding: const EdgeInsets.only(top: 4.0, bottom: 4.0, left: 8.0, right: 8.0),
errorText: viewModel.errorText,
errorText: state.jidError,
suffixIcon: IconButton(
icon: const Icon(Icons.qr_code),
onPressed: () {
@@ -84,7 +60,7 @@ class AddContactPage extends StatelessWidget {
color: Colors.purple,
child: const Text("Add to contacts"),
cornerRadius: 32.0,
onTap: () => _addToRoster(context, viewModel)
onTap: () => context.read<AddContactBloc>().add(AddedContactEvent())
)
)
]
@@ -96,4 +72,3 @@ class AddContactPage extends StatelessWidget {
);
}
}
*/