fix: Archive does not update its state

This commit is contained in:
krille-chan 2023-10-29 10:59:07 +01:00
commit b42a565a9a
No known key found for this signature in database
5 changed files with 32 additions and 34 deletions

View file

@ -16,17 +16,29 @@ class Archive extends StatefulWidget {
}
class ArchiveController extends State<Archive> {
List<Room>? archive;
List<Room> archive = [];
Future<List<Room>> getArchive(BuildContext context) async {
final archive = this.archive;
if (archive != null) return archive;
return this.archive = await Matrix.of(context).client.loadArchive();
if (archive.isNotEmpty) return archive;
return archive = await Matrix.of(context).client.loadArchive();
}
void forgetRoomAction(int i) async {
await showFutureLoadingDialog(
context: context,
future: () async {
Logs().v('Forget room ${archive.last.getLocalizedDisplayname()}');
await archive[i].forget();
archive.removeAt(i);
},
);
setState(() {});
}
void forgetAllAction() async {
final archive = this.archive;
if (archive == null) return;
final client = Matrix.of(context).client;
if (archive.isEmpty) return;
if (await showOkCancelAlertDialog(
useRootNavigator: false,
context: context,
@ -48,6 +60,7 @@ class ArchiveController extends State<Archive> {
}
},
);
client.clearArchivesFromCache();
setState(() {});
}

View file

@ -14,7 +14,6 @@ class ArchiveView extends StatelessWidget {
@override
Widget build(BuildContext context) {
var archive = controller.archive;
return FutureBuilder<List<Room>>(
future: controller.getArchive(context),
builder: (BuildContext context, snapshot) => Scaffold(
@ -50,16 +49,16 @@ class ArchiveView extends StatelessWidget {
child: CircularProgressIndicator.adaptive(strokeWidth: 2),
);
} else {
archive = snapshot.data;
if (archive == null || archive!.isEmpty) {
if (controller.archive.isEmpty) {
return const Center(
child: Icon(Icons.archive_outlined, size: 80),
);
}
return ListView.builder(
itemCount: archive!.length,
itemCount: controller.archive.length,
itemBuilder: (BuildContext context, int i) => ChatListItem(
archive![i],
controller.archive[i],
onForget: () => controller.forgetRoomAction(i),
),
);
}