refactor: MVC settings ignore list

This commit is contained in:
Christian Pauly 2021-04-24 07:43:47 +02:00
parent 1f9f3f4210
commit f23fdccada
3 changed files with 48 additions and 33 deletions

View File

@ -22,7 +22,7 @@ import 'package:fluffychat/views/search.dart';
import 'package:fluffychat/views/ui/settings_ui.dart'; import 'package:fluffychat/views/ui/settings_ui.dart';
import 'package:fluffychat/views/settings_3pid.dart'; import 'package:fluffychat/views/settings_3pid.dart';
import 'package:fluffychat/views/device_settings.dart'; import 'package:fluffychat/views/device_settings.dart';
import 'package:fluffychat/views/ui/settings_ignore_list_ui.dart'; import 'package:fluffychat/views/settings_ignore_list.dart';
import 'package:fluffychat/views/ui/settings_multiple_emotes_ui.dart'; import 'package:fluffychat/views/ui/settings_multiple_emotes_ui.dart';
import 'package:fluffychat/views/ui/settings_notifications_ui.dart'; import 'package:fluffychat/views/ui/settings_notifications_ui.dart';
import 'package:fluffychat/views/settings_style.dart'; import 'package:fluffychat/views/settings_style.dart';

View File

@ -0,0 +1,40 @@
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:flutter/material.dart';
import 'ui/settings_ignore_list_ui.dart';
import 'widgets/matrix.dart';
class SettingsIgnoreList extends StatefulWidget {
final String initialUserId;
SettingsIgnoreList({Key key, this.initialUserId}) : super(key: key);
@override
SettingsIgnoreListController createState() => SettingsIgnoreListController();
}
class SettingsIgnoreListController extends State<SettingsIgnoreList> {
final TextEditingController controller = TextEditingController();
@override
void initState() {
super.initState();
if (widget.initialUserId != null) {
controller.text = widget.initialUserId.replaceAll('@', '');
}
}
void ignoreUser(BuildContext context) {
if (controller.text.isEmpty) return;
final userId = '@${controller.text}';
showFutureLoadingDialog(
context: context,
future: () => Matrix.of(context).client.ignoreUser(userId),
);
controller.clear();
}
@override
Widget build(BuildContext context) => SettingsIgnoreListUI(this);
}

View File

@ -5,38 +5,13 @@ import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import '../settings_ignore_list.dart';
import '../widgets/matrix.dart'; import '../widgets/matrix.dart';
class SettingsIgnoreList extends StatefulWidget { class SettingsIgnoreListUI extends StatelessWidget {
final String initialUserId; final SettingsIgnoreListController controller;
SettingsIgnoreList({Key key, this.initialUserId}) : super(key: key); const SettingsIgnoreListUI(this.controller, {Key key}) : super(key: key);
@override
_SettingsIgnoreListState createState() => _SettingsIgnoreListState();
}
class _SettingsIgnoreListState extends State<SettingsIgnoreList> {
final TextEditingController _controller = TextEditingController();
@override
void initState() {
super.initState();
if (widget.initialUserId != null) {
_controller.text = widget.initialUserId.replaceAll('@', '');
}
}
void _ignoreUser(BuildContext context) {
if (_controller.text.isEmpty) return;
final userId = '@${_controller.text}';
showFutureLoadingDialog(
context: context,
future: () => Matrix.of(context).client.ignoreUser(userId),
);
_controller.clear();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -55,10 +30,10 @@ class _SettingsIgnoreListState extends State<SettingsIgnoreList> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
TextField( TextField(
controller: _controller, controller: controller.controller,
autocorrect: false, autocorrect: false,
textInputAction: TextInputAction.done, textInputAction: TextInputAction.done,
onSubmitted: (_) => _ignoreUser(context), onSubmitted: (_) => controller.ignoreUser(context),
decoration: InputDecoration( decoration: InputDecoration(
border: OutlineInputBorder(), border: OutlineInputBorder(),
hintText: 'bad_guy:domain.abc', hintText: 'bad_guy:domain.abc',
@ -67,7 +42,7 @@ class _SettingsIgnoreListState extends State<SettingsIgnoreList> {
suffixIcon: IconButton( suffixIcon: IconButton(
tooltip: L10n.of(context).ignore, tooltip: L10n.of(context).ignore,
icon: Icon(Icons.done_outlined), icon: Icon(Icons.done_outlined),
onPressed: () => _ignoreUser(context), onPressed: () => controller.ignoreUser(context),
), ),
), ),
), ),