UploadListCore constructor
const
UploadListCore({
- Key? key,
- required UploadController uploadController,
- required UploadsBuilder uploadsBuilder,
- required UploadsErrorBuilder uploadsErrorBuilder,
- required WidgetBuilder loadingBuilder,
A widget to easily display and manage uploads and their current state.
Usage:
class ComposeScreen extends StatefulWidget {
const ComposeScreen({Key? key}) : super(key: key);
@override
State<ComposeScreen> createState() => _ComposeScreenState();
}
class _ComposeScreenState extends State<ComposeScreen> {
@override
Widget build(BuildContext context) {
final uploadController = FeedProvider.of(context).bloc.uploadController;
return Scaffold(
appBar: AppBar(title: const Text('Compose'), actions: [
Padding(
padding: const EdgeInsets.all(8.0),
child: ActionChip(
label: const Text(
'Post',
style: TextStyle(
color: Colors.blue,
),
),
backgroundColor: Colors.white,
onPressed: () {
final attachments = uploadController.getMediaUris();
for (var element in attachments) {
print(element.uri);
}
uploadController.clear();
},
),
)
]),
body: SingleChildScrollView(
child: Column(
children: [
const Padding(
padding: EdgeInsets.all(8.0),
child: TextField(
decoration: InputDecoration(hintText: 'enter a description'),
),
),
IconButton(
onPressed: () async {
final ImagePicker _picker = ImagePicker();
final XFile? image =
await _picker.pickImage(source: ImageSource.gallery);
if (image != null) {
await uploadController
.uploadImage(AttachmentFile(path: image.path));
} else {
// User canceled the picker
}
},
icon: const Icon(Icons.file_copy),
),
UploadListCore(
uploadController: uploadController,
loadingBuilder: (context) => CircularProgressIndicator(),
uploadsErrorBuilder: (error) =>
Text('Could not upload error'),
uploadsBuilder: (context, uploads) {
return SizedBox(
height: 100,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: uploads.length,
itemBuilder: (context, index) => FileUploadStateWidget(
fileState: uploads[index],
onRemoveUpload: (attachment) {
return uploadController.removeUpload(attachment);
},
onCancelUpload: (attachment) {
uploadController.cancelUpload(attachment);
},
onRetryUpload: (attachment) async {
return uploadController.uploadImage(attachment);
}),
),
);
},
),
],
),
),
);
}
}
Implementation
const UploadListCore({
Key? key,
required this.uploadController,
required this.uploadsBuilder,
required this.uploadsErrorBuilder,
required this.loadingBuilder,
}) : super(key: key);