snap_layouts 0.2.0 copy "snap_layouts: ^0.2.0" to clipboard
snap_layouts: ^0.2.0 copied to clipboard

PlatformWindows

A plugin provides a simple window layout button which can implement the native Windows 11 Snap Layouts feature.

example/lib/main.dart

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

import 'package:snap_layouts/snap_layouts.dart';
import 'package:window_manager/window_manager.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await windowManager.ensureInitialized();

  const size = Size(800, 600);
  WindowOptions windowOptions = WindowOptions(
    size: size,
    minimumSize: size,
    center: true,
    titleBarStyle: TitleBarStyle.hidden,
  );
  windowManager.waitUntilReadyToShow(windowOptions, () async {
    await windowManager.show();
    await windowManager.focus();
  });

  runApp(const MyApp());
}

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WindowListener {
  bool _isLight = true;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData.light(),
      darkTheme: ThemeData.dark(),
      themeMode: _isLight ? ThemeMode.light : ThemeMode.dark,
      home: Scaffold(
        appBar: PreferredSize(
          preferredSize: const Size.fromHeight(kWindowCaptionHeight),
          child: SnapLayoutsCaption(
            brightness: _isLight ? Brightness.light : Brightness.dark,
            title: Text('snap_layouts_example'),
            actions: [
              WindowCaptionAction(
                icon: Icon(
                  _isLight
                      ? Icons.wb_sunny_outlined
                      : Icons.nightlight_outlined,
                ),
                onPressed: () async {
                  await windowManager.setBrightness(
                    _isLight ? Brightness.dark : Brightness.light,
                  );
                  setState(() {
                    _isLight = !_isLight;
                  });
                },
              ),
            ],
          ),
        ),
        body: Container(
          decoration: BoxDecoration(
            border: Border(
              top: BorderSide(
                width: .1,
                color: _isLight ? Colors.black : Colors.white,
              ),
            ),
          ),
          child: Center(child: Text('Snap Layouts Example')),
        ),
      ),
    );
  }

  @override
  void onWindowMaximize() {
    setState(() {});
  }

  @override
  void onWindowUnmaximize() {
    setState(() {});
  }
}

/* import 'package:flutter/material.dart';
import 'package:snap_layouts/snap_layouts.dart';
import 'package:window_manager/window_manager.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await windowManager.ensureInitialized();
  WindowOptions windowOptions = WindowOptions(
    titleBarStyle: TitleBarStyle.hidden,
  );
  windowManager.waitUntilReadyToShow(windowOptions, () async {
    await windowManager.show();
    await windowManager.focus();
  });

  runApp(const MyApp());
}

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: SizedBox(width: 46, height: 32, child: SnapLayoutsButton()),
        ),
      ),
    );
  }
} */

/* import 'package:flutter/material.dart';
import 'package:snap_layouts/snap_layouts.dart';
import 'package:window_manager/window_manager.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await windowManager.ensureInitialized();
  WindowOptions windowOptions = WindowOptions(
    titleBarStyle: TitleBarStyle.hidden,
  );
  windowManager.waitUntilReadyToShow(windowOptions, () async {
    await windowManager.show();
    await windowManager.focus();
  });

  runApp(const MyApp());
}

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WindowListener {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: PreferredSize(
          preferredSize: const Size.fromHeight(kWindowCaptionHeight),
          child: SnapLayoutsCaption(
            title: Text('snap_layouts_example'),
            actions: [
              WindowCaptionAction(
                icon: Icon(Icons.favorite_outline),
                onPressed: () {},
              ),
            ],
          ),
        ),
        body: Center(child: Text('Snap Layouts Example')),
      ),
    );
  }

  @override
  void onWindowMaximize() {
    setState(() {});
  }

  @override
  void onWindowUnmaximize() {
    setState(() {});
  }
} */
0
likes
160
points
35
downloads

Publisher

unverified uploader

Weekly Downloads

A plugin provides a simple window layout button which can implement the native Windows 11 Snap Layouts feature.

Repository (GitHub)

Topics

#window #desktop-window #title-bar #window-caption #snap-layouts

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface, window_manager

More

Packages that depend on snap_layouts