buildSourceList method

List<ActionSheetItem> buildSourceList({
  1. required BuildContext context,
  2. required ValueNotifier<List<PlatformFile>> selectedFiles,
})

Implementation

List<ActionSheetItem> buildSourceList(
    {required BuildContext context,
    required ValueNotifier<List<PlatformFile>> selectedFiles}) {
  final List sourcesList = [
    HMFileSource(
        icon: const Icon(
          Icons.camera_alt_rounded,
          color: Colors.blue,
        ),
        source: FileSource.camera),
    HMFileSource(
        icon: const Icon(
          Icons.photo,
          color: Colors.blue,
        ),
        source: FileSource.gallery),
    HMFileSource(
        icon: const Icon(
          Icons.insert_drive_file,
          color: Colors.blue,
        ),
        source: FileSource.document),
  ];
  final List<ActionSheetItem> actionsList = sourcesList.map((source) {
    final Widget title = Text('${source.source.value}');
    final Widget icon = source.icon as Widget;
    return ActionSheetItem(
        icon: icon,
        title: title,
        onPressed: () async {
          if (source.source == FileSource.camera) {
            await availableCameras().then(
              (value) => Navigator.push(
                context,
                MaterialPageRoute(builder: (_) => CameraPage(cameras: value)),
              ).then((value) async {
                if (value != null) {
                  final int size = await value.length() as int;
                  selectedFiles.value = [
                    PlatformFile(
                        name: value.name as String,
                        size: size,
                        path: value.path as String)
                  ];
                }
              }),
            );
          } else if (source.source == FileSource.gallery) {
            isMultipleFiles
                ? FilePickerLogic.pickMultipleFiles(
                    selectedFiles, FileType.media)
                : FilePickerLogic.pickFile(selectedFiles, FileType.media);
          } else {
            isMultipleFiles
                ? FilePickerLogic.pickMultipleFiles(
                    selectedFiles, FileType.any)
                : FilePickerLogic.pickFile(selectedFiles, FileType.any);
          }
        });
  }).toList();
  return actionsList;
}