Android studio 将自定义数据传递到Flatter webview中的tawk.to

Android studio 将自定义数据传递到Flatter webview中的tawk.to,android-studio,flutter,dart,Android Studio,Flutter,Dart,我正在使用Flatter_tawk sdk中的类。名称和电子邮件属性工作正常,但自定义字段未通过。是否有人可以解释此问题 import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; import 'tawk_visitor.dart'; /// [Tawk] Widget. class Tawk extends St

我正在使用Flatter_tawk sdk中的类。名称和电子邮件属性工作正常,但自定义字段未通过。是否有人可以解释此问题

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

import 'tawk_visitor.dart';

/// [Tawk] Widget.
class Tawk extends StatefulWidget {
  /// Tawk direct chat link.
  final String directChatLink;

  /// Object used to set the visitor name and email.
  final TawkVisitor visitor;

  /// Called right after the widget is rendered.
  final Function() onLoad;

  /// Called when a link pressed.
  final Function(String url) onLinkTap;

  /// Render your own loading widget.
  final Widget placeholder;

  Tawk({
    @required this.directChatLink,
    this.visitor,
    this.onLoad,
    this.onLinkTap,
    this.placeholder,
  });

  @override
  _TawkState createState() => _TawkState();
}

class _TawkState extends State<Tawk> {
  WebViewController _controller;
  bool _isLoading = true;

  void _setUser(TawkVisitor visitor) {
    print(visitor);
    final json = jsonEncode(visitor);
    print(json);
    final javascriptString = 'Tawk_API.setAttributes($json);';

    _controller.evaluateJavascript(javascriptString);
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        WebView(
          initialUrl: widget.directChatLink,
          javascriptMode: JavascriptMode.unrestricted,
          onWebViewCreated: (WebViewController webViewController) {
            setState(() {
              _controller = webViewController;
            });
          },
          navigationDelegate: (NavigationRequest request) {
            if (widget.onLinkTap != null) {
              widget.onLinkTap(request.url);
            }
            return NavigationDecision.navigate;
          },
          onPageFinished: (_) {
            if (widget.visitor != null) {
              _setUser(widget.visitor);
            }
            if (widget.onLoad != null) {
              widget.onLoad();
            }
            setState(() {
              _isLoading = false;
            });
          },
        ),
        _isLoading
            ? widget.placeholder ??
                const Center(
                  child: CircularProgressIndicator(),
                )
            : Container(),
      ],
    );
  }
}
导入'dart:convert';
进口“包装:颤振/材料.省道”;
导入“package:webview_flatter/webview_flatter.dart”;
导入“tawk_visitor.dart”;
///[Tawk]小部件。
类Tawk扩展StatefulWidget{
///Tawk直接聊天链接。
最终字符串directChatLink;
///对象,用于设置访问者名称和电子邮件。
最后的塔克来访者;
///在呈现小部件后立即调用。
final Function()onLoad;
///按下链接时调用。
最终函数(字符串url)onLinkTap;
///呈现您自己的加载小部件。
最终窗口小部件占位符;
塔克({
@需要此.directChatLink,
这位客人,
这个.onLoad,
这个.onLinkTap,
这个占位符,
});
@凌驾
_TawkState createState()=>\u TawkState();
}
类_TawkState扩展了状态{
WebViewController\u控制器;
bool_isLoading=true;
void\u setUser(TawkVisitor){
印刷品(访客);
最终json=jsonEncode(访客);
打印(json);
final javascriptString='Tawk_API.setAttributes($json);';
_evaluateJavascript(javascriptString);
}
@凌驾
小部件构建(构建上下文){
返回堆栈(
儿童:[
网络视图(
initialUrl:widget.directChatLink,
javascriptMode:javascriptMode.unrestricted,
onWebViewCreated:(WebViewController WebViewController){
设置状态(){
_控制器=webViewController;
});
},
navigationDelegate:(NavigationRequest请求){
if(widget.onLinkTap!=null){
onLinkTap(request.url);
}
返回NavigationDecision.navigate;
},
onPageFinished:(){
if(widget.visitor!=null){
_setUser(widget.visitor);
}
if(widget.onLoad!=null){
widget.onLoad();
}
设置状态(){
_isLoading=false;
});
},
),
_卸载
?widget.placeholder??
康斯特中心(
子对象:CircularProgressIndicator(),
)
:Container(),
],
);
}
}

