我创建了一个简单的代码,如下图所示显示网络状态:
与以下代码有关:
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:android_device_info/android_device_info.dart';
import '../widgets/row_item.dart';
class NetworkTab extends StatefulWidget {
@override
_NetworkTabState createState() => _NetworkTabState();
}
class _NetworkTabState extends State<NetworkTab> {
var data = {};
@override
void initState() {
super.initState();
getData();
}
getData() async {
var data = {};
final memory = await AndroidDeviceInfo().getNetworkInfo();
final display = await AndroidDeviceInfo().getNfcInfo();
var sim = await AndroidDeviceInfo().getSimInfo();
data.addAll(memory);
data.addAll(display);
data.addAll(sim);
if (mounted) {
setState(() {
this.data = data;
});
}
var permission =
await PermissionHandler().checkPermissionStatus(PermissionGroup.phone);
if (permission == PermissionStatus.denied) {
var permissions =
await PermissionHandler().requestPermissions([PermissionGroup.phone]);
if (permissions[PermissionGroup.phone] == PermissionStatus.granted) {
sim = await AndroidDeviceInfo().getSimInfo();
data.addAll(sim);
if (mounted) {
setState(() {
this.data = data;
});
}
}
}
}
@override
Widget build(BuildContext context) {
if (data.isEmpty) {
return Center(child: CircularProgressIndicator());
}
return SingleChildScrollView(
child: Column(
children: <Widget>[
Divider(),
RowItem('Network Available', '${data['isNetworkAvailable']}'),
RowItem('Network', '${data['networkType']}'),
RowItem('iPv4 Address', '${data['iPv4Address']}'),
RowItem('iPv6 Address', '${data['iPv6Address']}'),
RowItem('WiFi Enabled', '${data['isWifiEnabled']}'),
RowItem('WiFi SSID', '${data['wifiSSID']}'),
RowItem('WiFi BSSID', '${data['wifiBSSID']}'),
RowItem('WiFi Speed', '${data['wifiLinkSpeed']}'),
RowItem('Signal strength(Cellular)', '???'),
RowItem('WiFi MAC', '${data['wifiMAC']}'),
Divider(),
RowItem('NFC Present', '${data['isNfcPresent']}'),
RowItem('NFC Enabled', '${data['isNfcEnabled']}'),
Divider(),
RowItem('IMSI', '${data['imsi']}'),
RowItem('Serial', '${data['serial']}'),
RowItem('Country', '${data['country']}'),
RowItem('Carrier', '${data['carrier']}'),
RowItem('SIM Locked', '${data['isSimNetworkLocked']}'),
RowItem('activeMultiSimInfo', '${data['activeMultiSimInfo']}'),
RowItem('Multi SIM', '${data['isMultiSim']}'),
RowItem('Active SIM(s)', '${data['numberOfActiveSim']}'),
Divider(),
],
),
);
}
}
所以现在我有两种类型的网络:
因此,如果网络类型为Cellular
,我现在需要计算下图所示的信号强度:
有没有显示信号强度值的插件,或者我可以使用连通性插件来计算它....
如果我使用连通性插件,如何通过该插件计算Signal strength
的值。
我希望这足够清楚。
答案 0 :(得分:0)
使用internet_speed_test插件。我使用相同的互联网速度。通过使用以下代码,我已经在“文本”小部件上显示了信号强度
final internetSpeedTest = InternetSpeedTest();
internetSpeedTest.startDownloadTesting(
onDone: (double transferRate, SpeedUnit unit) {
// TODO: Change UI
},
onProgress: (double percent, double transferRate, SpeedUnit unit) {
// TODO: Change UI
setState(() {
if (unit == SpeedUnit.Kbps) {
speed = transferRate.toStringAsPrecision(3) + ' Kbps';
}
if (unit == SpeedUnit.Mbps) {
speed = transferRate.toStringAsPrecision(3) + ' Mbps';
}
});
},
onError: (String errorMessage, String speedTestError) {
// TODO: Show toast error
},
// testServer: fetchLatestAppVersionCodeUri.toString(),
//Your test server URL goes here,
);