of static method

Implementation

static DevicePreviewStyle of(BuildContext context) {
  final widget =
      context.dependOnInheritedWidgetOfExactType<DevicePreviewTheme>();

  var result = widget?.style;

  /// If no theme, the tool preferences are used.
  if (result == null) {
    final settings = context.select(
      (DevicePreviewStore store) => store.settings,
    );

    final position = () {
      switch (settings.toolbarPosition) {
        case DevicePreviewToolBarPositionData.top:
          return DevicePreviewToolBarPosition.top;

        case DevicePreviewToolBarPositionData.left:
          return DevicePreviewToolBarPosition.left;
        case DevicePreviewToolBarPositionData.right:
          return DevicePreviewToolBarPosition.right;
        default:
          return DevicePreviewToolBarPosition.bottom;
      }
    }();

    result = DevicePreviewStyle(
      toolBar: settings.toolbarTheme == DevicePreviewToolBarThemeData.dark
          ? DevicePreviewToolBarStyle.dark(position: position)
          : DevicePreviewToolBarStyle.light(position: position),
      background: BoxDecoration(
        gradient:
            settings.backgroundTheme == DevicePreviewBackgroundThemeData.dark
                ? const LinearGradient(
                    colors: [
                      Color(0xFF111111),
                      Color(0xFF222222),
                    ],
                  )
                : const LinearGradient(
                    colors: [
                      Color(0xFFf5f7fa),
                      Color(0xFFc3cfe2),
                    ],
                  ),
      ),
    );
  }

  // If toolbar position isn't supported, fallback to bottom.
  final media = MediaQuery.maybeOf(context) ??
      MediaQueryData.fromWindow(WidgetsBinding.instance!.window);
  if (!DevicePreviewTheme.isPositionAvailableForWidth(
    result.toolBar.position,
    media.size.width,
  )) {
    result = result.copyWith(
      toolBar: result.toolBar.copyWith(
        position: DevicePreviewToolBarPosition.bottom,
      ),
    );
  }

  return result;
}