Flutter
What is the difference between `?`, `!`, `late`, and `required` keywords in Dart?
Four null-safety keywords: `?` appended to type opts into nullability (String? can be null); `!` force-unwrap asserts non-null and crashes if null (almost always a smell — defeats type system, use sparingly); `late` deferred init for non-nullable variable assigned after declaration (`late final user` idiomatic for 'init once in initState'; LateInitializationError if read before assigned; `late` without final can be lazy-computed on first read); `required` modifier on named params makes caller pass them (essential for widget constructors). Idiom: `late final` = immutability + deferred init. Avoid `!` — replace with pattern matching, `?? throw`, or early-return guards.