导入“tawk_visitor.dart”;
///[Tawk]小部件。
类Tawk扩展StatefulWidget{
///Tawk直接聊天链接。
最终字符串directChatLink;
///对象,用于设置访问者名称和电子邮件。
最后的塔克来访者;
///在呈现小部件后立即调用。
final Function()onLoad;
///按下链接时调用。
最终函数(字符串url)onLinkTap;
///呈现您自己的加载小部件。
最终窗口小部件占位符;
塔克({
@需要此.directChatLink,
这位客人,
这个.onLoad,
这个.onLinkTap,
这个占位符,
});
@凌驾
_TawkState createState()=>\u TawkState();
}
类_TawkState扩展了状态{
WebViewController\u控制器;
bool_isLoading=true;
void\u setUser(TawkVisitor){
印刷品(访客);
最终json=jsonEncode(访客);
打印(json);
final javascriptString='Tawk_API.setAttributes($json);';
_evaluateJavascript(javascriptString);
}
@凌驾
小部件构建(构建上下文){
返回堆栈(
儿童:[
网络视图(
initialUrl:widget.directChatLink,
javascriptMode:javascriptMode.unrestricted,
onWebViewCreated:(WebViewController WebViewController){
设置状态(){
_控制器=webViewController;
});
},
navigationDelegate:(NavigationRequest请求){
if(widget.onLinkTap!=null){
onLinkTap(request.url);
}
返回NavigationDecision.navigate;
},
onPageFinished:(){
if(widget.visitor!=null){
_setUser(widget.visitor);
}
if(widget.onLoad!=null){
widget.onLoad();
}
设置状态(){
_isLoading=false;
});
},
),
_卸载
?widget.placeholder??
康斯特中心(
子对象:CircularProgressIndicator(),
)
:Container(),
],
);
}
}

我的小部件代码

塔克( directChatLink: 'https://tawk.to/chat/***************/默认', 参观者: TawkVisitor(姓名:姓名,电子邮件:电子邮件,客户ID:ClientID), ),

import 'tawk_visitor.dart';

/// [Tawk] Widget.
class Tawk extends StatefulWidget {
  /// Tawk direct chat link.
  final String directChatLink;

  /// Object used to set the visitor name and email.
  final TawkVisitor visitor;

  /// Called right after the widget is rendered.
  final Function() onLoad;

  /// Called when a link pressed.
  final Function(String url) onLinkTap;

  /// Render your own loading widget.
  final Widget placeholder;

  Tawk({
    @required this.directChatLink,
    this.visitor,
    this.onLoad,
    this.onLinkTap,
    this.placeholder,
  });

  @override
  _TawkState createState() => _TawkState();
}

class _TawkState extends State<Tawk> {
  WebViewController _controller;
  bool _isLoading = true;

  void _setUser(TawkVisitor visitor) {
    print(visitor);
    final json = jsonEncode(visitor);
    print(json);
    final javascriptString = 'Tawk_API.setAttributes($json);';

    _controller.evaluateJavascript(javascriptString);
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        WebView(
          initialUrl: widget.directChatLink,
          javascriptMode: JavascriptMode.unrestricted,
          onWebViewCreated: (WebViewController webViewController) {
            setState(() {
              _controller = webViewController;
            });
          },
          navigationDelegate: (NavigationRequest request) {
            if (widget.onLinkTap != null) {
              widget.onLinkTap(request.url);
            }
            return NavigationDecision.navigate;
          },
          onPageFinished: (_) {
            if (widget.visitor != null) {
              _setUser(widget.visitor);
            }
            if (widget.onLoad != null) {
              widget.onLoad();
            }
            setState(() {
              _isLoading = false;
            });
          },
        ),
        _isLoading
            ? widget.placeholder ??
                const Center(
                  child: CircularProgressIndicator(),
                )
            : Container(),
      ],
    );
  }
}