Connective
Pengantar
Nylo Website menyediakan widget dan utilitas yang sadar konektivitas untuk membantu Anda membangun aplikasi yang merespons perubahan jaringan. Widget Connective secara otomatis membangun ulang saat konektivitas berubah, sementara helper NyConnectivity menyediakan method statis untuk memeriksa status koneksi.
Widget Connective
Widget Connective mendengarkan perubahan konektivitas dan membangun ulang berdasarkan status jaringan saat ini.
Builder Berbasis State
Berikan widget berbeda untuk setiap jenis koneksi:
Connective(
onWifi: Text('Connected via WiFi'),
onMobile: Text('Connected via Mobile Data'),
onNone: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.wifi_off, size: 64),
Text('No internet connection'),
],
),
child: Text('Connected'), // Default for unspecified states
)
State yang Tersedia
| Properti | Deskripsi |
|---|---|
onWifi |
Widget saat terhubung melalui WiFi |
onMobile |
Widget saat terhubung melalui data seluler |
onEthernet |
Widget saat terhubung melalui Ethernet |
onVpn |
Widget saat terhubung melalui VPN |
onBluetooth |
Widget saat terhubung melalui Bluetooth |
onOther |
Widget untuk jenis koneksi lainnya |
onNone |
Widget saat offline |
child |
Widget default jika tidak ada handler spesifik yang disediakan |
Builder Kustom
Gunakan Connective.builder untuk kontrol penuh atas UI:
Connective.builder(
builder: (context, state, results) {
if (state == NyConnectivityState.none) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.cloud_off, size: 64, color: Colors.grey),
SizedBox(height: 16),
Text('You are offline'),
ElevatedButton(
onPressed: () => Navigator.pop(context),
child: Text('Go Back'),
),
],
),
);
}
// Show connection type
return Text('Connected via: ${state.name}');
},
)
Builder menerima:
context- BuildContextstate- EnumNyConnectivityState(wifi, mobile, ethernet, vpn, bluetooth, other, none)results-List<ConnectivityResult>untuk memeriksa beberapa koneksi
Mendengarkan Perubahan
Gunakan onConnectivityChanged untuk bereaksi saat konektivitas berubah:
Connective(
onConnectivityChanged: (state, results) {
if (state == NyConnectivityState.none) {
showSnackbar('You went offline');
} else {
showSnackbar('Back online!');
}
},
child: MyContent(),
)
Widget OfflineBanner
Tampilkan banner di bagian atas layar saat offline:
Scaffold(
body: Stack(
children: [
// Your main content
MyPageContent(),
// Offline banner (auto-hides when online)
OfflineBanner(),
],
),
)
Menyesuaikan Banner
OfflineBanner(
message: 'Check your connection',
backgroundColor: Colors.orange,
textColor: Colors.white,
icon: Icons.signal_wifi_off,
height: 50,
animate: true, // Slide in/out animation
animationDuration: Duration(milliseconds: 200),
)
Helper NyConnectivity
Kelas NyConnectivity menyediakan method statis untuk memeriksa konektivitas:
Memeriksa Online/Offline
if (await NyConnectivity.isOnline()) {
// Make API request
final data = await api.fetchData();
} else {
// Load from cache
final data = await cache.getData();
}
// Or check if offline
if (await NyConnectivity.isOffline()) {
showOfflineMessage();
}
Memeriksa Jenis Koneksi Tertentu
if (await NyConnectivity.isWifi()) {
// Download large files on WiFi
await downloadLargeFile();
}
if (await NyConnectivity.isMobile()) {
// Warn about data usage
showDataWarning();
}
// Other methods:
await NyConnectivity.isEthernet();
await NyConnectivity.isVpn();
await NyConnectivity.isBluetooth();
Mendapatkan Status Saat Ini
// Get all active connection types
List<ConnectivityResult> results = await NyConnectivity.status();
if (results.contains(ConnectivityResult.wifi)) {
print('WiFi is active');
}
// Get human-readable string
String type = await NyConnectivity.connectionTypeString();
print('Connected via: $type'); // "WiFi", "Mobile", "None", etc.
Mendengarkan Perubahan
StreamSubscription subscription = NyConnectivity.stream().listen((results) {
if (results.contains(ConnectivityResult.none)) {
showOfflineUI();
} else {
showOnlineUI();
}
});
// Don't forget to cancel when done
@override
void dispose() {
subscription.cancel();
super.dispose();
}
Eksekusi Bersyarat
// Execute only when online (returns null if offline)
final data = await NyConnectivity.whenOnline(() async {
return await api.fetchData();
});
if (data == null) {
showOfflineMessage();
}
// Execute different callbacks based on status
final result = await NyConnectivity.when(
online: () async => await api.fetchData(),
offline: () async => await cache.getData(),
);
Extension Widget
Tambahkan kesadaran konektivitas ke widget apa pun dengan cepat:
Tampilkan Alternatif Offline
// Show a different widget when offline
MyContent().connectiveOr(
offline: Text('Content unavailable offline'),
)
Hanya Tampilkan Saat Online
// Hide completely when offline
SyncButton().onlyOnline()
Hanya Tampilkan Saat Offline
// Show only when offline
OfflineMessage().onlyOffline()
Parameter
Connective
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
onWifi |
Widget? |
- | Widget saat di WiFi |
onMobile |
Widget? |
- | Widget saat di data seluler |
onEthernet |
Widget? |
- | Widget saat di Ethernet |
onVpn |
Widget? |
- | Widget saat di VPN |
onBluetooth |
Widget? |
- | Widget saat di Bluetooth |
onOther |
Widget? |
- | Widget untuk koneksi lainnya |
onNone |
Widget? |
- | Widget saat offline |
child |
Widget? |
- | Widget default |
showLoadingOnInit |
bool |
false |
Tampilkan loading saat memeriksa |
loadingWidget |
Widget? |
- | Widget loading kustom |
onConnectivityChanged |
Function? |
- | Callback saat berubah |
OfflineBanner
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
message |
String |
'No internet connection' |
Teks banner |
backgroundColor |
Color? |
Colors.red.shade700 |
Warna latar banner |
textColor |
Color? |
Colors.white |
Warna teks |
icon |
IconData? |
Icons.wifi_off |
Ikon banner |
height |
double |
40 |
Tinggi banner |
animate |
bool |
true |
Aktifkan animasi slide |
animationDuration |
Duration |
300ms |
Durasi animasi |
Enum NyConnectivityState
| Nilai | Deskripsi |
|---|---|
wifi |
Terhubung melalui WiFi |
mobile |
Terhubung melalui data seluler |
ethernet |
Terhubung melalui Ethernet |
vpn |
Terhubung melalui VPN |
bluetooth |
Terhubung melalui Bluetooth |
other |
Jenis koneksi lainnya |
none |
Tidak ada koneksi |