Android 颤振字符串在将来为空

Android 颤振字符串在将来为空,android,flutter,dart,Android,Flutter,Dart,我想在此函数中使用一个字符串,该字符串包含设备的电话号码。 我通过以下方式获得电话号码: Future<void> initMobilNumberState() async { if (!await MobileNumber.hasPhonePermission) { await MobileNumber.requestPhonePermission; return; } String mobileNumber = ''; t

我想在此函数中使用一个字符串,该字符串包含设备的电话号码。 我通过以下方式获得电话号码:

Future<void> initMobilNumberState() async {
    if (!await MobileNumber.hasPhonePermission) {
      await MobileNumber.requestPhonePermission;
      return;
    }
    String mobileNumber = '';

    try {
      mobileNumber = await MobileNumber.mobileNumber;
      _simCard = await MobileNumber.getSimCards;
    } on PlatformException catch (e) {
      debugPrint("Failed to get mobile number because of '${e.message}'");
    }

    if (!mounted) return;
    setState(() {
      var re = RegExp(r'\+[^]*');
      _mobileNumber = mobileNumber.replaceRange(0, 3, ''.replaceAll(re, '+'));
    });
  }
Future initMobilNumberState()异步{
如果(!wait MobileNumber.hasPhonePermission){
等待MobileNumber.requestPhonePermission;
返回;
}
字符串mobileNumber='';
试一试{
mobileNumber=等待mobileNumber.mobileNumber;
_simCard=wait MobileNumber.getSimCards;
}平台上异常捕获(e){
debugPrint(“由于“${e.message}”而无法获取手机号码”);
}
如果(!已安装)返回;
设置状态(){
var re=RegExp(r'\+[^]*');
_mobileNumber=mobileNumber.replaceRange(0,3,'.replaceAll(re,'+');
});
}
我的问题是,如果我想打印_mobileNumber或在http.get中使用它,我会得到null或带有“无效参数”的错误

Future\u fetchSampleData()异步{
字符串s=_mobileNumber;
印刷品;
返回http.get('http://test.php?TestPhone='+_-mobileNumber);
}
未来的getDataFromServer()异步{
最终响应=等待_fetchSampleData();
如果(response.statusCode==200){
Map data=json.decode(response.body);
_list=data.values.toList();
}否则{
//如果服务器没有返回200 OK响应,
//然后抛出一个异常。
showAlertNoInternet(上下文);
打印('未能从服务器加载数据');
}
}

我的错误在哪里?

问题是,我想在电话号码被取出来之前就给它打电话。所以这总是导致null。我修复了这一问题,在启动应用程序时,我会在需要所有其他数据的情况下提取该号码。

问题是,我想在提取之前拨打该电话号码。所以这总是导致null。我通过在启动应用程序时获取所需的所有其他数据来修复此问题。

我认为_mobileNumber永远不会在setState()之后填充,请尝试在它之后打印_mobileNumber,为了确保数据是正确的,请填写_mobileNumber。@mam_65我已经打印了它,并且已经填充了它。好的,我相信initMobilNumberState只会在最后一次执行。因此在fetchSampleData中mobilNumber为空。有可能改变订单吗?那么fetchSampleData最终执行了吗@妈妈,我想这句话‘如果(!挂载)返回;’在最后一个原因中,
setState()
未运行且
\u mobileNumber
始终为
null
,首先确保
initMobilNumberState()
工作。您不能更改顺序。首先,你必须填写
\u mobileNumber
,然后调用
\u fetchSampleData
或者任何方法都可以使用
\u mobileNumber
好吗?@mam\u 65好的,多亏了你我管理了它,我很快就会发布正确的代码。我想,\u mobileNumber永远不会在setState()之后填写,尝试在它之后打印\u mobileNumber,为了确保数据是正确的,请填写_mobileNumber。@mam_65我已经打印了它,并且已经填充了它。好的,我相信initMobilNumberState只会在最后一次执行。因此在fetchSampleData中mobilNumber为空。有可能改变订单吗?那么fetchSampleData最终执行了吗@妈妈,我想这句话‘如果(!挂载)返回;’在最后一个原因中,
setState()
未运行且
\u mobileNumber
始终为
null
,首先确保
initMobilNumberState()
工作。您不能更改顺序。首先,您必须填写
\u mobileNumber
,然后调用
\u fetchSampleData
或任何可以使用
\u mobileNumber
的方法,好吗?@mam\u 65好的,多亏了您我管理了它,我将很快发布正确的代码。
  Future<http.Response> _fetchSampleData() async {
    String s = _mobileNumber;
    print(s);
    return http.get('http://test.php?TestPhone=' + _mobileNumber);
  }

  Future<void> getDataFromServer() async {
    final response = await _fetchSampleData();
    if (response.statusCode == 200) {
      Map<String, dynamic> data = json.decode(response.body);
      _list = data.values.toList();
    } else {
      // If the server did not return a 200 OK response,
      // then throw an exception.
      showAlertNoInternet(context);
      print('Failed to load data from server');
    }
  }