dart_ping 10.0.1 copy "dart_ping: ^10.0.1" to clipboard
dart_ping: ^10.0.1 copied to clipboard

Multi-platform ICMP ping for Dart and Flutter — Windows, macOS, Linux, Android, and iOS — with live round-trip statistics and packet-loss summaries.

example/lib/main.dart

import 'dart:async';

import 'package:dart_ping/dart_ping.dart';
import 'package:flutter/material.dart';

void main() {
  // iOS support is built into dart_ping and auto-wires — no second package and
  // no register() call. Just construct Ping(...) and it works on iOS too.
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'DartPing Flutter Demo',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  MyHomePageState createState() => MyHomePageState();
}

class MyHomePageState extends State<MyHomePage> {
  final List<PingEvent> _events = [];
  final TextEditingController _controller = TextEditingController(
    text: 'google.com',
  );
  final TextEditingController _ttlController = TextEditingController(
    text: '64',
  );
  StreamSubscription<PingEvent>? _subscription;

  void _startPing() {
    final ttl = int.tryParse(_ttlController.text) ?? 64;

    // Create instance of DartPing
    final ping = Ping(_controller.text, count: 5, ttl: ttl);
    debugPrint('Running command: ${ping.command}');

    // Drop any previous run before starting a new one so taps don't stack
    // subscriptions all feeding setState.
    _subscription?.cancel();

    setState(() {
      _events.clear();
    });

    _subscription = ping.stream.listen((event) {
      setState(() {
        _events.add(event);
      });
    });
  }

  @override
  void dispose() {
    _subscription?.cancel();
    _controller.dispose();
    _ttlController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final output = _events.isEmpty
        ? 'Push the button to begin ping'
        : _events.map((e) => e.toString()).join('\n');

    return Scaffold(
      appBar: AppBar(title: const Text('DartPing Flutter Demo')),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(24.0),
            child: TextField(
              controller: _controller,
              textAlign: TextAlign.center,
              decoration: const InputDecoration(labelText: 'Host'),
            ),
          ),
          Padding(
            padding: const EdgeInsets.symmetric(horizontal: 24.0),
            child: TextField(
              controller: _ttlController,
              textAlign: TextAlign.center,
              keyboardType: TextInputType.number,
              decoration: const InputDecoration(labelText: 'TTL'),
            ),
          ),
          Expanded(
            child: SingleChildScrollView(
              padding: const EdgeInsets.all(24.0),
              child: Text(output),
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _startPing,
        tooltip: 'Start Ping',
        child: const Icon(Icons.radar_sharp),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}
133
likes
160
points
50.5k
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Multi-platform ICMP ping for Dart and Flutter — Windows, macOS, Linux, Android, and iOS — with live round-trip statistics and packet-loss summaries.

Repository (GitHub)
View/report issues

Topics

#ping #icmp #network

License

BSD-3-Clause (license)

Dependencies

async, code_assets, collection, ffi, hooks

More

Packages that depend on dart_ping