Flutter 网络托管应用程序无法识别外部功能
Flutter web-hosted app doesn't recognize external functions
我在 GitHub 页面上托管了一个在 Flutter 上制作的网站,我正在使用 Dart-JS interop 连接 Solana 钱包。当我在本地测试时,我可以连接到它并且工作正常,但是一旦我在 GitHub 页面上托管网络,我就会收到以下错误:Uncaught TypeError: p.isPhantomInstalled is not a function
这是我的 Dart 代码:
@JS('walletModule.ClientWallet')
class ClientWallet {
external Future<void> connect();
external void disconnect();
external String get address;
external Future<void> signTransaction();
external bool isPhantomInstalled();
}
class WalletController extends GetxController {
Future<void> connectWallet(context) async {
ClientWallet wallet = ClientWallet();
if (wallet.isPhantomInstalled()) {
await promiseToFuture(wallet.connect());
createSnackbar('success', 'Wallet Connected');
} else {
createSnackbar('error', 'No Phantom wallet detected');
}
}
这是我的JS代码:
class ClientWallet {
constructor() {
this.address = '';
}
async connect() {
const resp = await window.solana.connect();
this.address = resp.publicKey.toString();
}
address() {
return this.address;
}
isPhantomInstalled() {
return window.solana && window.solana.isPhantom;
}
disconnect() {
window.solana.disconnect();
}
}
var walletModule = { ClientWallet: ClientWallet };
似乎在托管时,该应用无法识别 外部 功能?我不知道为什么或如何解决它。
在阅读了您关于将 Phantom 钱包与 Flutter 连接的原始 post 之后,我决定自己尝试一下,最终 运行 遇到了与您相同的问题,具体功能打电话!
我的解决方案(解决方法)是使用独立函数而不是方法。
我不知道为什么,但出于某种原因,Dart-JS 互操作在 flutter build web
之后停止处理 class 个实例。我带有 class 个实例的缩小 JS 代码与 flutter run -d chrome
.
配合得很好
编辑:
这是我开始工作的phantom.ts
。
const solanaWeb3 = require('@solana/web3.js');
export async function connect(): solanaWeb3.PublicKey {
const resp = await window.solana.connect();
return new solanaWeb3.PublicKey(resp.publicKey.toString());
}
export function disconnect() {
window.solana.disconnect();
}
export function isPhantomInstalled(): bool {
return window.solana && window.solana.isPhantom;
}
export async function signTransaction(tx: solanaWeb3.Transaction): solanaWeb3.Transaction {
return await window.solana.signTransaction(tx);
}
然后是 Dart 端,interop 是一样的,只是没有 class 定义。我将很快写一个 Medium post / 发布一个带有示例的 GitHub 回购协议。
我在 GitHub 页面上托管了一个在 Flutter 上制作的网站,我正在使用 Dart-JS interop 连接 Solana 钱包。当我在本地测试时,我可以连接到它并且工作正常,但是一旦我在 GitHub 页面上托管网络,我就会收到以下错误:Uncaught TypeError: p.isPhantomInstalled is not a function
这是我的 Dart 代码:
@JS('walletModule.ClientWallet')
class ClientWallet {
external Future<void> connect();
external void disconnect();
external String get address;
external Future<void> signTransaction();
external bool isPhantomInstalled();
}
class WalletController extends GetxController {
Future<void> connectWallet(context) async {
ClientWallet wallet = ClientWallet();
if (wallet.isPhantomInstalled()) {
await promiseToFuture(wallet.connect());
createSnackbar('success', 'Wallet Connected');
} else {
createSnackbar('error', 'No Phantom wallet detected');
}
}
这是我的JS代码:
class ClientWallet {
constructor() {
this.address = '';
}
async connect() {
const resp = await window.solana.connect();
this.address = resp.publicKey.toString();
}
address() {
return this.address;
}
isPhantomInstalled() {
return window.solana && window.solana.isPhantom;
}
disconnect() {
window.solana.disconnect();
}
}
var walletModule = { ClientWallet: ClientWallet };
似乎在托管时,该应用无法识别 外部 功能?我不知道为什么或如何解决它。
在阅读了您关于将 Phantom 钱包与 Flutter 连接的原始 post 之后,我决定自己尝试一下,最终 运行 遇到了与您相同的问题,具体功能打电话!
我的解决方案(解决方法)是使用独立函数而不是方法。
我不知道为什么,但出于某种原因,Dart-JS 互操作在 flutter build web
之后停止处理 class 个实例。我带有 class 个实例的缩小 JS 代码与 flutter run -d chrome
.
编辑:
这是我开始工作的phantom.ts
。
const solanaWeb3 = require('@solana/web3.js');
export async function connect(): solanaWeb3.PublicKey {
const resp = await window.solana.connect();
return new solanaWeb3.PublicKey(resp.publicKey.toString());
}
export function disconnect() {
window.solana.disconnect();
}
export function isPhantomInstalled(): bool {
return window.solana && window.solana.isPhantom;
}
export async function signTransaction(tx: solanaWeb3.Transaction): solanaWeb3.Transaction {
return await window.solana.signTransaction(tx);
}
然后是 Dart 端,interop 是一样的,只是没有 class 定义。我将很快写一个 Medium post / 发布一个带有示例的 GitHub 回购协议。