bonsoir 6.0.1  bonsoir: ^6.0.1 copied to clipboard
bonsoir: ^6.0.1 copied to clipboard
A Zeroconf library that allows you to discover network services and to broadcast your own. Based on Apple Bonjour and Android NSD.
import 'package:bonsoir_example/models/app_service.dart';
import 'package:bonsoir_example/pages/broadcasts.dart';
import 'package:bonsoir_example/pages/discoveries.dart';
import 'package:bonsoir_example/pages/pages.dart';
import 'package:bonsoir_example/widgets/add_icon.dart';
import 'package:bonsoir_example/widgets/bottom_bar.dart';
import 'package:bonsoir_example/widgets/eager_initialization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
/// This file is the entry point of the Bonsoir example project.
/// The full source code is available here :
/// https://github.com/Skyost/Bonsoir/tree/main/packages/bonsoir/example.
///
/// Feel free to check the available code snippets as well :
/// https://bonsoir.skyost.eu/docs#getting-started.
/// Plugin's main method.
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await DefaultAppService.initialize();
  runApp(const ProviderScope(child: BonsoirExampleMainWidget()));
}
/// The main widget.
class BonsoirExampleMainWidget extends StatelessWidget {
  /// Creates a new main widget instance.
  const BonsoirExampleMainWidget({
    super.key,
  });
  @override
  Widget build(BuildContext context) => EagerInitialization(
    child: MaterialApp(
      home: _Scaffold(),
    ),
  );
}
/// The app main scaffold.
class _Scaffold extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _ScaffoldState();
}
/// The scaffold state.
class _ScaffoldState extends State<_Scaffold> {
  /// The current page.
  late int currentPageIndex = 1;
  /// The page controller.
  late final PageController pageController = PageController(
    initialPage: currentPageIndex,
  );
  @override
  Widget build(BuildContext context) => Scaffold(
    appBar: AppBar(
      title: const Text('Bonsoir demo'),
      actions: [
        AddIcon(
          currentPage: AppPage.values[currentPageIndex],
        ),
      ],
      centerTitle: false,
    ),
    body: PageView(
      controller: pageController,
      children: const [
        DiscoveriesPageWidget(),
        BroadcastsPageWidget(),
      ],
    ),
    bottomNavigationBar: BottomBar(
      currentIndex: currentPageIndex,
      onPageChange: (index) {
        pageController.animateToPage(
          index,
          duration: const Duration(milliseconds: 200),
          curve: Curves.easeInOut,
        );
        setState(() => currentPageIndex = index);
      },
    ),
  );
  @override
  void dispose() {
    pageController.dispose();
    super.dispose();
  }
}