Ответ 1
Ключевое слово with
указывает на использование "mixin". Смотрите здесь
Под миксином понимается возможность добавления возможностей другого класса или классов в ваш собственный класс без наследования от этих классов. Методы этих классов теперь можно вызывать в вашем классе, и код в этих классах будет выполняться. У Dart нет множественного наследования, но использование mixins позволяет вам складывать другие классы для повторного использования кода, избегая проблем, которые могут возникнуть при множественном наследовании.
Я отмечаю, что вы ответили на некоторые вопросы о Java - в терминах Java вы можете рассматривать миксин как интерфейс, который позволяет не просто указать, что данный класс будет содержать данный метод, но также предоставить код для этого метода.