sync selected file count on bottom action bar
This commit is contained in:
parent
0a0d39d4a0
commit
d83cbebadd
|
@ -2,15 +2,36 @@ import 'package:flutter/material.dart';
|
|||
import 'package:photos/models/selected_files.dart';
|
||||
import 'package:photos/theme/ente_theme.dart';
|
||||
|
||||
class ActionBarWidget extends StatelessWidget {
|
||||
class ActionBarWidget extends StatefulWidget {
|
||||
final String? text;
|
||||
final List<Widget> iconButtons;
|
||||
final SelectedFiles? selectedFiles;
|
||||
const ActionBarWidget({
|
||||
this.text,
|
||||
required this.iconButtons,
|
||||
this.text,
|
||||
this.selectedFiles,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
State<ActionBarWidget> createState() => _ActionBarWidgetState();
|
||||
}
|
||||
|
||||
class _ActionBarWidgetState extends State<ActionBarWidget> {
|
||||
final ValueNotifier<int> _selectedFilesNotifier = ValueNotifier(0);
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
widget.selectedFiles?.addListener(_selectedFilesListener);
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
widget.selectedFiles?.removeListener(_selectedFilesListener);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
|
@ -23,13 +44,12 @@ class ActionBarWidget extends StatelessWidget {
|
|||
|
||||
List<Widget> _actionBarWidgets(BuildContext context) {
|
||||
final actionBarWidgets = <Widget>[];
|
||||
final initialLength = iconButtons.length;
|
||||
final initialLength = widget.iconButtons.length;
|
||||
final textTheme = getEnteTextTheme(context);
|
||||
final colorScheme = getEnteColorScheme(context);
|
||||
final hasSelectedFiles = SelectedFiles().files.isNotEmpty;
|
||||
|
||||
actionBarWidgets.addAll(iconButtons);
|
||||
if (text != null) {
|
||||
actionBarWidgets.addAll(widget.iconButtons);
|
||||
if (widget.text != null) {
|
||||
//adds 12 px spacing at the start and between iconButton elements
|
||||
for (var i = 0; i < initialLength; i++) {
|
||||
actionBarWidgets.insert(
|
||||
|
@ -44,20 +64,29 @@ class ActionBarWidget extends StatelessWidget {
|
|||
Flexible(
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
text!,
|
||||
style: hasSelectedFiles
|
||||
? textTheme.body
|
||||
: textTheme.small.copyWith(
|
||||
color: colorScheme.textMuted,
|
||||
),
|
||||
)
|
||||
widget.selectedFiles != null
|
||||
? ValueListenableBuilder(
|
||||
valueListenable: _selectedFilesNotifier,
|
||||
builder: (context, value, child) {
|
||||
return Text(
|
||||
"${_selectedFilesNotifier.value} selected",
|
||||
style: textTheme.small.copyWith(
|
||||
color: colorScheme.blurTextBase,
|
||||
),
|
||||
);
|
||||
},
|
||||
)
|
||||
: Text(
|
||||
widget.text!,
|
||||
style: textTheme.small
|
||||
.copyWith(color: colorScheme.textMuted),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
]);
|
||||
//to add whitespace of 8pts or 12 pts at the end
|
||||
if (iconButtons.length > 1) {
|
||||
if (widget.iconButtons.length > 1) {
|
||||
actionBarWidgets.add(
|
||||
const SizedBox(width: 8),
|
||||
);
|
||||
|
@ -69,4 +98,10 @@ class ActionBarWidget extends StatelessWidget {
|
|||
}
|
||||
return actionBarWidgets;
|
||||
}
|
||||
|
||||
void _selectedFilesListener() {
|
||||
if (widget.selectedFiles!.files.isNotEmpty) {
|
||||
_selectedFilesNotifier.value = widget.selectedFiles!.files.length;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,6 +58,7 @@ class BottomActionBarWidget extends StatelessWidget {
|
|||
horizontal: text == null ? 12 : 0,
|
||||
),
|
||||
child: ActionBarWidget(
|
||||
selectedFiles: selectedFiles,
|
||||
text: text,
|
||||
iconButtons: _iconButtons(),
|
||||
),
|
||||
|
|
|
@ -120,7 +120,7 @@ class _CollectionPageState extends State<CollectionPage> {
|
|||
child: BottomActionBarWidget(
|
||||
selectedFiles: _selectedFiles,
|
||||
expandedMenu: const SizedBox(height: 150),
|
||||
text: "3 selected",
|
||||
text: _selectedFiles.files.length.toString() + ' selected',
|
||||
onCancel: () {
|
||||
if (_selectedFiles.files.isNotEmpty) {
|
||||
_selectedFiles.clearAll();
|
||||
|
|
Loading…
Reference in a new issue