diff --git a/lib/pages/settings_ignore_list/settings_ignore_list.dart b/lib/pages/settings_ignore_list/settings_ignore_list.dart index 525ead873..1d0cc742f 100644 --- a/lib/pages/settings_ignore_list/settings_ignore_list.dart +++ b/lib/pages/settings_ignore_list/settings_ignore_list.dart @@ -47,6 +47,7 @@ class SettingsIgnoreListController extends State { context: context, future: () => Matrix.of(context).client.ignoreUser(userId), ); + setState(() {}); controller.clear(); } diff --git a/lib/pages/settings_ignore_list/settings_ignore_list_view.dart b/lib/pages/settings_ignore_list/settings_ignore_list_view.dart index 6a1d49726..19bd17c27 100644 --- a/lib/pages/settings_ignore_list/settings_ignore_list_view.dart +++ b/lib/pages/settings_ignore_list/settings_ignore_list_view.dart @@ -1,9 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import '../../widgets/matrix.dart'; @@ -26,84 +23,74 @@ class SettingsIgnoreListView extends StatelessWidget { ), body: MaxWidthBody( withScrolling: false, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - TextField( - controller: controller.controller, - autocorrect: false, - textInputAction: TextInputAction.done, - onSubmitted: (_) => controller.ignoreUser(context), - decoration: InputDecoration( - errorText: controller.errorText, - hintText: '@bad_guy:domain.abc', - floatingLabelBehavior: FloatingLabelBehavior.always, - labelText: L10n.of(context).blockUsername, - suffixIcon: IconButton( - tooltip: L10n.of(context).block, - icon: const Icon(Icons.add), - onPressed: () => controller.ignoreUser(context), + child: StreamBuilder( + stream: client.onSync.stream.where( + (syncUpdate) => + syncUpdate.accountData?.any( + (accountData) => accountData.type == 'm.ignored_user_list', + ) ?? + false, + ), + builder: (context, asyncSnapshot) { + if (client.prevBatch == null) { + return const Center(child: CircularProgressIndicator.adaptive()); + } + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextField( + controller: controller.controller, + autocorrect: false, + textInputAction: TextInputAction.done, + onSubmitted: (_) => controller.ignoreUser(context), + decoration: InputDecoration( + errorText: controller.errorText, + hintText: '@bad_guy:domain.abc', + floatingLabelBehavior: FloatingLabelBehavior.always, + labelText: L10n.of(context).blockUsername, + suffixIcon: IconButton( + tooltip: L10n.of(context).block, + icon: const Icon(Icons.add), + onPressed: () => controller.ignoreUser(context), + ), + ), ), - ), - ), - const SizedBox(height: 16), - Text( - L10n.of(context).blockListDescription, - style: const TextStyle(color: Colors.orange), + const SizedBox(height: 16), + Text( + L10n.of(context).blockListDescription, + style: const TextStyle(color: Colors.orange), + ), + ], ), - ], - ), - ), - Divider( - color: theme.dividerColor, - ), - Expanded( - child: StreamBuilder( - stream: client.onSync.stream.where( - (syncUpdate) => - syncUpdate.accountData?.any( - (accountData) => - accountData.type == 'm.ignored_user_list', - ) ?? - false, ), - builder: (context, snapshot) { - return ListView.builder( + Divider( + color: theme.dividerColor, + ), + Expanded( + child: ListView.builder( itemCount: client.ignoredUsers.length, - itemBuilder: (c, i) => FutureBuilder( - future: - client.getProfileFromUserId(client.ignoredUsers[i]), - builder: (c, s) => ListTile( - leading: Avatar( - mxContent: s.data?.avatarUrl ?? Uri.parse(''), - name: s.data?.displayName ?? client.ignoredUsers[i], - ), - title: Text( - s.data?.displayName ?? client.ignoredUsers[i], - ), - subtitle: - Text(s.data?.userId ?? client.ignoredUsers[i]), - trailing: IconButton( - tooltip: L10n.of(context).delete, - icon: const Icon(Icons.delete_outlined), - onPressed: () => showFutureLoadingDialog( - context: context, - future: () => - client.unignoreUser(client.ignoredUsers[i]), - ), + itemBuilder: (c, i) => ListTile( + title: Text(client.ignoredUsers[i]), + trailing: IconButton( + tooltip: L10n.of(context).delete, + icon: const Icon(Icons.delete_outlined), + onPressed: () => showFutureLoadingDialog( + context: context, + future: () => + client.unignoreUser(client.ignoredUsers[i]), ), ), ), - ); - }, - ), - ), - ], + ), + ), + ], + ); + }, ), ), );