flutterx_drop_view 1.0.0
flutterx_drop_view: ^1.0.0 copied to clipboard
A widget where you can drop files into it, and also pick files from system file browser.
example/lib/main.dart
import 'package:cross_file/cross_file.dart';
import 'package:flutter/material.dart';
import 'package:flutterx_drop_view/flutterx_drop_view.dart';
import 'package:flutterx_live_data/flutterx_live_data.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutterx DropView Demo',
theme: ThemeData(primarySwatch: Colors.deepOrange),
home: const DropViewExample());
}
class DropViewExample extends StatefulWidget {
const DropViewExample({Key? key}) : super(key: key);
@override
State<DropViewExample> createState() => _DropViewExampleState();
}
class _DropViewExampleState extends State<DropViewExample> {
final LiveList<XFile> _files = LiveList();
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(title: const Text('DropView example')),
body: Center(
child: FlutterxDropView.multiple(
mimeTypes: const {'application/pdf'},
onMimeTypeNotMatch: (error) =>
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(error.toString()))),
files: _files,
builder: (context, dragging) => Column(children: [
LiveDataBuilder<bool>(data: dragging, builder: (context, dragging) => Text('Dragging: $dragging')),
LiveDataBuilder<List<XFile>>(
data: _files,
builder: (context, files) => Text('Dropped: ${files.map((e) => e.name).join(', ')}')),
ElevatedButton(
onPressed: () =>
FlutterxDropView.pickFiles(mimeTypes: const {'application/pdf'}, files: _files),
child: const Text('OPEN')),
]))));
}