आप डार्ट कोड से होस्ट प्लेटफॉर्म का पता कैसे लगाते हैं?


140

यूआई के लिए जो आईओएस और एंड्रॉइड पर अलग-अलग प्लेटफॉर्म पर थोड़ा अलग होना चाहिए , यह पता लगाने का एक तरीका होना चाहिए कि कौन सा ऐप चालू है, लेकिन मैं इसे डॉक्स में नहीं ढूंढ सका। यह क्या है?

जवाबों:


336
import 'dart:io' show Platform;

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

सभी विकल्पों में शामिल हैं:

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

आप यह भी पता लगा सकते हैं कि यदि आप वेब का उपयोग कर रहे हैं kIsWeb, तो एक वैश्विक स्थिरांक बताता है कि क्या अनुप्रयोग वेब पर चलाने के लिए संकलित किया गया था:

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)क्या उपयोग करने के लिए कोई प्रति-आवश्यकता है Platform?
नाटोबोरम

4
मैंने आवश्यक आयात को शामिल करने के लिए अपना उत्तर अपडेट कर दिया है।
वेस्टिऑन

4
यह सरलता और पठनीयता के लिए स्वीकृत उत्तर होना चाहिए।
एंड्रयू स्टेनमेट

@ नाटोबोरम में आपको Platform.isAndroid को क्लास की एक विधि से कॉल करना होगा, क्लास में सीधा काम नहीं करना चाहिए
Jabir Ishaq

67

कॉलिन के लिए धन्यवाद, अंतिम उत्तर है:

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

3
केवल यह उत्तर नवीनतम फ़्लटर ढांचे के साथ अद्यतित है। बाकी उत्तर गलत नहीं हैं, लेकिन DefaultTargetPlatform लगता है कि अब फ्रेमवर्क का हिस्सा नहीं है
स्टॉयचो एंड्रीव

21

यद्यपि defaultTargetPlatformकाम करेगा, मैं उपयोग करने का सुझाव दूंगा Theme.of(context).targetPlatform। यह iOS व्यवहार के परीक्षण को सक्षम बनाता है (क्योंकि defaultTargetPlatformहमेशा TargetPlatform.androidपरीक्षणों में होता है)। यह आपके विजेट के पूर्वजों को विजेट में लपेटकर अपने लक्ष्य प्लेटफ़ॉर्म को ओवरराइड करने की भी अनुमति देता है Theme


1
मई मैं पूछता हूँ कि क्या प्रस्तावित है और इस के बीच अंतर क्या है if (Platform.isIOS) {//my iOS widgets}
अज़ीज़ा

3
Platform.isIOSजैसी समस्याएं हैं defaultTargetPlatform। यह परीक्षणों में काम नहीं करता है और Themeविजेट द्वारा अधिलेखित नहीं किया जा सकता है ।
कोलिन जैक्सन

अब आप डिबेट में डिफ़ॉल्टटैरगेटप्रोलिट को डिबगड से अलग कर सकते हैंडिफ़ॉल्टफ़्लारटार्गप्लिएटऑवरराइड एपि.फ्लैटर.देव
युवेन येन

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

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

10

अधिकांश "स्पंदन" उत्तर इस प्रकार है:

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

तुम कर सकते हो

defaultTargetPlatform == TargetPlatform.iOS
          ? kIOSTheme
          : kDefaultTheme,

से import 'package:flutter/foundation.dart';


यह अब काम नहीं करता है। मैं DefaultTargetPlatform प्राप्त करने में विफल रहा।
14

1
उस आयात के साथ हो सकता है जिसे आपने पोस्ट में कल जोड़ा था। : D
I. पेडन

0

आप यूनिवर्सल प्लेटफ़ॉर्म पैकेज का उपयोग कर सकते हैं:

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

यह सिर्फ 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();
}

या बहुत ही सरल तरीके से

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

1
यह सही जवाब है। आपको बस किसी भी डार्ट को निकालने की आवश्यकता है: HTML आपके कोड से आयात करता है क्योंकि यह एक त्रुटि का कारण होगा।
टायलर पॉवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.