আপনি ডার্ট কোড থেকে হোস্ট প্ল্যাটফর্মটি কীভাবে সনাক্ত করবেন?


139

ইউআইআই এর জন্য যা আইওএস এবং অ্যান্ড্রয়েডের ক্ষেত্রে কিছুটা আলাদা হওয়া উচিত , অর্থাত্ বিভিন্ন প্ল্যাটফর্মগুলিতে , অ্যাপটি কোনটি চলমান রয়েছে তা সনাক্ত করার একটি উপায় অবশ্যই রয়েছে, তবে আমি এটি ডক্সে খুঁজে পাইনি। এটা কি?

উত্তর:


335
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
প্রয়োজনীয় আমদানি অন্তর্ভুক্ত করার জন্য আমি আমার উত্তর আপডেট করেছি।
ওয়েস্টি 9 2

4
এটি সরলতা এবং পঠনযোগ্যতার জন্য এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
অ্যান্ড্রু স্টেইনমেটজ

@ নাটোরোমকে আপনাকে ক্লাসের পদ্ধতিতে প্ল্যাটফর্ম.আইসএন্ড্রয়েড কল করতে হবে, ক্লাসে সরাসরি কল করতে হবে না
জাবির ইসহাক ২

67

কলিনকে ধন্যবাদ, চূড়ান্ত উত্তরটি হ'ল:

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

3
কেবলমাত্র এই উত্তরটি সর্বশেষতম ফ্লটার ফ্রেমওয়ার্কের সাথে আপ-টু-ডেট। বাকি উত্তর ভুল হয় না কিন্তু defaultTargetPlatform কাঠামোর আর অংশ মনে করা হয়
Stoycho Andreev

21

যদিও defaultTargetPlatformকাজ করবে, আমি ব্যবহার করার পরামর্শ দেব Theme.of(context).targetPlatform। এটি আইওএস আচরণের পরীক্ষা সক্ষম করে (কারণ defaultTargetPlatformসবসময় TargetPlatform.androidপরীক্ষায় থাকে)। এটি আপনার উইজেটের পূর্বপুরুষদের কোনও Themeউইজেটে মুড়িয়ে তার লক্ষ্য প্ল্যাটফর্মটিকে ওভাররাইড করতে দেয় ।


1
আমি কি প্রস্তাবিত এবং if (Platform.isIOS) {//my iOS widgets}
আজিজ

3
Platform.isIOSএকই সমস্যা আছে defaultTargetPlatform। এটি পরীক্ষায় কাজ করে না এবং Themeউইজেট দ্বারা ওভাররাইট করা যায় না ।
কলিন জ্যাকসন

এখন আপনি ডিফল্টডার্টফল্ট প্ল্যাটফর্ম ওভাররাইড api.flutter.dev/flutter/foundation/… দিয়ে ইউনিটেটে ডিফল্ট
ইয়ান

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';


এটি আর কাজ করে না। আমি ডিফল্ট টার্গেটপ্লেটফর্মটি পেতে ব্যর্থ হয়েছি।
আই পেডান

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
এটা সঠিক উত্তর. আপনার কোড থেকে কোনও ডার্ট: এইচটিএমএল আমদানি সরিয়ে ফেলতে হবে কারণ এটি ত্রুটির কারণ হবে।
টাইলার পাওয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.