The problem is the fetchVersions()
of the DropVersion
is taking null values (taking null values of DropTitre
and DropType
when the interface is opened) instead of waiting that I select Titre and type then he receives the values of them,
so I tested my function in API and it works fine, but when I put the URL in the front the DropVersion
becomes unselectable.
Code of DropTitre :
import 'dart:convert';
import 'package:firstparc/Models/CkTypesCks.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class DropType extends StatefulWidget {
final ValueChanged<String?> onTypeChanged;
DropType({Key? key,required this.onTypeChanged }) : super(key: key);
@override
_DropTypeState createState() => _DropTypeState();
}
class _DropTypeState extends State<DropType> {
String? selectedType;
List<CkTypeCks> types = []; // Liste de titres
@override
void initState() {
super.initState();
fetchType(); // Appel à la fonction pour récupérer les titres
}
// Fonction pour récupérer les titres depuis l'API
Future<void> fetchType() async {
var url = Uri.parse('https://10.0.2.2:7116/api/CkTypeCks');
try {
http.Response response = await http.get(
url,
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body) as List<dynamic>;
setState(() {
types = data.map((json) => CkTypeCks.fromJson(json)).toList();
});
}
} catch (e) {
print('Erreur lors de la récupération des titres : $e');
}
}
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
border:Border.all(color: Colors.black),
color: Colors.white,
),
child: DropdownButtonFormField<CkTypeCks>(
value: null, // La valeur sélectionnée initialement, null ou une valeur par défaut
onChanged: (value) {
setState(() {
selectedType = value!.codeType.toString();
print('Selected Type: ${selectedType}'); // Enregistrement de codeT dans selectedTitre
widget.onTypeChanged(selectedType);
});
},
items: types.map((CkTypeCks type) {
return DropdownMenuItem<CkTypeCks>(
value: type,
child: Text(type.designation), // Affichage de la désignation dans le menu
);
}).toList(),
),
);
}
}
Code of DropType :
import 'dart:convert';
import 'package:firstparc/Models/CkTypesCks.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class DropType extends StatefulWidget {
final ValueChanged<String?> onTypeChanged;
DropType({Key? key,required this.onTypeChanged }) : super(key: key);
@override
_DropTypeState createState() => _DropTypeState();
}
class _DropTypeState extends State<DropType> {
String? selectedType;
List<CkTypeCks> types = []; // Liste de titres
@override
void initState() {
super.initState();
fetchType(); // Appel à la fonction pour récupérer les titres
}
// Fonction pour récupérer les titres depuis l'API
Future<void> fetchType() async {
var url = Uri.parse('https://10.0.2.2:7116/api/CkTypeCks');
try {
http.Response response = await http.get(
url,
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body) as List<dynamic>;
setState(() {
types = data.map((json) => CkTypeCks.fromJson(json)).toList();
});
}
} catch (e) {
print('Erreur lors de la récupération des titres : $e');
}
}
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
border:Border.all(color: Colors.black),
color: Colors.white,
),
child: DropdownButtonFormField<CkTypeCks>(
value: null, // La valeur sélectionnée initialement, null ou une valeur par défaut
onChanged: (value) {
setState(() {
selectedType = value!.codeType.toString();
print('Selected Type: ${selectedType}'); // Enregistrement de codeT dans selectedTitre
widget.onTypeChanged(selectedType);
});
},
items: types.map((CkTypeCks type) {
return DropdownMenuItem<CkTypeCks>(
value: type,
child: Text(type.designation), // Affichage de la désignation dans le menu
);
}).toList(),
),
);
}
}
Code of DropVersion :
import 'dart:convert';
import 'package:firstparc/Models/CkEntete_fiche.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class DropVersion extends StatefulWidget {
final ValueChanged<String?> onCodeChanged;
final String? codeT;
final String? codeType;
DropVersion( {
Key? key,
this.codeT,
this.codeType,
required this.onCodeChanged,
}) : super(key: key);
@override
DropVersionState createState() => DropVersionState();
}
class DropVersionState extends State<DropVersion> {
List<CkEnteteFiche> versions = []; // Liste des versions
@override
void initState() {
super.initState();
// Écoute les changements de codeT et codeType et appelle fetchVersions lorsque les deux sont non nuls
//if (widget.codeT != null && widget.codeType != null) {
fetchVersions();
//}
}
// Fonction pour récupérer les versions depuis l'API en fonction de codeT et codeType
Future<void> fetchVersions() async {
//var url = Uri.parse('https://localhost:7116/api/CkEnteteFiches/${widget.codeT}/${widget.codeType}');
//var url = Uri.parse('https://10.0.2.2:7116/api/CkEnteteFiches/${widget.codeT}/${widget.codeType}');
var url = Uri.parse('https://10.0.2.2:7116/api/CkEnteteFiches/1/1');
print(url);
try {
http.Response response = await http.get(
url,
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body) as List<dynamic>;
print(response.body);
setState(() {
versions = data.map((json) => CkEnteteFiche.fromJson(json)).toList();
});
}
} catch (e) {
print('Erreur lors de la récupération des versions : $e');
}
}
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
border:Border.all(color: Colors.black),
color: Colors.white,
),
child: DropdownButtonFormField<CkEnteteFiche>(
value: null, // La valeur sélectionnée initialement, null ou une valeur par défaut
onChanged: (value) {
final selectedVersion = value!.version.toString();
widget.onCodeChanged(selectedVersion);
print('Selected Version: ${selectedVersion}');
},
items: versions.map((CkEnteteFiche version) {
return DropdownMenuItem<CkEnteteFiche>(
value: version,
child: Text(version.version.toString()), // Affichage de la version dans le menu
);
}).toList(),
),
);
}
}
call in the interface code :
SizedBox(height: 24),
Text(
'Sélectionner un Titre :',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 99, 151, 158),
),
),
DropTitre(
onTitreChanged: (titre) {
setState(() {
selectedTitre = titre;
});
},
),
SizedBox(height: 24),
Text(
'Sélectionner un Type :',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Color(0xFF112F33),
),
),
DropType(
onTypeChanged: (type) {
setState(() {
selectedType = type;
});
},
),
SizedBox(height: 24),
Text(
'Sélectionner une version :',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Color(0xFF112F33),
),
),
DropVersion(
codeT: selectedTitre,
codeType: selectedType,
onCodeChanged: (version) {
setState(() {
selectedVersion = version;
});
},
),
New contributor
Ahmed Zouari is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.