Android studio 将自定义数据传递到Flatter webview中的tawk.to
我正在使用Flatter_tawk sdk中的类。名称和电子邮件属性工作正常,但自定义字段未通过。是否有人可以解释此问题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
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(),
],
);
}
}