Mark
Mark

Reputation: 178

Can't POST from Flutter Web with HttpClient

Any help would be appreciated! Or an idea for a better librarly to do a POST from Flutter Web with followRedirects = false. Thanks!!

   HttpClientRequest request = await HttpClient().postUrl(Uri.https("xyz.com:1000", "login"))..followRedirects = false;
    var response = await request.close();

Gives (even if I remove ..followRedirects = false)

Error: Unsupported operation: Platform._version
    at Object.throw_ [as throw] (http://localhost:56880/dart_sdk.js:5331:11)
    at Function._version (http://localhost:56880/dart_sdk.js:56165:17)
    at Function.get version [as version] (http://localhost:56880/dart_sdk.js:56239:27)
    at get _version (http://localhost:56880/dart_sdk.js:56109:27)
    at Function.desc.get [as _version] (http://localhost:56880/dart_sdk.js:5836:17)
    at Function.get version [as version] (http://localhost:56880/dart_sdk.js:56083:26)
    at Object._getHttpVersion (http://localhost:56880/dart_sdk.js:197292:31)
    at new _http._HttpClient.new (http://localhost:56880/dart_sdk.js:192274:28)
    at Function.new (http://localhost:56880/dart_sdk.js:186732:16)
    at login._LoginFormState.new.doLogin (http://localhost:56880/packages/webcargo_mobile/user/login.dart.lib.js:783:50)
    at doLogin.next (<anonymous>)
    at runBody (http://localhost:56880/dart_sdk.js:39049:34)
    at Object._async [as async] (http://localhost:56880/dart_sdk.js:39080:7)
    at login._LoginFormState.new.doLogin (http://localhost:56880/packages/webcargo_mobile/user/login.dart.lib.js:781:20)
    at http://localhost:56880/packages/webcargo_mobile/user/login.dart.lib.js:775:20
    at ink_well._InkResponseState.new.[_handleTap] (http://localhost:56880/packages/flutter/src/material/icon_button.dart.lib.js:50511:42)
    at tap.TapGestureRecognizer.new.invokeCallback (http://localhost:56880/packages/flutter/src/gestures/recognizer.dart.lib.js:203:18)
    at tap.TapGestureRecognizer.new.handleTapUp (http://localhost:56880/packages/flutter/src/gestures/tap.dart.lib.js:417:40)
    at tap.TapGestureRecognizer.new.[_checkUp] (http://localhost:56880/packages/flutter/src/gestures/tap.dart.lib.js:223:12)
    at tap.TapGestureRecognizer.new.handlePrimaryPointer (http://localhost:56880/packages/flutter/src/gestures/tap.dart.lib.js:169:23)
    at tap.TapGestureRecognizer.new.handleEvent (http://localhost:56880/packages/flutter/src/gestures/recognizer.dart.lib.js:458:16)
    at pointer_router.PointerRouter.new.[_dispatch] (http://localhost:56880/packages/flutter/src/gestures/pointer_router.dart.lib.js:103:9)
    at http://localhost:56880/packages/flutter/src/gestures/pointer_router.dart.lib.js:138:26
    at LinkedMap.new.forEach (http://localhost:56880/dart_sdk.js:26136:11)
    at pointer_router.PointerRouter.new.[_dispatchEventToRoutes] (http://localhost:56880/packages/flutter/src/gestures/pointer_router.dart.lib.js:135:29)
    at pointer_router.PointerRouter.new.route (http://localhost:56880/packages/flutter/src/gestures/pointer_router.dart.lib.js:127:37)
    at binding$5.WidgetsFlutterBinding.new.handleEvent (http://localhost:56880/packages/flutter/src/gestures/binding.dart.lib.js:331:26)
    at binding$5.WidgetsFlutterBinding.new.dispatchEvent (http://localhost:56880/packages/flutter/src/gestures/binding.dart.lib.js:314:24)
    at binding$5.WidgetsFlutterBinding.new.dispatchEvent (http://localhost:56880/packages/flutter/src/rendering/layer.dart.lib.js:6087:13)
    at binding$5.WidgetsFlutterBinding.new.[_handlePointerEventImmediately] (http://localhost:56880/packages/flutter/src/gestures/binding.dart.lib.js:285:14)
    at binding$5.WidgetsFlutterBinding.new.handlePointerEvent (http://localhost:56880/packages/flutter/src/gestures/binding.dart.lib.js:258:43)
    at binding$5.WidgetsFlutterBinding.new.[_flushPointerEventQueue] (http://localhost:56880/packages/flutter/src/gestures/binding.dart.lib.js:247:14)
    at binding$5.WidgetsFlutterBinding.new.[_handlePointerDataPacket] (http://localhost:56880/packages/flutter/src/gestures/binding.dart.lib.js:237:65)
    at Object.invoke1 (http://localhost:56880/dart_sdk.js:183501:7)
    at _engine.EnginePlatformDispatcher.__.invokeOnPointerDataPacket (http://localhost:56880/dart_sdk.js:163995:15)
    at _engine.PointerBinding.__.[_onPointerData] (http://localhost:56880/dart_sdk.js:164629:49)
    at http://localhost:56880/dart_sdk.js:165081:26
    at http://localhost:56880/dart_sdk.js:165034:16
    at http://localhost:56880/dart_sdk.js:164733:11

Upvotes: 3

Views: 3769

Answers (2)

pk pulse fall
pk pulse fall

Reputation: 90

If you want to make a post request (or any request) to a server that you own or some other rest API, then I could recommend that you use the HTTP library for Flutter.

Here is how I made a post request in my project.

import 'package:http/http.dart' as http;

and

  Future check(String apiexten, Map <String,dynamic> json) async{
    final http.Response response = await http.post('http://192.168.1.4:3000/$apiexten',
      headers: <String,String>{
        'Content-Type': 'application/json; charset=UTF-8',
      },
      body: jsonEncode(json));
    return jsonDecode(response.body);
  }

Just replace the url I am using with whatever you are using and you should be good.

Upvotes: 0

Christopher Moore
Christopher Moore

Reputation: 17123

dart:io is not supported in Flutter web. You should have been getting a linter warning/error. Use the http package.

To not follow redirects with the http package, set the followRedirects property to false.

//Construct the request
final req = Request('POST', Uri.https("xyz.com:1000", "login"));

//Set the body
req.body = ...;

//Disable redirects
req.followRedirects = false;

//Send request
final resp = await req.send();

//Handle response
final respStr = await resp.bytesToString();

Upvotes: 3

Related Questions