万年素人からHackerへの道

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

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

    エラーになるOptionalな値

    import 'package:flutter/material.dart';
    
    class Jilkken extends StatelessWidget {
      const Jilkken(
        this.wiredStr, {
        Key? key,
      }) : super(key: key);
    
      // エラーになるOptionalなString
      final String? wiredStr;
    
      @override
      Widget build(BuildContext context) {
        String? hoge;
        if (hoge != null) {
          // ここは「!」つけなくてOK
          final bar = hoge + 'bar';
        }
    
        if (wiredStr == null || wiredStr?.isEmpty == false) {
    
        } else {
          // ここはwiredStrがnullのはずなのに「!」つけないといけない
          //  「Context: 'wiredStr' refers to a property so it couldn't be promoted.」になってしまう。
          final fuga = wiredStr + 'bar';
        }
    }

    ちなみに早期リターンもおかしい。

        if (wiredStr == null) {
          return const SizedBox();
        }
    
        // ここでなぜ?が必要なのか?
        if (wiredStr?.isEmpty ?? false) {
          return const SizedBox();
        }

    promotion(昇格)させるには、ローカル変数に一旦コピーしなきゃだめっぽい。 Fixing type promotion failures | Dart

    final promotedWiredStr = wiredStr;

    公式YouTube https://www.youtube.com/watch?v=2Cl0C-9dK48&feature=youtu.be

    https://stackoverflow.com/questions/65456958/dart-null-safety-doesnt-work-with-class-fields/65457221?stw=2#65457221

    class Afinal フィールド text を継承した、 Bのget textを使って上書きしていたら絶対null変えるので、Aクラスで text を読まれたら null チェックしても意味ないから? こんなことが出来る以上、ローカル変数以外は信じてはだめってことか?