m hosting a c# api locally on my machine , while trying to connect to it from my flutter app i kept getting a timeout . This is not my first time trying to connect to a local api so i know that i have to use my private ip address instead of localhost . Tried to shutdown my firewall but when shutting my public network firewall i started to get a connection refused exception(No idea why).The api is working since i tested it with postman.Any help is appreciated and thank u.
This is my screen code:
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:geolocator/geolocator.dart';
import 'package:image_picker/image_picker.dart';
import 'package:orange_app/models/pointage_model.dart';
import 'package:orange_app/services/pointage_api.dart';
import 'package:orange_app/ui/views/vente_affiche.dart';
import 'package:orange_app/ui/views/vente_add.dart';
import 'package:orange_app/view_models/pointage_view_model.dart';
class AddPointage extends StatefulWidget {
const AddPointage({Key? key});
@override
State<AddPointage> createState() => _AddVenteState();
}
class _AddVenteState extends State<AddPointage> {
late final GlobalKey<FormState> _formKey ;
late final TextEditingController _nom;
late final TextEditingController _prenom;
late final TextEditingController _idUserTerrain;
late double? latitude ;
late DateTime Date_pointage;
late double? longitude;
File? faceImage;
Position? position;
@override
void initState() {
super.initState();
_formKey= GlobalKey<FormState>();
_nom=TextEditingController();
_prenom=TextEditingController();
_idUserTerrain=TextEditingController();
Date_pointage=DateTime.now();
}
@override
void dispose(){
_nom.dispose();
_prenom.dispose();
_idUserTerrain.dispose();
super.dispose();
}
@override
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('New Pointage'),
),
body: Center(
child: SingleChildScrollView(
child: Column(
children: <Widget>[
Form(
key: _formKey,
child: Column(
children: [
TextFormField(
validator: (value) {
if (value == null || value.isEmpty ) {
return 'Please enter some text';
}
if (RegExp(r'\d').hasMatch(value)) {
return 'name should not contain numeric characters';
}
return null;
},
controller: _nom
,
decoration: const InputDecoration(
labelText: 'Name',
hintText: 'Enter Your Name',
),
),
TextFormField(
validator: (value) {
if (value == null || value.isEmpty ) {
return 'Please enter some text';
}
if (RegExp(r'\d').hasMatch(value)) {
return 'last name should not contain numeric characters';
}
return null;
},
controller: _prenom,
decoration: const InputDecoration(
labelText: 'Last Name',
hintText: 'Enter Your Last Name',
),
),
TextFormField(
validator: (value) {
if (value == null || value.isEmpty ) {
return 'Please enter some text';
}
if (RegExp(r'[a-zA-Z]').hasMatch(value)) {
return 'id should not contain alphabetic characters';
}return null;},
controller: _idUserTerrain,
decoration: const InputDecoration(
labelText: 'idUserTerrain',
hintText: 'Enter idUserTerrain',
),
),
ElevatedButton(
child: Text('Save'),
onPressed: () async {
if(_formKey.currentState!.validate())
{
PointageViewModel.determinePosition().then((value) {
setState(() {
position = value;
});
});
if (position != null) {
var model=PointageModel(nom: _nom.text.trim(), prenom: _prenom.text.trim(), idUserTerrain: int.parse(_idUserTerrain.text.trim()), longitude: position!.longitude, latitude: position!.latitude, datePointage: DateTime.now());
bool res=await PointageViewModel.createResponse(model);
if(res)
{Navigator.push(
context,
MaterialPageRoute(builder: (context) => AddVente()),
);}
else{
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Error'),
content: Text("An error has occured"),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text("OK"),
),
],
);
},
);
}
} else {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Error'),
content: Text("Unable to get current position."),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text("OK"),
),
],
);
},
);
}
}
},
),
],
)),
// Boutons pour choisir les images
MaterialButton(
child: Text('Choose Face Image'),
onPressed: () async {
XFile? xFile = await ImagePicker()
.pickImage(source: ImageSource.gallery);
if (xFile != null) {
setState(() {
faceImage = File(xFile.path);
});
}
},
),
],
),
),
),
floatingActionButton: FloatingActionButton(
child: Text('Pointer'),
onPressed: () {
Navigator.push(
context, MaterialPageRoute(builder: (context) => AddVente()));
},
),
);
}
}
And this is method where m calling the api:
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:orange_app/models/pointage_model.dart';
import 'package:orange_app/models/vente_model.dart';
import '../global/config/api_connection.dart';
class PointageApi {
static Future<http.Response> createPointage(PointageModel model) async {
var url =Uri.http(Api.apiUrl,Api.baseUrl+Api.addPointage);
var request = http.MultipartRequest('POST', url);
// ... (autres parties du code sont inchangées)
request.fields['nom'] = model.nom;
request.fields['prénom'] = model.prenom;
request.fields['IdUserTerrain'] = model.idUserTerrain.toString();
request.fields['longitude'] = model.longitude.toString();
request.fields['latitude'] = model.latitude.toString();
request.fields['date_Pointage'] = model.datePointage.toIso8601String();
// Ajout des images
if (model.faceImage!= null) {
var faceImageBytes = await model.faceImage!.readAsBytes();
request.files.add(http.MultipartFile.fromBytes(
'FaceImage',
faceImageBytes,
filename: 'faceImage'
));
}
// Vérifier si aucune image n'est enregistrée
if (model.faceImage == null) {
print('Image not uploaded');
}
print(request.fields);
var response = await http.Response.fromStream(await request.send());
return response;
}
}
And finally this is the error(or part of it):
E/flutter ( 9791): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: ClientException with SocketException: Connection timed out (OS Error: Connection timed out, errno = 110), address = 192.168.100.59, port = 45756, uri=http://192.168.100.59:5187/api/Vente/AddPointage E/flutter ( 9791): #0 IOClient.send (package:http/src/io_client.dart:154:7) E/flutter ( 9791): E/flutter ( 9791): #1 BaseRequest.send (package:http/src/base_request.dart:133:22) E/flutter ( 9791): E/flutter ( 9791): #2 PointageApi.createPointage (package:orange_app/services/pointage_api.dart:38:51) E/flutter ( 9791): E/flutter ( 9791): #3 PointageViewModel.createResponse (package:orange_app/view_models/pointage_view_model.dart:9:25) E/flutter ( 9791): E/flutter ( 9791): #4 _AddVenteState.build. (package:orange_app/ui/views/pointage.dart:129:36) E/flutter ( 9791): E/flutter ( 9791):