Flutter 如何在flatter中获取手机号码

Flutter 如何在flatter中获取手机号码,flutter,flutter-layout,flutter-dependencies,dart-pub,Flutter,Flutter Layout,Flutter Dependencies,Dart Pub,我正在使用“手机号码(版本-1.0.3)”插件在Flatter应用程序中获取手机号码,我在原始设备中运行,但无法获取手机号码。除了错误,我可以将手机号码获取为空以及屏幕截图中显示的其他sim卡详细信息 帮我解决这个问题,我刚刚复制粘贴了插件给出的示例,即代码 上面写着: 注意:如果sim卡上没有手机号码,则不会返回te电话号码 我认为手机号码在SIM卡上不存在如果SIM卡不是原始的(即更换的)如果手机号码没有存储在SIM卡上(也称为空),那么你就无法从其他任何地方获得它,在这种情况下,您可能希望

我正在使用“手机号码(版本-1.0.3)”插件在Flatter应用程序中获取手机号码,我在原始设备中运行,但无法获取手机号码。除了错误,我可以将手机号码获取为空以及屏幕截图中显示的其他sim卡详细信息

帮我解决这个问题,我刚刚复制粘贴了插件给出的示例,即代码 上面写着: 注意:如果sim卡上没有手机号码,则不会返回te电话号码


我认为手机号码在SIM卡上不存在如果SIM卡不是原始的(即更换的)

如果手机号码没有存储在SIM卡上(也称为空),那么你就无法从其他任何地方获得它,在这种情况下,您可能希望将用户转发到另一个页面,在该页面中,用户可以使用TextField键入电话号码,然后将其存储在某个位置

使用软件包获取手机号码和其他详细信息。比如说

import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:mobile_number/mobile_number.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _mobileNumber = '';
  List<SimCard> _simCard = <SimCard>[];

  @override
  void initState() {
    super.initState();
    MobileNumber.listenPhonePermission((isPermissionGranted) {
      if (isPermissionGranted) {
        initMobileNumberState();
      } else {}
    });

    initMobileNumberState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initMobileNumberState() async {
    if (!await MobileNumber.hasPhonePermission) {
      await MobileNumber.requestPhonePermission;
      return;
    }
    String mobileNumber = '';
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      mobileNumber = (await MobileNumber.mobileNumber)!;
      _simCard = (await MobileNumber.getSimCards)!;
    } on PlatformException catch (e) {
      debugPrint("Failed to get mobile number because of '${e.message}'");
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _mobileNumber = mobileNumber;
    });
  }

  Widget fillCards() {
    List<Widget> widgets = _simCard
        .map((SimCard sim) => Text(
            'Sim Card Number: (${sim.countryPhonePrefix}) - ${sim.number}\nCarrier Name: ${sim.carrierName}\nCountry Iso: ${sim.countryIso}\nDisplay Name: ${sim.displayName}\nSim Slot Index: ${sim.slotIndex}\n\n'))
        .toList();
    return Column(children: widgets);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            children: <Widget>[
              Text('Running on: $_mobileNumber\n'),
              fillCards()
            ],
          ),
        ),
      ),
    );
  }
}
导入'dart:async';
进口“包装:颤振/基础.dart”;
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
导入“包装:手机号码/手机号码.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
字符串_mobileNumber='';
列表_simCard=[];
@凌驾
void initState(){
super.initState();
MobileNumber.listenPhonePermission((已授予许可){
如果(已授予许可){
initMobileNumberState();
}else{}
});
initMobileNumberState();
}
//平台消息是异步的,所以我们用异步方法初始化。
Future initMobileEnumberState()异步{
如果(!wait MobileNumber.hasPhonePermission){
等待MobileNumber.requestPhonePermission;
返回;
}
字符串mobileNumber='';
//平台消息可能会失败,因此我们使用try/catch PlatformException。
试一试{
mobileNumber=(等待mobileNumber.mobileNumber)!;
_simCard=(等待MobileNumber.getSimCards)!;
}平台上异常捕获(e){
debugPrint(“由于“${e.message}”而无法获取手机号码”);
}
//如果在异步平台运行时从树中删除了小部件
//消息正在传输中,我们希望放弃回复而不是呼叫
//设置state以更新我们不存在的外观。
如果(!已安装)返回;
设置状态(){
_mobileNumber=mobileNumber;
});
}
小部件填充卡(){
列表小部件=\u simCard
.map((sim卡)=>文本(
'Sim卡号:(${Sim.countryPhonePrefix})-${Sim.Number}\n载波名称:${Sim.carrierName}\n国家Iso:${Sim.countryIso}\n显示名称:${Sim.displayName}\nSim插槽索引:${Sim.slotIndex}\n\n'))
.toList();
返回列(子项:小部件);
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(
标题:const Text(“插件示例应用程序”),
),
正文:中(
子:列(
儿童:[
Text($\u mobileNumber\n)上运行,
fillCards()
],
),
),
),
);
}
}

我如何解决这个sim卡问题?如果没有插件,我可能会遇到一些问题,因为oppo手机无法使用这个软件包。