Làm cách nào để bạn phát hiện nền tảng máy chủ lưu trữ từ mã Dart?


140

Đối với giao diện người dùng sẽ hơi khác nhau trên iOSAndroid , tức là trên các nền tảng khác nhau , phải có cách để phát hiện ứng dụng đang chạy trên ứng dụng nào, nhưng tôi không thể tìm thấy nó trong tài liệu. Nó là gì?

Câu trả lời:


336
import 'dart:io' show Platform;

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

Tất cả các tùy chọn bao gồm:

Platform.isAndroid
Platform.isFuchsia
Platform.isIOS
Platform.isLinux
Platform.isMacOS
Platform.isWindows

Bạn cũng có thể phát hiện nếu bạn đang chạy trên web bằng cách sử dụng kIsWeb, một hằng số chung cho biết liệu ứng dụng có được biên dịch để chạy trên web hay không:

import 'package:flutter/foundation.dart' show kIsWeb;

if (kIsWeb) {
  // running on the web!
} else {
  // NOT running on the web! You can check for additional platforms here.
}

Undefined name 'Platform'.dart(undefined_identifier)Có bất kỳ điều kiện cần thiết để sử dụng Platformkhông?
NatoBoram

4
Tôi đã cập nhật câu trả lời của mình để bao gồm nhập cần thiết.
Westy92

4
Đây phải là câu trả lời được chấp nhận vì nó đơn giản và dễ đọc.
Andrew Steinmetz

@NatoBoram bạn phải gọi Platform.isAndroid trong một phương pháp của lớp, gọi trực tiếp trong công việc lớp didnt
Jabir Ishaq

67

Cảm ơn Collin, câu trả lời cuối cùng là:

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

3
Chỉ câu trả lời này là cập nhật với khung Flutter mới nhất. Những câu trả lời còn lại là không sai nhưng defaultTargetPlatform dường như là một phần không còn của khuôn khổ này
Stoycho Andreev

21

Mặc dù defaultTargetPlatformsẽ hiệu quả, tôi khuyên bạn nên sử dụng Theme.of(context).targetPlatform. Điều này cho phép kiểm tra hành vi của iOS (vì defaultTargetPlatformluôn TargetPlatform.androidtrong các thử nghiệm). Nó cũng cho phép tổ tiên của widget của bạn ghi đè nền tảng mục tiêu của nó bằng cách gói nó trong một Themewidget.


1
Tôi có thể hỏi sự khác biệt giữa những gì được đề xuất và đây là những gì if (Platform.isIOS) {//my iOS widgets}
Aziza

3
Platform.isIOScó các vấn đề tương tự như defaultTargetPlatform. Nó không hoạt động trong các thử nghiệm và không thể bị ghi đè bởi Themetiện ích con.
Collin Jackson

Giờ đây, bạn có thể ghi đè defaultTargetPlatform độc nhất với debugDefaultTargetPlatformOverride api.flutter.dev/flutter/foundation/…
Yuwen Yan

20
import 'dart:io' show Platform;  //at the top

String os = Platform.operatingSystem; //in your code
print(os);

10

Hầu hết câu trả lời của "Flutter" như sau:

import 'package:flutter/foundation.dart' show TargetPlatform;

//...

if(Theme.of(context).platform == TargetPlatform.android)
    //do sth for Android
else if(Theme.of(context).platform == TargetPlatform.iOS)
    //do sth else for iOS
else if(Theme.of(context).platform == TargetPlatform.fuchsia)
    //even do sth else for Fuchsia OS

9

Bạn có thể làm

defaultTargetPlatform == TargetPlatform.iOS
          ? kIOSTheme
          : kDefaultTheme,

từ import 'package:flutter/foundation.dart';


Nó không hoạt động nữa. Tôi không tải được defaultTargetPlatform.
I. Pedan

1
Có thể với nhập mà bạn đã thêm ngày hôm qua vào bài đăng. : D
I. Pedan

0

Bạn có thể sử dụng gói Nền tảng chung:

https://pub.dev/packages/universal_platform

import 'package:universal_platform/universal_platform.dart';

bool isIos = UniversalPlatform.isIOS;
bool isAndroid = UniversalPlatform.isAndroid;
bool isWeb = UniversalPlatform.isWeb;
print('iOS: $isIos');
print('Android: $isAndroid');
print('Web: $isWeb');

0

Thật đơn giản chỉ cần nhập thư viện io

import'dart:io' show Platform;
void main(){
if(Platform.isIOS){
  return someThing();
}else if(Platform.isAndroid){
  return otherThing();
}else if(Platform.isMacOS){
  return anotherThing();
}

hoặc theo cách rất đơn giản

Platform.isIOS ? someThing() : anOther(),

1
Đây là câu trả lời chính xác. Bạn chỉ cần xóa bất kỳ nhập phi tiêu: HTML nào khỏi mã của mình vì nó sẽ gây ra lỗi.
tyler powell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.