Home > Mobile >  How do I switch from local host : 3000 to something ready for production in Flutter using dio?
How do I switch from local host : 3000 to something ready for production in Flutter using dio?

Time:10-12

I am using dio to make a network request. In testing phases I was using local host port 3000. I was using a javascript file and node to run it in testing mode. I would simply run node on the javascript file it would fire up the port at it would work. This was great but whenever I run it on a real device it does not work. So I am assuming I need to change it to something else for release...? I am new bare with me. Any suggestion or guidance would be helpful thank you.

const muxServerUrl = 'http://localhost:3000';


 initializeDio() {
    BaseOptions options = BaseOptions(
      baseUrl: muxServerUrl,
      connectTimeout: 8000,
      receiveTimeout: 5000,
      headers: {
        "Content-Type": contentType, // application/json
      },
    );
    _dio = Dio(options);
  }

Implementation

late Response response;
try {

  // print(response);
  response = await _dio.post(
    "/assets",
    data: {
      "videoUrl": videoUrl,
    },
  );
} catch (e) {
    print('ran 2');

  throw Exception('Failed to store video on MUX');
}

if (response.statusCode == 200) {
    print('ran 4');
  VideoData videoData = VideoData.fromJson(response.data);

  String status = videoData.data!.status;

  while (status == 'preparing') {
  
    await Future.delayed(Duration(seconds: 1));
    videoData = (await checkPostStatus(videoId: videoData.data!.id))!;
    status = videoData.data!.status;
  }

  print('Video READY, id: ${videoData.data!.id}');

  return videoData;
}

That Node Temp JS file

require("dotenv").config();
const express = require("express");
const bodyParser = require("body-parser");
const Mux = require("@mux/mux-node");
const { Video } = new Mux(
  process.env.MUX_TOKEN_ID,
  process.env.MUX_TOKEN_SECRET
);
const app = express();
const port = 3000;

var jsonParser = bodyParser.json();

app.post("/assets", jsonParser, async (req, res) => {
  console.log("BODY: "   req.body.videoUrl);

  const asset = await Video.Assets.create({
    input: req.body.videoUrl,
    playback_policy: "public",
  });

  res.json({
    data: {
      id: asset.id,
      status: asset.status,
      playback_ids: asset.playback_ids,
      created_at: asset.created_at,
    },
  });
});

app.get("/assets", async (req, res) => {
  const assets = await Video.Assets.list();

  res.json({
    data: assets.map((asset) => ({
      id: asset.id,
      status: asset.status,
      playback_ids: asset.playback_ids,
      created_at: asset.created_at,
      duration: asset.duration,
      max_stored_resolution: asset.max_stored_resolution,
      max_stored_frame_rate: asset.max_stored_frame_rate,
      aspect_ratio: asset.aspect_ratio,
    })),
  });
});

app.get("/asset", async (req, res) => {
  let videoId = req.query.videoId;
  const asset = await Video.Assets.get(videoId);

  console.log(asset);

  res.json({
    data: {
      id: asset.id,
      status: asset.status,
      playback_ids: asset.playback_ids,
      created_at: asset.created_at,
      duration: asset.duration,
      max_stored_resolution: asset.max_stored_resolution,
      max_stored_frame_rate: asset.max_stored_frame_rate,
      aspect_ratio: asset.aspect_ratio,
    },
  });
});

app.listen(port, () => {
  console.log(`Mux API listening on port ${port}`);
});

CodePudding user response:

localhost is what's called your loopback address and that's only working because you are running the application on your machine. When you release the app you have to host your Nodejs app in some server and use the IP address of that server instead. Before you host that app I encourage you to spend more time making sure that it secure.

If you just want to run the app on an Android emulator you can use 10.0.2.2 to reach the hosting machine loopback

  • Related