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