manager-app/lib/Screens/Resources/get_element_for_resource.dart
2023-03-31 17:13:34 +02:00

109 lines
3.8 KiB
Dart

import 'dart:convert';
import 'dart:typed_data';
import 'package:manager_app/Components/audio_player.dart';
import 'package:manager_app/Components/loading_common.dart';
import 'package:manager_app/Models/managerContext.dart';
import 'package:manager_app/app_context.dart';
import 'package:manager_app/constants.dart';
import 'package:manager_api_new/api.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
getElementForResource(dynamic resourceDTO, AppContext appContext) {
switch(resourceDTO.type) {
case ResourceType.Image:
return Image.network(
appContext.getContext().clientAPI.resourceApi.apiClient.basePath+"/api/Resource/"+ resourceDTO.id,
fit:BoxFit.fill,
loadingBuilder: (BuildContext context, Widget child,
ImageChunkEvent loadingProgress) {
if (loadingProgress == null) {
return child;
}
return Center(
child: CircularProgressIndicator(
color: kPrimaryColor,
value: loadingProgress.expectedTotalBytes != null
? loadingProgress.cumulativeBytesLoaded /
loadingProgress.expectedTotalBytes
: null,
),
);
},
);
break;
case ResourceType.ImageUrl:
return Image.network(
resourceDTO.data,
fit:BoxFit.fill,
loadingBuilder: (BuildContext context, Widget child,
ImageChunkEvent loadingProgress) {
if (loadingProgress == null) {
return child;
}
return Center(
child: CircularProgressIndicator(
color: kPrimaryColor,
value: loadingProgress.expectedTotalBytes != null
? loadingProgress.cumulativeBytesLoaded /
loadingProgress.expectedTotalBytes
: null,
),
);
},
);
break;
case ResourceType.Audio:
return FutureBuilder(
future: getAudio(resourceDTO.id, appContext),
builder: (context, AsyncSnapshot<dynamic> snapshot) {
Size size = MediaQuery.of(context).size;
if (snapshot.connectionState == ConnectionState.done) {
var audioBytes;
if(snapshot.data != null) {
print("snapshot.data");
print(snapshot.data);
audioBytes = snapshot.data;
//this.player.playBytes(audiobytes);
}
return AudioPlayerFloatingContainer(audioBytes: audioBytes, isAuto: true);
} else if (snapshot.connectionState == ConnectionState.none) {
return Text("No data");
} else {
return Center(
child: Container(
//height: size.height * 0.2,
width: size.width * 0.2,
child: LoadingCommon()
)
);
}
}
);
//return Text("Fichier audio - aucune visualisation possible");
break;
case ResourceType.Video:
return Text("Vidéo locale - aucune visualisation possible");
break;
case ResourceType.VideoUrl:
return Text(resourceDTO.data);
break;
}
}
Future<Uint8List> getAudio(String resourceId, AppContext appContext) async {
try {
ManagerAppContext managerAppContext = appContext.getContext() as ManagerAppContext;
var url = managerAppContext.host + "/api/Resource/" + resourceId; // TO TEST TODO UPDATE ROUTE
var test2 = await http.readBytes(Uri.parse(url));
final base64Str = base64.encode(test2);
Uint8List base64String = base64Decode(base64Str); // LOAD DATA
return base64String;
} catch (e) {
print(e);
print("IN CATCH");
return null;
}
}