สำหรับ UI ที่ควรแตกต่างกันเล็กน้อยในiOSและAndroidคือบนแพลตฟอร์มที่แตกต่างกันจะต้องมีวิธีตรวจสอบว่าแอปใดทำงานอยู่ แต่ฉันไม่พบในเอกสาร มันคืออะไร?
สำหรับ UI ที่ควรแตกต่างกันเล็กน้อยในiOSและAndroidคือบนแพลตฟอร์มที่แตกต่างกันจะต้องมีวิธีตรวจสอบว่าแอปใดทำงานอยู่ แต่ฉันไม่พบในเอกสาร มันคืออะไร?
คำตอบ:
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.
}
Platform
เอกสารประกอบ: https://docs.flutter.io/flutter/dart-io/Platform-class.htmlkIsWeb
เอกสารประกอบ: https://api.flutter.dev/flutter/foundation/kIsWeb-constant.htmlขอบคุณ Collin คำตอบสุดท้ายคือ:
bool isIOS = Theme.of(context).platform == TargetPlatform.iOS;
แม้ว่าจะทำงานผมจะแนะนำให้ใช้defaultTargetPlatform
Theme.of(context).targetPlatform
สิ่งนี้เปิดใช้งานการทดสอบพฤติกรรมของ iOS (เนื่องจากdefaultTargetPlatform
อยู่TargetPlatform.android
ในการทดสอบเสมอ) นอกจากนี้ยังอนุญาตให้บรรพบุรุษของวิดเจ็ตของคุณสามารถแทนที่แพลตฟอร์มเป้าหมายได้โดยการรวมไว้ในTheme
วิดเจ็ต
if (Platform.isIOS) {//my iOS widgets}
Platform.isIOS
มีปัญหาเช่นเดียวกับdefaultTargetPlatform
. ไม่สามารถใช้งานได้ในการทดสอบและTheme
วิดเจ็ตไม่สามารถเขียนทับได้
import 'dart:io' show Platform; //at the top
String os = Platform.operatingSystem; //in your code
print(os);
คำตอบ "Flutter" ส่วนใหญ่มีดังนี้:
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
ทำได้ง่ายเพียงแค่นำเข้าไลบรารี 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(),
คุณสามารถใช้แพ็คเกจ Universal Platform:
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');
Undefined name 'Platform'.dart(undefined_identifier)
มีข้อกำหนดต่อการใช้งานPlatform
หรือไม่?