import 'package:auto_size_text/auto_size_text.dart'; import 'package:flutter/material.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_app/Screens/Resources/select_resource_modal.dart'; import 'package:manager_api_new/api.dart'; import 'package:provider/provider.dart'; class AudioInputContainer extends StatefulWidget { final Color color; final String? label; final String? initialValue; final ValueChanged onChanged; final BoxFit imageFit; final bool isSmall; final double fontSize; const AudioInputContainer({ Key? key, this.color = kSecond, this.label, this.initialValue, required this.onChanged, this.imageFit = BoxFit.cover, this.isSmall = false, this.fontSize = 20 }) : super(key: key); @override _AudioInputContainerState createState() => _AudioInputContainerState(); } class _AudioInputContainerState extends State { String? resourceIdToShow; @override void initState() { resourceIdToShow = widget.initialValue; super.initState(); } @override Widget build(BuildContext context) { Size size = MediaQuery.of(context).size; return Container( child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.center, children: [ if(widget.label != null) Align( alignment: AlignmentDirectional.centerStart, child: AutoSizeText( widget.label!, style: TextStyle(fontSize: widget.fontSize, fontWeight: FontWeight.w300), maxLines: 2, maxFontSize: widget.fontSize, textAlign: TextAlign.center, ) ), Container( //color: widget.isSmall ? Colors.cyanAccent: Colors.red, child: Padding( padding: EdgeInsets.only(left: widget.isSmall ? 5 : 10, top: 10, bottom: 10), child: Container( width: size.width *0.125, height: size.width *0.06, child: InkWell( onTap: () async { ResourceDTO? result = await showSelectResourceModal( "Sélectionner une ressource", 1, [ResourceType.Audio], context ); if (result != null) { setState(() { resourceIdToShow = result.id != null ? result.id : null; }); widget.onChanged(result); } }, child: getElement(context), ), ), ), ), ], ), ); } getElement(BuildContext context) { if (resourceIdToShow != null) { Size size = MediaQuery.of(context).size; final appContext = Provider.of(context); return FutureBuilder( future: getResource(resourceIdToShow!, appContext), builder: (context, AsyncSnapshot snapshot) { if (snapshot.connectionState == ConnectionState.done) { if (snapshot.data != null) { return Container( decoration: boxDecoration(snapshot.data!, appContext), child: Center(child: AutoSizeText(snapshot.data!.label!, textAlign: TextAlign.center)), ); } else { return Text("No data"); } } else if (snapshot.connectionState == ConnectionState.none) { return Text("No data"); } else { return Center( child: Container( height: size.height * 0.1, child: LoadingCommon() ) ); } } ); } else { return Container( decoration: BoxDecoration( color: widget.color, borderRadius: BorderRadius.circular(20), ), child: Padding( padding: const EdgeInsets.only(left: 5, right: 5, top: 15, bottom: 15), child: Center( child: AutoSizeText( "Choisir un fichier audio", style: TextStyle(color: kWhite), maxLines: 1, textAlign: TextAlign.center, ) ), ) ); } } Future getResource(String resourceIdToShow, dynamic appContext) async { // Just in resource tab detail not here ResourceDTO? resource = await (appContext.getContext() as ManagerAppContext).clientAPI!.resourceApi!.resourceGetDetail(resourceIdToShow); return resource; } boxDecoration(ResourceDTO resourceDTO, appContext) { return BoxDecoration( shape: BoxShape.rectangle, color: kWhite, borderRadius: BorderRadius.circular(20.0), /*image: new DecorationImage( fit: widget.imageFit, image: resourceDTO.type != null ? new NetworkImage( resourceDTO.type == ResourceType.image ? appContext.getContext().clientAPI.resourceApi.apiClient.basePath+"/api/Resource/"+ resourceDTO.id : resourceDTO.data, ) : null, ),*/ boxShadow: [ BoxShadow( spreadRadius: 0.5, blurRadius: 1, offset: Offset(0, 1.5), // changes position of shadow ), ], ); } }