万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    FlutterのAndroidのステータスバーの上部の変な半透明を消す

    main.dartにこれいれる

    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
    
      // ステータスバーの上部の変な半透明を消す
      SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
        statusBarColor: Colors.transparent,
      ));

    なぜこれデフォルトじゃない?

    いちおうプラグインもあるけど要らないかもね https://stackoverflow.com/questions/55211640/transparent-status-bar-in-flutter

    縦固定の、これもだけどAndroidが最初に起動する瞬間は一瞬縦固定とか半透明じゃないバーが見えるんだよね・・。

      // 縦固定
      SystemChrome.setPreferredOrientations(<DeviceOrientation>[
        DeviceOrientation.portraitUp,
      ]);

    AndroidのKotlin側でやるコードがあるけど使える? https://stackoverflow.com/questions/29311078/android-completely-transparent-status-bar

    android/app/src/main/kotlin/jp/company/app_name/MainActivity.kt を開いて

    import

    import android.os.Bundle
    import android.os.Build
    import android.view.View
    import android.graphics.Color
    import android.view.WindowManager
    import android.view.Window
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            var window = this.activity.getWindow()
            if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
                setWindowFlag(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true)
            }
            if (Build.VERSION.SDK_INT >= 19) {
                window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            }
            if (Build.VERSION.SDK_INT >= 21) {
                setWindowFlag(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false)
                window.statusBarColor = Color.TRANSPARENT
            }
        }
    

    setWindowFlag の定義

        private fun setWindowFlag(bits: Int, on: Boolean) {
            val win = window
            val winParams = win.attributes
            if (on) {
                winParams.flags = winParams.flags or bits
            } else {
                winParams.flags = winParams.flags and bits.inv()
            }
            win.attributes = winParams
        

    おそらくAndroid/iOSネイティブではここで固定とかするっぽい

    Flutter: how to prevent device orientation changes and force portrait? - Stack Overflow

    Hejazi氏が投稿してCommunity♦氏に編集された投稿の。

    www.it-swarm.dev

    AndroidはつまりscreenOrientationをこうする。iOSXcodeいじる。

    <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:screenOrientation="portrait"

    しかしこれやっても最初に横向きにしてたら横向きは見える模様・・・