|
@@ -2,15 +2,36 @@ import 'package:flutter/material.dart';
|
|
import 'package:photos/models/selected_files.dart';
|
|
import 'package:photos/models/selected_files.dart';
|
|
import 'package:photos/theme/ente_theme.dart';
|
|
import 'package:photos/theme/ente_theme.dart';
|
|
|
|
|
|
-class ActionBarWidget extends StatelessWidget {
|
|
|
|
|
|
+class ActionBarWidget extends StatefulWidget {
|
|
final String? text;
|
|
final String? text;
|
|
final List<Widget> iconButtons;
|
|
final List<Widget> iconButtons;
|
|
|
|
+ final SelectedFiles? selectedFiles;
|
|
const ActionBarWidget({
|
|
const ActionBarWidget({
|
|
- this.text,
|
|
|
|
required this.iconButtons,
|
|
required this.iconButtons,
|
|
|
|
+ this.text,
|
|
|
|
+ this.selectedFiles,
|
|
super.key,
|
|
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
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
Widget build(BuildContext context) {
|
|
return SizedBox(
|
|
return SizedBox(
|
|
@@ -23,13 +44,12 @@ class ActionBarWidget extends StatelessWidget {
|
|
|
|
|
|
List<Widget> _actionBarWidgets(BuildContext context) {
|
|
List<Widget> _actionBarWidgets(BuildContext context) {
|
|
final actionBarWidgets = <Widget>[];
|
|
final actionBarWidgets = <Widget>[];
|
|
- final initialLength = iconButtons.length;
|
|
|
|
|
|
+ final initialLength = widget.iconButtons.length;
|
|
final textTheme = getEnteTextTheme(context);
|
|
final textTheme = getEnteTextTheme(context);
|
|
final colorScheme = getEnteColorScheme(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
|
|
//adds 12 px spacing at the start and between iconButton elements
|
|
for (var i = 0; i < initialLength; i++) {
|
|
for (var i = 0; i < initialLength; i++) {
|
|
actionBarWidgets.insert(
|
|
actionBarWidgets.insert(
|
|
@@ -44,20 +64,29 @@ class ActionBarWidget extends StatelessWidget {
|
|
Flexible(
|
|
Flexible(
|
|
child: Row(
|
|
child: Row(
|
|
children: [
|
|
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
|
|
//to add whitespace of 8pts or 12 pts at the end
|
|
- if (iconButtons.length > 1) {
|
|
|
|
|
|
+ if (widget.iconButtons.length > 1) {
|
|
actionBarWidgets.add(
|
|
actionBarWidgets.add(
|
|
const SizedBox(width: 8),
|
|
const SizedBox(width: 8),
|
|
);
|
|
);
|
|
@@ -69,4 +98,10 @@ class ActionBarWidget extends StatelessWidget {
|
|
}
|
|
}
|
|
return actionBarWidgets;
|
|
return actionBarWidgets;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ void _selectedFilesListener() {
|
|
|
|
+ if (widget.selectedFiles!.files.isNotEmpty) {
|
|
|
|
+ _selectedFilesNotifier.value = widget.selectedFiles!.files.length;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|