diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 98e3bcd5..a780f77b 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -22,7 +22,7 @@ import 'package:fluffychat/views/search.dart'; import 'package:fluffychat/views/ui/settings_ui.dart'; import 'package:fluffychat/views/settings_3pid.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_notifications_ui.dart'; import 'package:fluffychat/views/settings_style.dart'; diff --git a/lib/views/settings_ignore_list.dart b/lib/views/settings_ignore_list.dart new file mode 100644 index 00000000..f3261dc3 --- /dev/null +++ b/lib/views/settings_ignore_list.dart @@ -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 { + 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); +} diff --git a/lib/views/ui/settings_ignore_list_ui.dart b/lib/views/ui/settings_ignore_list_ui.dart index 7e50c25f..35164fb4 100644 --- a/lib/views/ui/settings_ignore_list_ui.dart +++ b/lib/views/ui/settings_ignore_list_ui.dart @@ -5,38 +5,13 @@ import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; +import '../settings_ignore_list.dart'; import '../widgets/matrix.dart'; -class SettingsIgnoreList extends StatefulWidget { - final String initialUserId; +class SettingsIgnoreListUI extends StatelessWidget { + final SettingsIgnoreListController controller; - SettingsIgnoreList({Key key, this.initialUserId}) : super(key: key); - - @override - _SettingsIgnoreListState createState() => _SettingsIgnoreListState(); -} - -class _SettingsIgnoreListState extends State { - 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(); - } + const SettingsIgnoreListUI(this.controller, {Key key}) : super(key: key); @override Widget build(BuildContext context) { @@ -55,10 +30,10 @@ class _SettingsIgnoreListState extends State { mainAxisSize: MainAxisSize.min, children: [ TextField( - controller: _controller, + controller: controller.controller, autocorrect: false, textInputAction: TextInputAction.done, - onSubmitted: (_) => _ignoreUser(context), + onSubmitted: (_) => controller.ignoreUser(context), decoration: InputDecoration( border: OutlineInputBorder(), hintText: 'bad_guy:domain.abc', @@ -67,7 +42,7 @@ class _SettingsIgnoreListState extends State { suffixIcon: IconButton( tooltip: L10n.of(context).ignore, icon: Icon(Icons.done_outlined), - onPressed: () => _ignoreUser(context), + onPressed: () => controller.ignoreUser(context), ), ), ),