You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.9 KiB
Dart
60 lines
1.9 KiB
Dart
import 'package:fluffychat/config/app_config.dart';
|
|
import 'package:fluffychat/widgets/matrix.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
|
import 'package:matrix/matrix.dart' as matrix;
|
|
import 'package:matrix/matrix.dart';
|
|
|
|
class VisibilityToggle extends StatelessWidget {
|
|
final Room? room;
|
|
final Color? iconColor;
|
|
final Future<void> Function(matrix.Visibility) setVisibility;
|
|
final bool spaceMode;
|
|
final matrix.Visibility visibility;
|
|
|
|
const VisibilityToggle({
|
|
required this.setVisibility,
|
|
this.room,
|
|
this.iconColor,
|
|
this.spaceMode = false,
|
|
this.visibility = matrix.Visibility.private,
|
|
super.key,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return FutureBuilder(
|
|
future: room != null
|
|
? Matrix.of(context).client.getRoomVisibilityOnDirectory(room!.id)
|
|
: null,
|
|
builder: (context, snapshot) {
|
|
return SwitchListTile.adaptive(
|
|
activeColor: AppConfig.activeToggleColor,
|
|
title: Text(
|
|
room?.isSpace ?? spaceMode
|
|
? L10n.of(context)!.spaceIsPublic
|
|
: L10n.of(context)!.groupIsPublic,
|
|
style: TextStyle(
|
|
color: Theme.of(context).colorScheme.secondary,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
secondary: CircleAvatar(
|
|
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
|
|
foregroundColor: iconColor,
|
|
child: const Icon(Icons.public_outlined),
|
|
),
|
|
value: room != null
|
|
? snapshot.hasData
|
|
? snapshot.data == matrix.Visibility.public
|
|
: false
|
|
: visibility == matrix.Visibility.public,
|
|
onChanged: (value) => setVisibility(
|
|
value ? matrix.Visibility.public : matrix.Visibility.private,
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|