flutter - 无法在Flutter中将参数类型 'String'分配给参数类型 'Uint8List'/postUrl方法

标签 flutter dart

我已经尝试过,但似乎无法通过。我正在尝试使用Flutter的postUrl方法将一些变量发布到webView,但是我一直收到此错误,而且我不确定自己在做什么错。我也尝试过找到一个在线使用此方法的人的示例,但找不到任何东西。有人请帮忙。

page.dart:

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';

Future main() async {
  runApp(new MyPaymentWidget());
}

class MyPaymentWidget extends StatefulWidget {
  RouteArgument routeArgument;
  MyPaymentWidget({Key key, this.routeArgument}) : super(key: key);
  @override
  _MyPaymentWidgetState createState() => new _MyPaymentWidgetState();
}

class _MyPaymentWidgetState extends State<MyPaymentWidget> {

  InAppWebViewController webView;
  String url = "";
  Uint8List postData;
  double progress = 0;

  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
        backgroundColor: Colors.transparent,
        elevation: 0,
        centerTitle: true, 
        title: Text(
          S.of(context).instant_eft_payment,
          style: Theme.of(context).textTheme.title.merge(TextStyle(letterSpacing: 1.3)),
        ),
      ),
        body: Container(
          child: Column(children: <Widget>[
            Container(
                padding: EdgeInsets.all(10.0),
                child: progress < 1.0
                    ? LinearProgressIndicator(value: progress)
                    : Container()),
            Expanded(
              child: Container(
                margin: const EdgeInsets.all(10.0),
                decoration:
                    BoxDecoration(border: Border.all(color: Colors.blueAccent)),
                child: InAppWebView(
                  initialUrl: "https://example.com/",
                  initialHeaders: {},
                  initialOptions: InAppWebViewWidgetOptions(
                    inAppWebViewOptions: InAppWebViewOptions(
                        debuggingEnabled: true,
                    )
                  ),
                  onWebViewCreated: (InAppWebViewController controller) {
                    webView = controller;
                    webView.postUrl(
                      url: 'https://example.com/', 
                      postData: "Amount=1&TransactionReference=some trans ref&BankReference=bank ref&Customer=thiscustomer&isTest=true");
                  },
                  onLoadStart: (InAppWebViewController controller, String url) {
                    setState(() {
                      this.url = url;
                    });
                  },
                  onLoadStop: (InAppWebViewController controller, String url) async {
                    setState(() {
                      this.url = url;
                    });
                  },
                  onProgressChanged: (InAppWebViewController controller, int progress) {
                    setState(() {
                      this.progress = progress / 100;
                    });
                  },
                ),
              ),
            ),
            ButtonBar(
              alignment: MainAxisAlignment.center,
              children: <Widget>[
                RaisedButton(
                  child: Icon(Icons.arrow_back),
                  onPressed: () {
                    if (webView != null) {
                      webView.goBack();
                    }
                  },
                ),
                RaisedButton(
                  child: Icon(Icons.arrow_forward),
                  onPressed: () {
                    if (webView != null) {
                      webView.goForward();
                    }
                  },
                ),
                RaisedButton(
                  child: Icon(Icons.refresh),
                  onPressed: () {
                    if (webView != null) {
                      webView.reload();
                    }
                  },
                ),
              ],
            ),
        ])),
      ),
    );
  }
}```

最佳答案

postDatapostUrl参数是Uint8List,但您要传递给它String。我假设这应该是字符串的codeUnits(UTF-16表示形式)或UTF-8编码。

尝试将以下参数之一作为postData参数传递:

Uint8List.fromList(myPostData.codeUnits);

要么

// This requires dart:convert
Uint8List.fromList(utf8.encode(myPostData));

关于flutter - 无法在Flutter中将参数类型 'String'分配给参数类型 'Uint8List'/postUrl方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59568750/

相关文章:

json - 映射嵌套 JSON 时如何检查 NULL?

Flutter 下载文件到手机下载目录

dart - Material Flutter 应用源码

flutter - Flutter shared_preferences getString()不返回字符串?

Flutter OpenContainer 动画行为

Flutter:制作自定义小部件的最佳做法是什么?

flutter - 是否可以屈服于 Dart 中的外部作用域?

flutter - Flutter:使用Streambuilder <QuerySnapshot>时如何在Firestore中获取特定文档

list - 在Flutter中点击其中一个元素时,如何更改列表中其他元素的属性

node.js - 状态错误 : Insecure HTTP is not allowed by platform: