named_media_picker 0.0.1
named_media_picker: ^0.0.1 copied to clipboard
Flutter gallery media picker for Android and iOS that returns upload-ready files with real display names — not temporary image_picker cache filenames.
import 'package:flutter/material.dart';
import 'package:named_media_picker/named_media_picker.dart';
void main() {
runApp(const ExampleApp());
}
class ExampleApp extends StatelessWidget {
const ExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Named Media Picker Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF2E7D32)),
useMaterial3: true,
),
home: const ExampleHomePage(),
);
}
}
class ExampleHomePage extends StatefulWidget {
const ExampleHomePage({super.key});
@override
State<ExampleHomePage> createState() => _ExampleHomePageState();
}
class _ExampleHomePageState extends State<ExampleHomePage> {
List<NamedMedia> _selected = const [];
Future<void> _pick() async {
final files = await NamedMediaPicker.pick(
context,
config: const NamedMediaPickerConfig(
maxCount: 10,
filter: NamedMediaFilter.all,
theme: NamedMediaPickerTheme(
appBarBackgroundColor: Color(0xFF2E7D32),
selectedCheckBackgroundColor: Color(0xFF2E7D32),
),
),
);
if (!mounted) return;
setState(() => _selected = files);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Named Media Picker')),
body: _selected.isEmpty
? const Center(
child: Text('No files selected yet.'),
)
: ListView.separated(
padding: const EdgeInsets.all(16),
itemCount: _selected.length,
separatorBuilder: (_, _) => const Divider(height: 24),
itemBuilder: (context, index) {
final file = _selected[index];
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
file.displayName,
style: const TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16,
),
),
const SizedBox(height: 6),
Text('Type: ${file.type.name}'),
Text('Upload as: ${file.uploadFilename}'),
if (file.hasLocation)
Text(
'Location: ${file.latitude}, ${file.longitude}',
),
Text(
'Path: ${file.path}',
style: const TextStyle(fontSize: 12),
),
],
);
},
),
floatingActionButton: FloatingActionButton.extended(
onPressed: _pick,
icon: const Icon(Icons.photo_library_outlined),
label: const Text('Pick media'),
),
);
}
}