Кирилл Бубочкин @ookami_kb
Software Developer
Информация
- В рейтинге
- 5 465-й
- Откуда
- Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
Mobile Application Developer
Lead
Flutter
Dart
Kotlin
Development of mobile applications
Android development
iOS development
SWIFT
Почему тогда на клавиатуре и трекпаде не так?
Душнила:
Вообще-то, "душнила" и "токсик" – это не одно и то же. А эти 5 "признаков" не имеют особого отношения ни к тем, ни к другим.
Токсик:
Прежде чем писать подобного рода "туториалы", неплохо бы в вопросе разобраться.
На SO та же самая лицензия:
> user contributions licensed under CC BY-SA
Приложение никто не обвиняет (ну кроме кликбейтного заголовка).
Вы можете в самом письме добавить ссылки на конкретные отписки, на личный кабинет и т.д. Если пользователь заинтересован в том, чтобы получать какие-то определенные письма, он посмотрит варианты.
А one-click-unsubscribe – это на тот случай, когда пользователю вообще пофиг на все письма от вашего сервиса – он жмет эту кнопку, почтовый сервис посылает запрос, вы перестаете его спамить. Это как предупредительный выстрел, потому что в следующем письме пользователь нажмет "Это спам".
Компиляция из разных источников + предыдущий опыт рассылок + здравый смысл.
Гарантий, конечно, не даю, но это всё-таки чуть больше, чем просто предположение.
Никак, антиспам не на это реагирует. В письме просто специальный заголовок, который понимают почтовые клиенты и отображают кнопку "Отписаться". Гугл спарсит ссылку в этом заголовке и отправит туда POST-запрос, ему важно, чтобы в ответ вернулся 200/202.
А вот если вы нажмете кнопку "Это спам", тогда уже гугл возьмет эту рассылку на заметку.
Так чаще всего именно некачественный туда и лезет. Очень хорошо на медиуме заметно – не помню ни одного случая, когда за пейволлом оказывалась качественная статья, а вот в бесплатных попадались.
Ничего, это пофиксили. Сейчас на смену Teams Classic идет новый Microsoft Teams, так там сломали даже то, что в старом работало (камера регулярно отваливается, шаринг десктопа так и не завелся у меня). Тормозит меньше, да, видимо потому, что ничего толком не работает.
Это точно правильнее, потому что не будет всяких лишних addPostFrameCallback, setState и Row. Да и сложного там, в общем-то, ничего нет: https://dartpad.dev/?id=6ac06fb364d4b3a11e1de920a5a38a87
Через кастомный RenderObject.
Конечно, лучше если "вдруг война", а все голодные, сонные и уставшие. Зато взлетка надраена, и трава в зеленый выкрашена.
Колбэк несет в себе полезную информацию другим разработчикам: становится гораздо понятнее, зачем именно здесь нужен
setState()
.Как раз, чтобы не гадать, был ли он вызван "как талисман на удачу", или его забыли удалить после рефакторинга, или он действительно делает что-то полезное, помещайте туда причину вызова, такой формат сразу всё объясняет:
Поэтому в документации и пишут:
И поэтому в DCM есть правило в тему.
Минутка занудства. Функционал – это функция, заданная на произвольном множестве и имеющая числовую область значений. С точки зрения грамотности, уж лучше "фича" – поскольку буквальный перевод не передает нужны смысла, калька (тем более, такая устоявшаяся, тем более, в статье, рассчитанной на программистов) лучше, чем неправильное слово.
Три года для дарта и три года для котлина сейчас – это две большие разницы. Но конкретно в вашем случае, я подозреваю, что корень проблемы в чем-то другом, миксить всегда можно было только миксины и классы.
Есть, смотрите период полувыведения вещества.
Общее количество – обычно
count
илиqty
. Порядковый номер –index
, может ещеposition
.Или
shops
, илиshopList
. Простоshop
для массива – имхо, вводит в заблуждение.shops[i]
не выглядит странно – это, по сути, "первый из магазинов", "второй из магазинов", вполне органично.7 – это чистая вкусовщина, линтер можно на оба варианта настроить.
Так
var
и не является динамическим типом – это же полнейший бред.Снова побрюзжу. Плохой перевод не очень хорошей статьи.
По переводу. Кроме просто криво построенных фраз, местами вы будто вообще не понимаете, о чем идет речь.
Нет. Ограничения идут вниз (по дереву), размеры идут вверх (по дереву).
Нет. Не забывайте оборачивать корневые виджеты в SafeArea.
Нет. Возможно, поначалу увеличение производительности может показаться незначительным...
И т.д.
По статье. Это какая-то смесь из личных предпочтений автора (а ля "используйте всегда относительные импорты"), подсказок линтера (don't explicitly initialize variables to null), неправильных примеров (первый же пример не скомпилируется, там пропущен late у `Future<int> future;` – если статья рассчитана на новичков, то это важно), откровенной ерунды (Try not to use of await keywords inside the bloc).
Серьезно, читайте официальную документацию. Она у флаттера превосходная, и там есть лучшие практики, объяснения, примеры, советы по оформлению кода – и всё это из первых рук.