Saya ingin mencegah aplikasi saya mengubah orientasinya dan memaksa tata letak untuk tetap menggunakan "potret".
Di main.dart, saya meletakkan:
void main(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(new MyApp());
}
tetapi saat saya menggunakan tombol putar Simulator Android, tata letaknya "mengikuti" orientasi perangkat baru ...
Bagaimana saya bisa mengatasi ini?
Terima kasih
'package:flutter/services.dart'
, maka mungkin itu bug: github.com/flutter/flutter/issues/13238SystemChrome.setPreferredOrientations
mengembalikan secara asinkron, jadi sepertinyarunApp
harus diapit oleh athen
.Jawaban:
Impor
package:flutter/services.dart
, laluMasukkan ke
SystemChrome.setPreferredOrientations
dalamWidget build()
metode.Contoh:
Memperbarui
Solusi ini mungkin tidak berfungsi untuk beberapa perangkat IOS seperti yang disebutkan dalam dokumentasi flutter yang diperbarui pada Oktober 2019.
Mereka Menyarankan untuk memperbaiki orientasi dengan mengatur UISupportedInterfaceOrientations di Info.plist seperti ini
Untuk informasi lebih lanjut https://github.com/flutter/flutter/issues/27235#issuecomment-508995063
sumber
@boeledi, Jika Anda ingin "mengunci" orientasi perangkat dan tidak mengizinkannya untuk berubah saat pengguna memutar ponselnya, ini mudah diatur seperti di bawah ini,
sumber
iOS:
Menelepon
SystemChrome.setPreferredOrientations()
tidak berfungsi untuk saya, dan saya harus mengubahDevice Orientation
dalam proyek Xcode sebagai berikut:Android:
Setel
screenOrientation
atribut keportrait
untuk aktivitas utama dalam fileandroid/app/src/main/AndroidManifest.xml
sebagai berikut:sumber
screenOrientation
sejak API level 8 untuk Android. @BloodLoss, saya pikir Anda membacanya di dokumen, tetapi tentangresizeableActivity
atribut. Periksa kembali tautannya. ^^Metode 'setPreferredOrientations' mengembalikan objek Future. Berdasarkan dokumentasi, Future mewakili beberapa nilai yang akan tersedia di suatu tempat di masa mendatang. Itulah mengapa Anda harus menunggu sampai tersedia dan kemudian melanjutkan dengan aplikasi. Oleh karena itu, harus digunakan metode 'then', yang, sesuai definisi, "mendaftarkan panggilan balik yang akan dipanggil saat Future selesai". Karenanya, Anda harus menggunakan kode ini:
Selain itu, file berikut harus diimpor:
'paket: flutter / services.dart'
sumber
Buka android / app / src / main / AndroidManifest.xml dan tambahkan baris berikut di MainActivity:
Jika Anda memiliki ini:
Anda akan mendapatkan hasil seperti ini:
Ini berfungsi untuk Android. Di iOS, Anda harus mengubahnya dari halaman Xcode: https://i.stack.imgur.com/hswoe.png (seperti yang dikatakan Hejazi)
sumber
Pertama-tama impor ini di file main.dart
Maka jangan copy paste lebih baik lihat (ingat) dan tulis kode di bawah ini di file main.dart
Untuk memaksa dalam mode potret :
Untuk memaksa dalam mode lanskap :
sumber
Letakkan WidgetsFlutterBinding.ensureInitialized () jika tidak, Anda akan mendapatkan kesalahan saat membangun.
sumber
setPreferredOrientation
mengembalikan aFuture<void>
, jadi asynchronous. Pendekatan yang paling mudah dibaca adalah dengan mendefinisikanmain
asinkron:sumber
await
adalah pola pemrograman di mana-mana yang hadir dalam berbagai bahasa, dan sangat jelas apa yang ekspresif.then
menciptakan tingkat bersarang. Jika Anda memiliki tiga atau empat lanjutan,then
mulai menjadi sangat sulit untuk dibaca..then
dapat dirantai alih-alih bersarang, seperti yang diharapkan aFutureOr
. Ini memungkinkan saya menggunakan pendekatan yang lebih fungsional, yang lebih mudah dibaca dan elegan. Misalnya, saya bisa menggunakan badan ekspresi alih-alih tubuh dalam kurung dengan merangkai "lalu".Pada versi flutter baru bersama dengan pengaturan
preferred Orientation
kita perlu menambahkan satu baris tambahan yaituJadi kode kerja untuk ini adalah -
sumber
Di bawah ini adalah contoh resmi dari tim flutter. https://github.com/flutter/samples/blob/master/veggieseasons/lib/main.dart
sumber
Mencoba
Anda juga dapat mengubah pengaturan orientasi layar di manifes android dan file ios info.plist.
sumber
Impor impor 'paket: flutter / services.dart';
Kemudian Anda menyertakan baris kode di bawah ini dalam file main.dart Anda, dan dalam metode utama Anda seperti ini:
sumber
Solusi terbaik adalah menggunakannya dalam metode build MyApp ().
sumber