1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-10-23 15:03:22 +00:00
comunicmobile/lib/ui/widgets/conversation_file_tile.dart

68 lines
1.9 KiB
Dart
Raw Normal View History

2021-03-10 23:02:41 +00:00
/// Chat file tile
///
/// @author Pierre Hubert
import 'package:comunic/models/conversation_message.dart';
import 'package:comunic/ui/widgets/network_image_widget.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
const _AreaSize = 150.0;
class ConversationFileWidget extends StatefulWidget {
final int messageID;
final ConversationMessageFile file;
const ConversationFileWidget({
Key key,
@required this.messageID,
@required this.file,
}) : assert(messageID != null),
assert(file != null),
super(key: key);
@override
_ConversationFileWidgetState createState() => _ConversationFileWidgetState();
}
class _ConversationFileWidgetState extends State<ConversationFileWidget> {
ConversationMessageFile get file => widget.file;
@override
2021-03-10 23:13:05 +00:00
Widget build(BuildContext context) =>
Container(width: _AreaSize, height: _AreaSize, child: _buildContent());
2021-03-10 23:02:41 +00:00
2021-03-10 23:13:05 +00:00
Widget _buildContent() {
2021-03-10 23:02:41 +00:00
switch (file.fileType) {
// Images
case ConversationMessageFileType.IMAGE:
return Center(
child: NetworkImageWidget(
url: file.url,
thumbnailURL: file.thumbnail,
allowFullScreen: true,
),
);
// The file is not downloadable, we open it in the browser
default:
return Center(
child: MaterialButton(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Spacer(flex: 2),
Icon(file.icon, color: Colors.white),
Spacer(),
Text(file.name, textAlign: TextAlign.center),
Spacer(flex: 2),
],
),
onPressed: () => launch(file.url),
),
);
break;
}
}
}