通过 Flutter 开发的应用程序给出输入时,Solid 代码未给出所需的输出

问题描述 投票:0回答:1

所以我正在为我的土木工程学位最后一年的项目制作一个 web3 应用程序

我初始化了我的 http 客户端

 Client? httpClient;
  Web3Client? ethClient;
  @override
  void initState(){
    super.initState();
    httpClient = Client();
    ethClient = Web3Client(infura_url, httpClient!);
  }

将我的所有功能输入到android studio中

Future<DeployedContract> loadContract ()async{
  print('loading contract');
  String abi = await rootBundle.loadString('Assets/abi.json');
  String ContractAddress = contractAddress;
  final contract = DeployedContract(ContractAbi.fromJson(abi, 'Login'), EthereumAddress.fromHex(ContractAddress));
  return contract;
}
Future<String> Login(Web3Client ethClient, String _username, String _password)async{
  DeployedContract contract = await loadContract();
  print('contract loaded');
  final response = await ethClient.call(contract: contract, function: contract.function('login'), params: [_username,_password],);
  print(response);
  return response[0] as String;
}

我的 flutter UI 代码从文本字段获取值并将其发送到合约,如下所示

 onPressed: () {
              String Utext = UserText.text;
              String Upass = PassText.text;
              print('a$Utext,b$Upass');
              Login(ethClient!, Utext, Upass).then((String isLoggedin){
                print(isLoggedin);
                if(isLoggedin == 'yes'){
                  Navigator.push(context, MaterialPageRoute(builder: (context) => Client_init(),));
                };
              });
            },

我的solidity代码的相关部分也在下面说明

function login(string memory _username, string memory _password) public view returns (string memory) {
        User memory user = users[msg.sender];
        string memory isLoggedin;
        if(keccak256(abi.encodePacked(user.username)) == keccak256(abi.encodePacked(_username)) && 
            keccak256(abi.encodePacked(user.password)) == keccak256(abi.encodePacked(_password))){
            isLoggedin = "yes";
        }
        else{
            isLoggedin = "no";
        }
        return isLoggedin;
    }

现在,每当我在 flutter 应用程序的文本字段中输入正确的值并按登录时,我都会得到答案 [否],即使我应该得到 [是],这意味着我的应用程序能够访问此合约并对其进行解码,所以我的 abi 或 ethClient 初始化没有任何问题,我处理这个异步函数的方式也没有问题,对吧?那么为什么当我应该得到“是”时我仍然得到[否]作为答案。

另外,我的注册函数会抛出 32000 无效发件人错误,即使我使用我的个人密钥进行该交易,任何人都可以告诉我,我收到无效发件人错误的原因是什么?

请帮助睡眠不足的学生:,)

我想在我的 flutter 应用程序中输入名称和密码,并让应用程序从智能合约中验证它并给我一个 [yes] 的输出

flutter solidity web3dart
1个回答
0
投票

在请求中包含 msg.sender (fromAddress)

© www.soinside.com 2019 - 2024. All rights reserved.