aves/lib/widgets/common/action_delegates/create_album_dialog.dart

94 lines
2.9 KiB
Dart

import 'package:aves/utils/android_file_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:path/path.dart';
class CreateAlbumDialog extends StatefulWidget {
@override
_CreateAlbumDialogState createState() => _CreateAlbumDialogState();
}
class _CreateAlbumDialogState extends State<CreateAlbumDialog> {
final TextEditingController _nameController = TextEditingController();
Set<StorageVolume> allVolumes;
StorageVolume primaryVolume, selectedVolume;
@override
void initState() {
super.initState();
// TODO TLAD improve new album default name
_nameController.text = 'Album 1';
allVolumes = androidFileUtils.storageVolumes;
primaryVolume = allVolumes.firstWhere((volume) => volume.isPrimary, orElse: () => allVolumes.first);
selectedVolume = primaryVolume;
}
@override
void dispose() {
_nameController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return AlertDialog(
title: const Text('New Album'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (allVolumes.length > 1) ...[
Row(
mainAxisSize: MainAxisSize.min,
children: [
const Text('Storage:'),
const SizedBox(width: 8),
Expanded(
child: DropdownButton<StorageVolume>(
isExpanded: true,
items: allVolumes
.map((volume) => DropdownMenuItem(
value: volume,
child: Text(
volume.description,
softWrap: false,
overflow: TextOverflow.fade,
maxLines: 1,
),
))
.toList(),
value: selectedVolume,
onChanged: (volume) => setState(() => selectedVolume = volume),
),
),
],
),
const SizedBox(height: 16),
],
TextField(
controller: _nameController,
// autofocus: true,
),
],
),
contentPadding: const EdgeInsets.fromLTRB(24, 20, 24, 0),
actions: [
FlatButton(
onPressed: () => Navigator.pop(context),
child: Text('Cancel'.toUpperCase()),
),
FlatButton(
onPressed: () => Navigator.pop(context, _buildAlbumPath()),
child: Text('Create'.toUpperCase()),
),
],
);
}
String _buildAlbumPath() {
final newName = _nameController.text;
if (newName == null || newName.isEmpty) return null;
return join(selectedVolume == primaryVolume ? androidFileUtils.dcimPath : selectedVolume.path, newName);
}
}