Изучение различных методов получения размера дисплея мобильного устройства во Flutter

При разработке мобильных приложений с использованием Flutter очень важно понимать размер дисплея устройства, чтобы обеспечить единообразие взаимодействия с пользователем на экранах разных размеров. В этой статье мы рассмотрим различные методы получения размера дисплея мобильного устройства во Flutter, а также примеры кода. К концу вы получите четкое представление о том, как получить размер дисплея во Flutter и использовать эту информацию при разработке своего приложения.

Метод 1: Виджет MediaQuery
Самый простой и распространенный способ получить размер дисплея во Flutter — использовать виджет MediaQuery. Виджет MediaQueryобеспечивает доступ к размеру, ориентации и другим полезным свойствам экрана. Вот пример того, как получить размер дисплея, используя MediaQuery:

import 'package:flutter/material.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final Size screenSize = MediaQuery.of(context).size;
    final double screenWidth = screenSize.width;
    final double screenHeight = screenSize.height;
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Display Size Example'),
        ),
        body: Center(
          child: Text(
            'Screen Width: $screenWidth\nScreen Height: $screenHeight',
            style: TextStyle(fontSize: 20),
          ),
        ),
      ),
    );
  }
}

В этом примере мы используем свойство MediaQuery.of(context).sizeдля получения размера экрана. Полученный объект Sizeсодержит ширину и высоту экрана, которые мы затем можем использовать в нашем приложении.

Метод 2: Виджет OrientationBuilder
Если вам нужно адаптировать пользовательский интерфейс в зависимости от ориентации устройства, вы можете использовать виджет OrientationBuilderв сочетании с MediaQuery. Вот пример:

import 'package:flutter/material.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Display Size Example'),
        ),
        body: OrientationBuilder(
          builder: (BuildContext context, Orientation orientation) {
            final Size screenSize = MediaQuery.of(context).size;
            final double screenWidth = screenSize.width;
            final double screenHeight = screenSize.height;
            return Center(
              child: Text(
                'Screen Width: $screenWidth\nScreen Height: $screenHeight\nOrientation: $orientation',
                style: TextStyle(fontSize: 20),
              ),
            );
          },
        ),
      ),
    );
  }
}

В этом примере мы обертываем виджет MediaQueryв OrientationBuilder. OrientationBuilderперестраивает пользовательский интерфейс всякий раз, когда меняется ориентация устройства, и мы можем получить доступ к значению Orientationв функции построения.

Метод 3: window.physicalSize
Если вам нужен более точный контроль над размером дисплея, вы можете напрямую получить доступ к свойствам окна, специфичным для платформы. Flutter предоставляет доступ к объекту window, который содержит информацию об экране устройства. Вот пример:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setEnabledSystemUIOverlays([]);
    final Size screenSize = WidgetsBinding.instance.window.physicalSize;
    final double screenWidth = screenSize.width;
    final double screenHeight = screenSize.height;
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Display Size Example'),
        ),
        body: Center(
          child: Text(
            'Screen Width: $screenWidth\nScreen Height: $screenHeight',
            style: TextStyle(fontSize: 20),
          ),
        ),
      ),
    );
  }
}

В этом примере мы получаем доступ к размеру дисплея, используя WidgetsBinding.instance.window.physicalSize. Обратите внимание, что мы также используем SystemChrome.setEnabledSystemUIOverlays([])для удаления системных наложений (строки состояния, панели навигации) для полноэкранного отображения.

В этой статье мы рассмотрели несколько методов получения размера дисплея мобильного устройства во Flutter. Мы обсудили использование виджета MediaQuery, виджета OrientationBuilderи доступ к объекту window, зависящему от платформы. Используя эти методы, вы можете создавать отзывчивые и адаптивные пользовательские интерфейсы, которые адаптируются к различным размерам и ориентациям экрана. Понимание размера дисплея имеет решающее значение для обеспечения бесперебойного взаимодействия с пользователем в ваших приложениях Flutter.