Можно рассмотреть slang, который позволяет разделить переводы на несколько файлов, используя namespace. Также там весьма годный консольный тулинг для работы с переводами.
Статья неконструктивна. Вы не можете сравнивать несопоставимые вещи. get - это огромный комбайн всего и вся сомнительного качества, пакет bloc предоставляет только стейт-менеджмент.
Далее, сквозь весь текст путаются понятия. Если коротко, BLoC != пакету bloc, MVC != GetX, BLoC != GetX .
Ещё кое-что. Признайтесь честно, вы смотрели исходный код get ? Подключите последнюю preview версию get: ^5.0.0-release-candidate-5 , которая есть на pub.dev и посмотрите. Посмотрите, что эта библиотека из себя представляет, что импортирует, из чего состоит, в особенности проверьте степень документации и комментирования, и обратите внимание на закомментированные участки кода. Вот, из прекрасного:
Оно вам точно нужно в проде или где-то ещё?
путь get-5.0.0-release-candidate-5/lib/get_navigation/src/routes/get_transition_mixin.dart
ниже в этом же файле
Не стройте иллюзий, этим нельзя пользоваться всерьёз.
Спасибо, изучал с удовольствием! Макросы появились во благо, но не весь спектр задач должен закрываться ими.
P.s. Riverpod на текущий момент (версия ^2.5.1 ) можно смело использовать без генерации. Плюшки вроде неограниченного числа family-параметров решаются с помощью Record или обычных моделек, для расширенной отладки можно добавить name-параметр, а stateful hot-reload доступен, если юзать Notifier-классы или же в обычных провайдерах воспользоваться глобальными приватными функциями. Да, плата есть - создание инстансов бойлерплейтно, особенно когда есть family параметры.
Если нужен пример с асинхронным конструктором - напишите в телеграме, скину пример.
Ну не надо так :(
Интересно узнать, какие преимущества и недостатки данного способа по сравнению с использованием классического json_serializable. Очень не хватает минимального рабочего примера "в действии". Я понимаю, что статья не об этом, но не могу найти место для применения, когда это полезно.
Также:
factory конструкторы могут быть объявлены как const , в то время как статический метод - нет
factory конструкторы могут быть именованными, для каждого свой json, как быть?
JsonDeserializeInterface справится с наследованием в моделях?
Серьёзно, это очень круто! Жаль, не хватает полноценной АПИшки, чтобы не тратить время на реверс-костыли ) Аналитика, к слову, в очень выгодном свете отличает твоё приложение от холодного и скучного "стока". Успехов!
Этот код даже не заведётся, поскольку параметры в функции должны быть помечены как обязательные. Тоже самое и в printUserInfoOptional
Функции высшего порядка принимают другие функции в качестве аргументов или возвращают их
???, не понимаю, на чём сделан акцент? Что функции это объекты на самом деле?
В Dart нет специального синтаксиса для объявления интерфейсов
Есть уже как год, появился в Dart 3, это модификатор interface
if(number % 2 == 0) {...}
Можно я просто побрюзжу и скажу, что уже пора использовать isEven или isOdd для этой цели
В Dart с включённым null safety переменные по умолчанию не могут быть null:
Передача данных между экранами обычно осуществляется через конструкторы и Navigator API:
SecondScreen({Key key, @required this.data})
Эта мысль преследовала меня сквозь весь текст. Теперь явно понятно, что весь материал представляет из себя простыню личных заметок, когда ещё использовался dart ~2 версии...
Напомню, что в рамках онлайн‑курсов OTUS вы можете изучить самые популярные ЯП, а также зарегистрироваться на ряд бесплатных мероприятий.
Вы правда используете 4 пробела для отступа везде, даже в pubspec.yaml? Или это ошибка копирования (ну что-то подсказывает мне, что нет). Хотел бы я увидеть ту лапшу в виджетах при 4-ёх пробелах, когда бывает и при двух всё плохо вмещается))) А ещё ведь есть старообрядное (спорно, сам использую, но в контексте текущего примера это хороший вопрос) ограничение по длине строки в 80 символов. Ухх
P.s. вместо неуклюжего StateNotifier с AsyncValue рассмотрите возможность использования AsyncNotifier (у него состояние уже завёрнуто в AsyncValue). Его также можно использовать без генерации кода. А что касается Provider и TextEditingController, то мне очень жаль, что выпилили вполне удобный ChangeNotifierProvider для этой цели. Но с другой стороны текстовые контроллеры можно класть в ConsumerStatefullWidget, либо использовать хуки (либо ваш способ). Ещё раз спасибо!
С учётом того, как здорово и достаточно легко к усвоению у вас получилось написать этот материал для новичков, спустя столько времени я всё ещё жду следующую часть ;) Просмотры это доказывают!
Так что можете считать это "спасибом" из будущего. Что удивительно, всё +- актуальным остаётся и по сей день.
Скажите пожалуйста, как связано определение инкапсуляции из вики с содержимым статьи? Не находите противоречий? А что если вы не показали инкапсуляцию, а показали лишь реализацию приватных полей в dart-классах через геттеры и сеттеры? Ваш материал не про инкапсуляцию, а про что-то ещё.
Простите, но это уже третья статья-перевод одного и того же, с почти что уже 2-ух месячной просрочкой актуальности. Да и на две части разделённая не из благих намерений. Вопроса два: чем эти статьи хуже:
Привет, крутая история! Из стейт-менеджера рекомендую рассмотреть riverpod, поскольку он сильно освобождает от бойлерплейта и одновременно совмещает концепцию внедрения и реактивных BLoC-классов одновременно.
От getx вооще стоит отказываться, поскольку он отвратительно написан и для больших проектов не подходит.
Под рукой нет компухтера, чтобы детальней просмотреть, но чем getstorage отличается от SharedPreferences? Сомнительным бенчмарком?) Да, из доки я видел, что там есть прослушка к примеру. Что там ещё есть, чего не хватает в SP? Чисто из спортивного интереса... Я недавно выпустил cardoteka на основе SP, которая добавляет типизацию, работу с null, прослушку на основе коллбеков и разделение имён хранилищ. Может это покроет какие-то ваши кейсы использования... :)
Монументально.
Спасибо! Сложно и подробно.
Можно рассмотреть slang, который позволяет разделить переводы на несколько файлов, используя namespace. Также там весьма годный консольный тулинг для работы с переводами.
Такой экземпляр не стыдно иметь на полочке :) Уже жду! Автору и издательству благодарность за проделанную работу ?
Очень классный материал с информативными скриншотами, проделана большая работа! Даже не подозревал, что всё настолько вариативно
Статья неконструктивна. Вы не можете сравнивать несопоставимые вещи. get - это огромный комбайн всего и вся сомнительного качества, пакет bloc предоставляет только стейт-менеджмент.
Далее, сквозь весь текст путаются понятия. Если коротко,
BLoC != пакету bloc
,MVC != GetX
,BLoC != GetX
.Ещё кое-что. Признайтесь честно, вы смотрели исходный код
get
? Подключите последнюю preview версиюget: ^5.0.0-release-candidate-5
, которая есть на pub.dev и посмотрите. Посмотрите, что эта библиотека из себя представляет, что импортирует, из чего состоит, в особенности проверьте степень документации и комментирования, и обратите внимание на закомментированные участки кода. Вот, из прекрасного:Оно вам точно нужно в проде или где-то ещё?
get-5.0.0-release-candidate-5/lib/get_navigation/src/routes/get_transition_mixin.dart
Не стройте иллюзий, этим нельзя пользоваться всерьёз.
Спасибо, изучал с удовольствием! Макросы появились во благо, но не весь спектр задач должен закрываться ими.
P.s. Riverpod на текущий момент (версия
^2.5.1
) можно смело использовать без генерации. Плюшки вроде неограниченного числа family-параметров решаются с помощью Record или обычных моделек, для расширенной отладки можно добавитьname
-параметр, а stateful hot-reload доступен, если юзатьNotifier
-классы или же в обычных провайдерах воспользоваться глобальными приватными функциями. Да, плата есть - создание инстансов бойлерплейтно, особенно когда естьfamily
параметры.Кажется, вы ошиблись сабом: вместо Github (в статье ничего об этом нет), можно использовать Flutter :)
Ну не надо так :(
Интересно узнать, какие преимущества и недостатки данного способа по сравнению с использованием классического
json_serializable
. Очень не хватает минимального рабочего примера "в действии". Я понимаю, что статья не об этом, но не могу найти место для применения, когда это полезно.Также:
factory
конструкторы могут быть объявлены какconst
, в то время как статический метод - нетfactory
конструкторы могут быть именованными, для каждого свой json, как быть?JsonDeserializeInterface
справится с наследованием в моделях?Серьёзно, это очень круто! Жаль, не хватает полноценной АПИшки, чтобы не тратить время на реверс-костыли ) Аналитика, к слову, в очень выгодном свете отличает твоё приложение от холодного и скучного "стока". Успехов!
Множественного наследования здесь нет, это не c++
Не обязательно одного типа
Этот код даже не заведётся, поскольку параметры в функции должны быть помечены как обязательные. Тоже самое и в
printUserInfoOptional
???, не понимаю, на чём сделан акцент? Что функции это объекты на самом деле?
Есть уже как год, появился в Dart 3, это модификатор
interface
Можно я просто побрюзжу и скажу, что уже пора использовать
isEven
илиisOdd
для этой целиЭта мысль преследовала меня сквозь весь текст. Теперь явно понятно, что весь материал представляет из себя простыню личных заметок, когда ещё использовался dart ~2 версии...
Поэтому спасибо, но нет.
Вы правда используете 4 пробела для отступа везде, даже в pubspec.yaml? Или это ошибка копирования (ну что-то подсказывает мне, что нет). Хотел бы я увидеть ту лапшу в виджетах при 4-ёх пробелах, когда бывает и при двух всё плохо вмещается))) А ещё ведь есть старообрядное (спорно, сам использую, но в контексте текущего примера это хороший вопрос) ограничение по длине строки в 80 символов. Ухх
Здорово, спасибо!
P.s. вместо неуклюжего StateNotifier с AsyncValue рассмотрите возможность использования AsyncNotifier (у него состояние уже завёрнуто в AsyncValue). Его также можно использовать без генерации кода. А что касается Provider и TextEditingController, то мне очень жаль, что выпилили вполне удобный ChangeNotifierProvider для этой цели. Но с другой стороны текстовые контроллеры можно класть в ConsumerStatefullWidget, либо использовать хуки (либо ваш способ). Ещё раз спасибо!
Спасибо, что-то новенькое! Изучу на досуге)
С учётом того, как здорово и достаточно легко к усвоению у вас получилось написать этот материал для новичков, спустя столько времени я всё ещё жду следующую часть ;) Просмотры это доказывают!
Так что можете считать это "спасибом" из будущего. Что удивительно, всё +- актуальным остаётся и по сей день.
Скажите пожалуйста, как связано определение инкапсуляции из вики с содержимым статьи? Не находите противоречий? А что если вы не показали инкапсуляцию, а показали лишь реализацию приватных полей в dart-классах через геттеры и сеттеры? Ваш материал не про инкапсуляцию, а про что-то ещё.
Это было весьма содержательно и интересно! Спасибо за материал.
Простите, но это уже третья статья-перевод одного и того же, с почти что уже 2-ух месячной просрочкой актуальности. Да и на две части разделённая не из благих намерений. Вопроса два: чем эти статьи хуже:
Flutter 3.16: что нового / Хабр
Flutter 3.16: обзор обновления фреймворка с комментариями разработчиков Surf / Хабр
и надо ли оно?
Честно говоря, ваш Facade ни на секунду не фасад получился :)
Привет, крутая история! Из стейт-менеджера рекомендую рассмотреть riverpod, поскольку он сильно освобождает от бойлерплейта и одновременно совмещает концепцию внедрения и реактивных BLoC-классов одновременно.
От getx вооще стоит отказываться, поскольку он отвратительно написан и для больших проектов не подходит.
Под рукой нет компухтера, чтобы детальней просмотреть, но чем getstorage отличается от SharedPreferences? Сомнительным бенчмарком?) Да, из доки я видел, что там есть прослушка к примеру. Что там ещё есть, чего не хватает в SP? Чисто из спортивного интереса... Я недавно выпустил cardoteka на основе SP, которая добавляет типизацию, работу с null, прослушку на основе коллбеков и разделение имён хранилищ. Может это покроет какие-то ваши кейсы использования... :)
Пиши ещё, интересный путь ?