From 065ce9593794006fbc05dce30b42ddd0185b4d59 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Mon, 13 Dec 2021 09:40:53 +0100 Subject: [PATCH] refactor: Make more files null safe --- lib/pages/archive/archive.dart | 21 +++++++++++++-------- lib/pages/archive/archive_view.dart | 23 ++++++++++++----------- lib/pages/chat/chat_app_bar_title.dart | 14 ++++++++------ lib/pages/chat/chat_emoji_picker.dart | 4 +++- lib/pages/chat/command_hints.dart | 1 + 5 files changed, 37 insertions(+), 26 deletions(-) diff --git a/lib/pages/archive/archive.dart b/lib/pages/archive/archive.dart index 30d20237..4df1f352 100644 --- a/lib/pages/archive/archive.dart +++ b/lib/pages/archive/archive.dart @@ -1,3 +1,5 @@ +//@dart=2.12 + import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; @@ -9,30 +11,33 @@ import 'package:fluffychat/pages/archive/archive_view.dart'; import 'package:fluffychat/widgets/matrix.dart'; class Archive extends StatefulWidget { - const Archive({Key key}) : super(key: key); + const Archive({Key? key}) : super(key: key); @override ArchiveController createState() => ArchiveController(); } class ArchiveController extends State { - List archive; + List? archive; Future> getArchive(BuildContext context) async { + final archive = this.archive; if (archive != null) return archive; return await Matrix.of(context).client.loadArchive(); } - void forgetAction(int i) => setState(() => archive.removeAt(i)); + void forgetAction(int i) => setState(() => archive?.removeAt(i)); void forgetAllAction() async { + final archive = this.archive; + if (archive == null) return; if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, - title: L10n.of(context).areYouSure, - okLabel: L10n.of(context).yes, - cancelLabel: L10n.of(context).cancel, - message: L10n.of(context).clearArchive, + title: L10n.of(context)!.areYouSure, + okLabel: L10n.of(context)!.yes, + cancelLabel: L10n.of(context)!.cancel, + message: L10n.of(context)!.clearArchive, ) != OkCancelResult.ok) { return; @@ -47,7 +52,7 @@ class ArchiveController extends State { } }, ); - setState(() => null); + setState(() {}); } @override diff --git a/lib/pages/archive/archive_view.dart b/lib/pages/archive/archive_view.dart index 42395425..d1c64e1a 100644 --- a/lib/pages/archive/archive_view.dart +++ b/lib/pages/archive/archive_view.dart @@ -1,3 +1,5 @@ +//@dart=2.12 + import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; @@ -9,23 +11,22 @@ import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; class ArchiveView extends StatelessWidget { final ArchiveController controller; - const ArchiveView(this.controller, {Key key}) : super(key: key); + const ArchiveView(this.controller, {Key? key}) : super(key: key); @override Widget build(BuildContext context) { + var archive = controller.archive; return FutureBuilder>( future: controller.getArchive(context), builder: (BuildContext context, snapshot) => Scaffold( appBar: AppBar( leading: const BackButton(), - title: Text(L10n.of(context).archive), + title: Text(L10n.of(context)!.archive), actions: [ - if (snapshot.hasData && - controller.archive != null && - controller.archive.isNotEmpty) + if (snapshot.hasData && archive != null && archive!.isNotEmpty) TextButton( onPressed: controller.forgetAllAction, - child: Text(L10n.of(context).clearArchive), + child: Text(L10n.of(context)!.clearArchive), ) ], ), @@ -34,7 +35,7 @@ class ArchiveView extends StatelessWidget { if (snapshot.hasError) { return Center( child: Text( - L10n.of(context).oopsSomethingWentWrong, + L10n.of(context)!.oopsSomethingWentWrong, textAlign: TextAlign.center, )); } @@ -42,15 +43,15 @@ class ArchiveView extends StatelessWidget { return const Center( child: CircularProgressIndicator.adaptive(strokeWidth: 2)); } else { - controller.archive = snapshot.data; - if (controller.archive.isEmpty) { + archive = snapshot.data; + if (archive == null || archive!.isEmpty) { return const Center( child: Icon(Icons.archive_outlined, size: 80)); } return ListView.builder( - itemCount: controller.archive.length, + itemCount: archive!.length, itemBuilder: (BuildContext context, int i) => ChatListItem( - controller.archive[i], + archive![i], onForget: controller.forgetAction, ), ); diff --git a/lib/pages/chat/chat_app_bar_title.dart b/lib/pages/chat/chat_app_bar_title.dart index 6ec52eb7..7d3dcec5 100644 --- a/lib/pages/chat/chat_app_bar_title.dart +++ b/lib/pages/chat/chat_app_bar_title.dart @@ -1,3 +1,5 @@ +//@dart=2.12 + import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; @@ -13,35 +15,35 @@ import 'package:fluffychat/widgets/matrix.dart'; class ChatAppBarTitle extends StatelessWidget { final ChatController controller; - const ChatAppBarTitle(this.controller, {Key key}) : super(key: key); + const ChatAppBarTitle(this.controller, {Key? key}) : super(key: key); @override Widget build(BuildContext context) { if (controller.selectedEvents.isNotEmpty) { return Text(controller.selectedEvents.length.toString()); } + final directChatMatrixID = controller.room.directChatMatrixID; return ListTile( leading: Avatar( mxContent: controller.room.avatar, name: controller.room.displayname, ), contentPadding: EdgeInsets.zero, - onTap: controller.room.isDirectChat + onTap: directChatMatrixID != null ? () => showModalBottomSheet( context: context, builder: (c) => UserBottomSheet( - user: controller.room - .getUserByMXIDSync(controller.room.directChatMatrixID), + user: controller.room.getUserByMXIDSync(directChatMatrixID), outerContext: context, onMention: () => controller.sendController.text += - '${controller.room.getUserByMXIDSync(controller.room.directChatMatrixID).mention} ', + '${controller.room.getUserByMXIDSync(directChatMatrixID).mention} ', ), ) : () => VRouter.of(context) .toSegments(['rooms', controller.room.id, 'details']), title: Text( controller.room - .getLocalizedDisplayname(MatrixLocals(L10n.of(context))), + .getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)), maxLines: 1), subtitle: StreamBuilder( stream: Matrix.of(context) diff --git a/lib/pages/chat/chat_emoji_picker.dart b/lib/pages/chat/chat_emoji_picker.dart index 49c6e2fc..5a777032 100644 --- a/lib/pages/chat/chat_emoji_picker.dart +++ b/lib/pages/chat/chat_emoji_picker.dart @@ -1,3 +1,5 @@ +//@dart=2.12 + import 'package:flutter/material.dart'; import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; @@ -6,7 +8,7 @@ import 'chat.dart'; class ChatEmojiPicker extends StatelessWidget { final ChatController controller; - const ChatEmojiPicker(this.controller, {Key key}) : super(key: key); + const ChatEmojiPicker(this.controller, {Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/pages/chat/command_hints.dart b/lib/pages/chat/command_hints.dart index 617c4f80..3dc82430 100644 --- a/lib/pages/chat/command_hints.dart +++ b/lib/pages/chat/command_hints.dart @@ -1,3 +1,4 @@ +//@dart=2.12 // This file is auto-generated using scripts/generate_command_hints_glue.sh. import 'package:flutter_gen/gen_l10n/l10n.dart';