Home > other >  How to navigate to the next Material page after getting Successful API response using Multipart requ
How to navigate to the next Material page after getting Successful API response using Multipart requ

Time:09-24

I believe response.statusCode == 200 from my Api because its printing Uploaded! How can I store my API response in a variable (Lets say "jsonResponse") so that I can pass it to my new MaterialPage DieticianAfterDateSelectPage?

The Error:

    The method '[]' was called on null.
Receiver: null
Tried calling: []("Status")
The relevant error-causing widget was
MaterialApp
lib\main.dart:19

//

      Future<void> SaveCustomTestBooking() async {


var jsonResponse;
if (EncUserId.isNotEmpty) {
   var postUri = Uri.parse("http://medbo.digitalicon.in/json/SaveCustomTestBooking");
  var request  = http.MultipartRequest('POST',postUri);
  request.fields['VisitDate'] = '_selectedDate';
  request.fields['EncUserId'] = 'EncUserId';

    request.files.add(new http.MultipartFile.fromBytes(
    "UserFile", File(image!.path).readAsBytesSync(),
    filename:"Image.jpg",
    contentType: MediaType('image', 'jpg')));

   request.send().then((response){
     if (response.statusCode == 200) {

       print("Uploaded!"); //From here.............
        Navigator.push(context, MaterialPageRoute(builder: (context) => DieticianAfterDateSelectPage(rresponse:DieticianEncBookingIdModel.fromJson(jsonResponse),)));
       
   } else {
    ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text("Somthing went wrong")));
    throw Exception("Faild to fetch");

   }
   }


   );}

My variable image contain my gallery image after method call.

    final ImagePicker _picker = ImagePicker();
  File? image;
  var fileContent;
  var fileContentBase64;

Function to get image from gallery

    void filePicker() async {
final File? selectedImage =
    await ImagePicker.pickImage(source: ImageSource.gallery);
print(selectedImage!.path);
setState(() {
  image = selectedImage;
  
   fileContent = image!.readAsBytesSync();
   fileContentBase64 = base64.encode(fileContent); 
});
}

CodePudding user response:

It's not very clear how to help. I can see that you are passing a value to DieticianAfterDateSelectPage, and your error message. But you are asking how to store the value in a variable!

What you probably need is to understand the error message. You are getting it because you are calling the [] operator on null. You need to check how that's happening, and check the line number 19 in your main.dart as in the error message.

CodePudding user response:

This is how I print my Multipart request body

   Future<void> SaveCustomTestBooking() async {
var jsonResponse;
if (EncUserId.isNotEmpty) {
  var response = http.MultipartRequest('POST',Uri.parse("http://myApiTestBooking"));

  response.fields['VisitDate'] = _selectedDate;
  response.fields['EncUserId'] = EncUserId;
  response.fields['Description'] = testTextController.text;

  response.files.add(new http.MultipartFile.fromBytes(
    "UserFile", File(image!.path).readAsBytesSync(),
    filename:"Image.jpg",
    contentType: MediaType('image', 'jpg')));



  response.send().then((response) async {
  if (response.statusCode == 200){
    isApiCallProcess = false;
    final respBody = await response.stream.bytesToString();// this is how we print body for Multipart request
     jsonResponse = json.decode(respBody.toString());
    print(respBody);
    print("Uploaded!");

    ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text("Booked"),
          backgroundColor: Color(0xFF00b3a4),
          ));

       //  Navigator.push(context,new MaterialPageRoute( builder: (context) =>new MyTestReqDetailsPage(),));
         Navigator.push(context,new MaterialPageRoute( builder: (context) =>new Home2(),));

  } 
});


}
}
  • Related