Как вы обнаруживаете платформу хоста от кода Дарта?

Для пользовательского интерфейса, который должен немного отличаться на iOS и Android, должен быть способ определить, на каком из них вы работаете, но я не смог найти его в документации. Что это?

Ответ 1

Благодаря Collin, окончательный ответ:

bool isIOS = Theme.of(context).platform == TargetPlatform.iOS;

Ответ 2

import 'dart:io' show Platform;

if (Platform.isAndroid) {
  // Android-specific code
} else if (Platform.isIOS) {
  // iOS-specific code
}

Другие варианты включают в себя:

Platform.isFuchsia
Platform.isLinux
Platform.isMacOS
Platform.isWindows

Документы: https://docs.flutter.io/flutter/dart-io/Platform-class.html.

Ответ 3

Хотя defaultTargetPlatform будет работать, я бы предложил использовать Theme.of(context).targetPlatform. Это позволяет тестировать поведение iOS (поскольку defaultTargetPlatform всегда TargetPlatform.android в тестах). Он также позволяет предкам вашего виджета переопределить свою целевую платформу, обернув его в виджет Theme.

Ответ 4

Ты можешь сделать

defaultTargetPlatform == TargetPlatform.iOS
          ? kIOSTheme
          : kDefaultTheme,

из import 'package:flutter/foundation.dart';