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.
		
		
		
		
		
			
		
			
				
	
	
		
			105 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			105 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Dart
		
	
import 'dart:io';
 | 
						|
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:fluttertoast/fluttertoast.dart';
 | 
						|
import 'package:open_file/open_file.dart';
 | 
						|
import 'package:test_sa/controllers/api_routes/urls.dart';
 | 
						|
import 'package:test_sa/extensions/context_extension.dart';
 | 
						|
import 'package:test_sa/extensions/int_extensions.dart';
 | 
						|
import 'package:test_sa/extensions/text_extensions.dart';
 | 
						|
import 'package:test_sa/extensions/widget_extensions.dart';
 | 
						|
import 'package:test_sa/new_views/app_style/app_color.dart';
 | 
						|
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
 | 
						|
import 'package:test_sa/views/widgets/loaders/image_loader.dart';
 | 
						|
import 'package:url_launcher/url_launcher.dart';
 | 
						|
 | 
						|
class MultiFilesPickerItem extends StatelessWidget {
 | 
						|
  final File file;
 | 
						|
  final bool enabled;
 | 
						|
  final Function(File) onRemoveTap;
 | 
						|
 | 
						|
  const MultiFilesPickerItem({Key? key, required this.file, required this.enabled, required this.onRemoveTap}) : super(key: key);
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    bool isImage = file.path.split(".").last.toLowerCase() == "png" || file.path.split(".").last.toLowerCase() == "jpg" || file.path.split(".").last.toLowerCase() == "jpeg";
 | 
						|
    bool isPdf = file.path.split(".").last.toLowerCase() == "pdf";
 | 
						|
    bool isExcel = file.path.split(".").last.toLowerCase() == "xlsx";
 | 
						|
 | 
						|
    return SizedBox(
 | 
						|
      width: 54.toScreenWidth,
 | 
						|
      height: 51.toScreenWidth,
 | 
						|
      child: Stack(
 | 
						|
        alignment: AlignmentDirectional.topEnd,
 | 
						|
        children: [
 | 
						|
          Container(
 | 
						|
            margin: EdgeInsetsDirectional.only(top: 4.toScreenHeight, end: 6.toScreenWidth),
 | 
						|
            decoration: BoxDecoration(
 | 
						|
              color: AppColor.neutral90,
 | 
						|
              border: Border.all(width: 1, color: context.isDark ? AppColor.neutral30 : AppColor.neutral30),
 | 
						|
              image: DecorationImage(
 | 
						|
                image: getImage(isImage, isPdf, isExcel, file),
 | 
						|
                fit: BoxFit.cover,
 | 
						|
              ),
 | 
						|
              borderRadius: BorderRadius.circular(8),
 | 
						|
            ),
 | 
						|
            child: MaterialButton(
 | 
						|
              padding: EdgeInsets.zero,
 | 
						|
              onPressed: () async {
 | 
						|
                if (isImage) {
 | 
						|
                  Navigator.of(context).push(
 | 
						|
                    MaterialPageRoute(
 | 
						|
                      builder: (_) => Scaffold(
 | 
						|
                        appBar: const DefaultAppBar(),
 | 
						|
                        body: SafeArea(
 | 
						|
                          child: InteractiveViewer(
 | 
						|
                            child: _isLocalUrl(file.path)
 | 
						|
                                ? Image.file(file)
 | 
						|
                                : ImageLoader(
 | 
						|
                                    url: URLs.getFileUrl(file.path),
 | 
						|
                                    boxFit: BoxFit.cover,
 | 
						|
                                  ),
 | 
						|
                          ).center,
 | 
						|
                        ),
 | 
						|
                      ),
 | 
						|
                    ),
 | 
						|
                  );
 | 
						|
                } else if (_isLocalUrl(file.path)) {
 | 
						|
                  OpenFile.open(file.path);
 | 
						|
                } else {
 | 
						|
                  if (!await launchUrl(Uri.parse(URLs.getFileUrl(file.path)!), mode: LaunchMode.externalApplication)) {
 | 
						|
                    Fluttertoast.showToast(msg: "UnExpected Error with file.");
 | 
						|
                    throw Exception('Could not launch');
 | 
						|
                  }
 | 
						|
                }
 | 
						|
              },
 | 
						|
            ),
 | 
						|
          ),
 | 
						|
          if (enabled)
 | 
						|
            InkWell(
 | 
						|
              child: "remove".toSvgAsset(width: 16),
 | 
						|
              onTap: () {
 | 
						|
                onRemoveTap(file);
 | 
						|
              },
 | 
						|
            )
 | 
						|
        ],
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  ImageProvider getImage(bool isImage, bool isPdf, bool isExcel, File file) {
 | 
						|
    if (isImage) {
 | 
						|
      if (_isLocalUrl(file.path)) {
 | 
						|
        return FileImage(file);
 | 
						|
      }
 | 
						|
      return NetworkImage(URLs.getFileUrl(file.path)!);
 | 
						|
    }
 | 
						|
    return AssetImage("assets/images/${isPdf ? "pdf" : isExcel ? "excel" : "doc"}.png");
 | 
						|
  }
 | 
						|
 | 
						|
  bool _isLocalUrl(String url) {
 | 
						|
    if (url.isEmpty != false) return false;
 | 
						|
    return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\');
 | 
						|
  }
 | 
						|
}
 |