screen_retriever 0.3.0 copy "screen_retriever: ^0.3.0" to clipboard
screen_retriever: ^0.3.0 copied to clipboard

This plugin allows Flutter desktop apps to Retrieve information about screen size, displays, cursor position, etc.

example/lib/main.dart

// The example shows the deprecated 0.2.x compatible API on purpose.
// ignore_for_file: deprecated_member_use

import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart';
import 'package:screen_retriever/legacy.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      builder: BotToastInit(),
      navigatorObservers: [BotToastNavigatorObserver()],
      home: const HomePage(),
    );
  }
}

class _ListSection extends StatelessWidget {
  const _ListSection({required this.title, required this.children});

  final Widget title;
  final List<Widget> children;

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Padding(
          padding: const EdgeInsets.only(left: 20, top: 12, bottom: 6),
          child: DefaultTextStyle(
            style: Theme.of(context).textTheme.titleMedium ?? const TextStyle(),
            child: title,
          ),
        ),
        ...children,
      ],
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> with ScreenListener {
  Display? _primaryDisplay;
  List<Display> _displayList = [];

  @override
  void initState() {
    screenRetriever.addListener(this);
    super.initState();
    _getDisplays();
  }

  @override
  void dispose() {
    screenRetriever.removeListener(this);
    super.dispose();
  }

  @override
  void onScreenEvent(String eventName) {
    BotToast.showText(text: 'onScreenEvent: $eventName');
    _getDisplays();
  }

  Future<void> _getDisplays() async {
    _primaryDisplay = await screenRetriever.getPrimaryDisplay();
    _displayList = await screenRetriever.getAllDisplays();
    setState(() {});
  }

  Future<void> _handleGetCursorScreenPoint() async {
    Offset point = await screenRetriever.getCursorScreenPoint();
    BotToast.showText(text: 'cursorScreenPoint: $point');
  }

  Widget _buildPrimaryDisplay(BuildContext context) {
    if (_primaryDisplay != null) {
      return _ListSection(
        title: const Text('Primary Display'),
        children: [DisplayCard(_primaryDisplay!)],
      );
    }
    return const SizedBox();
  }

  Widget _buildAllDisplays(BuildContext context) {
    if (_displayList.isNotEmpty) {
      return _ListSection(
        title: const Text('All Displays'),
        children: [for (var display in _displayList) DisplayCard(display)],
      );
    }
    return const SizedBox();
  }

  Widget _buildMethods(BuildContext context) {
    return _ListSection(
      title: const Text('Methods'),
      children: [
        Card(
          child: ListTile(
            title: const Text('getCursorScreenPoint'),
            onTap: _handleGetCursorScreenPoint,
          ),
        ),
        Card(
          child: ListTile(
            title: const Text('getPrimaryDisplay'),
            onTap: () async {
              _primaryDisplay = await screenRetriever.getPrimaryDisplay();
              setState(() {});
              BotToast.showText(
                text: 'primaryDisplay: ${_primaryDisplay!.toJson()}',
              );
            },
          ),
        ),
        Card(
          child: ListTile(
            title: const Text('getAllDisplays'),
            onTap: () async {
              _displayList = await screenRetriever.getAllDisplays();
              setState(() {});
              BotToast.showText(
                text:
                    'allDisplays:\n${_displayList.map((e) => e.toJson()).join('\n')}',
              );
            },
          ),
        ),
      ],
    );
  }

  Widget _buildBody(BuildContext context) {
    return ListView(
      padding: const EdgeInsets.all(16),
      children: <Widget>[
        _buildPrimaryDisplay(context),
        _buildAllDisplays(context),
        _buildMethods(context),
      ],
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Screen Retriever Example')),
      body: _buildBody(context),
    );
  }
}

class DisplayCard extends StatelessWidget {
  const DisplayCard(this.display, {super.key});

  final Display display;

  @override
  Widget build(BuildContext context) {
    return Card(
      child: ListTile(
        title: Text('${display.name}'),
        subtitle: Text(
          [
            'id: ${display.id}',
            'size: ${display.size}',
            'visiblePosition: ${display.visiblePosition}',
            'visibleSize: ${display.visibleSize}',
            'scaleFactor: ${display.scaleFactor}',
          ].join('\n'),
        ),
        onTap: () {
          BotToast.showText(text: '${display.toJson()}');
        },
      ),
    );
  }
}
74
likes
160
points
1.04M
downloads

Documentation

API reference

Publisher

verified publisherleanflutter.dev

Weekly Downloads

This plugin allows Flutter desktop apps to Retrieve information about screen size, displays, cursor position, etc.

Repository (GitHub)
View/report issues

Topics

#screen #display #monitor

License

MIT (license)

Dependencies

flutter, nativeapi, nativeapi_flutter, plugin_platform_interface

More

Packages that depend on screen_retriever