This example demonstrates how to integrate the SpeedOf.Me speed test API into a Flutter app using webview_flutter.
The SpeedOf.Me API is JavaScript-based, so Flutter apps use WebView to:
# pubspec.yaml
dependencies:
webview_flutter: ^4.4.2
Android (AndroidManifest.xml):
<uses-permission android:name="android.permission.INTERNET" />
iOS (Info.plist):
<key>io.flutter.embedded_views_preview</key>
<true/>
SomApi.account = "YOUR_API_KEY";
SomApi.domainName = "your-domain.com";
Option A: Remote URL
..loadRequest(Uri.parse('https://your-domain.com/speedtest.html'));
Option B: Flutter Asset
..loadFlutterAsset('assets/speedtest.html');
Flutter App
└── SpeedTestScreen (StatefulWidget)
└── WebViewWidget (webview_flutter)
└── speedtest.html
└── SomApi.js
▼
window.SpeedTest.postMessage(json)
▼
JavaScriptChannel.onMessageReceived()
The HTML page sends messages via:
window.SpeedTest.postMessage(JSON.stringify({
type: 'completed',
data: result
}));
Flutter receives them via JavaScriptChannel:
..addJavaScriptChannel(
'SpeedTest', // This becomes window.SpeedTest in JS
onMessageReceived: (message) {
final json = jsonDecode(message.message);
// Handle message
},
)
class SpeedTestResult {
final double download;
final double upload;
final double latency;
final double jitter;
final String? testServer;
}
For larger apps, consider:
StateNotifierProvider<SpeedTestNotifier, SpeedTestState>SpeedTestBloc extends Bloc<SpeedTestEvent, SpeedTestState>ChangeNotifier