1st example: write
completed?.millisecondsSinceEpoch ?? 0
and you may stop complaining. The compiler will do.
2nd example: the first two if-clauses could be combined for improved readability. The comparison with the empty string would become more understandable and readable if you use the isNotEmpty()-Method on task.category.
Your 3rd example has a point though: late is dangerous and it should not be needed for complex property initialization in the constructor. I know no other language that requires something like this. But you can avoid the getters by declaring the properties final and public.