window_states 0.1.3 copy "window_states: ^0.1.3" to clipboard
window_states: ^0.1.3 copied to clipboard

Effortless Window State Transitions for Flutter Desktop

example/lib/main.dart

import 'package:example/pages/collapsed_screen.dart';
import 'package:example/pages/extended_screen.dart';
import 'package:example/utils/timer_controller.dart';
import 'package:flutter/material.dart';
import 'package:window_states/window_states.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
  //   await WindowStatesInitializer.initialize(config: WindowInitializerConfig());
  // }
  // if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
  //   await windowManager.ensureInitialized();

  //   const windowOptions = WindowOptions(
  //     size: Size(300, 120),
  //     center: true,
  //     backgroundColor: Colors.transparent,
  //     skipTaskbar: false,
  //     titleBarStyle: TitleBarStyle.hidden,
  //     fullScreen: false,
  //   );

  //   await windowManager.waitUntilReadyToShow(windowOptions, () async {
  //     await windowManager.show();
  //     await windowManager.focus();
  //   });
  // }

  runApp(const TimerApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Focus Timer',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.deepPurple,
          brightness: Brightness.light,
        ),
        useMaterial3: true,
      ),
      darkTheme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.deepPurple,
          brightness: Brightness.dark,
        ),
        useMaterial3: true,
      ),
      themeMode: ThemeMode.system,
      home: const TimerHomePage(),
    );
  }
}

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

  @override
  State<TimerHomePage> createState() => _TimerHomePageState();
}

class _TimerHomePageState extends State<TimerHomePage> {
  late final TransitionController _dimensionController;
  late final TimerController _timerController;

  late final Widget _collapsedView;
  late final Widget _expandedView;

  @override
  Widget build(BuildContext context) {
    return TransitionManager(
      controller: _dimensionController,
      initialViewIndex: 0,
      views: [
        ViewEntry(
          view: _collapsedView,
          config: ViewConfig(
            size: Size(300, 120),
            position: WindowPosition.topLeft,
            padding: EdgeInsets.all(20),
            margin: EdgeInsets.only(top: 20),
            alwaysOnTop: true,
            resizable: true,
            shadow: WindowShadow.none,
            animationConfig: AnimationConfig.fast(),
          ),
        ),
        ViewEntry(
          view: _expandedView,
          config: ViewConfig(
            size: Size(450, 700),
            position: WindowPosition.centerLeft,
            padding: EdgeInsets.all(30),
            alwaysOnTop: false,
            resizable: true,
            minWindowSize: Size(300, 400),
            maxWindowSize: Size(900, 1400),
            shadow: WindowShadow.none,
            animationConfig: AnimationConfig.fast(),
          ),
        ),
      ],
      defaultAnimationConfig: const AnimationConfig(),
      windowInitializerConfig: WindowInitializerConfig(),
      enabledPlatforms: DesktopPlatform.unixLike,
    );
  }

  @override
  void dispose() {
    _dimensionController.dispose();
    _timerController.dispose();
    super.dispose();
  }

  @override
  void initState() {
    super.initState();
    _dimensionController = TransitionController();
    _timerController = TimerController();

    _collapsedView = CollapsedTimerView(
      timerController: _timerController,
      dimensionController: _dimensionController,
    );

    _expandedView = ExpandedTimerView(
      timerController: _timerController,
      dimensionController: _dimensionController,
    );
  }
}
3
likes
150
points
248
downloads

Publisher

verified publisherinfms.dev

Weekly Downloads

Effortless Window State Transitions for Flutter Desktop

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, screen_retriever, window_manager

More

Packages that depend on window_states