Как можно гибко расширять существующие компоуз компоненты? Например, есть TextField

c полем trailingIcon и чтоб каждый раз не писать одно и то же, хочется какой-то TextFieldWithClear, где trailinIcon всегда будет крестик. Очевидно, завернуть в свою комоуз функцию, но тогда нужно продублировать остальную дюжину полей TextField? Как-то много шума для такой ерунды, не?

14 ответов

22 просмотра

ну если у тебя много где используется одинаковый текст филд с крестиком. то лучше сделать отдельную функцию с текст филдом и крестиком и просто его вставлять куда нужно

Kopusha- Автор вопроса
Roman Bocharov
ну если у тебя много где используется одинаковый т...

>отдельную функцию с текст филдом и крестиком не совсем понял. Эта функция все равно должна дублировать все поля текст филда, нет?

Если хочется оставить доступ ко всем функциям TextField то придётся добавить в свой враппер все эти параметры - по другому никак, это же функции а не классы и никакого наследования вам не завезли. Это не "поля" - это параметры. Ну или как @LicoriceWalrus предлагает - сделать слегка менее универсальный вариант TextField в котором что-то зашито а что-то передаётся параметром.

А в чём проблема дублирования полей?)

🚄 Bonк em Saudade
А в чём проблема дублирования полей?)

Да шумно становится :) я хочу только маааленьку пипку поменять а приходится повторять много чего. А ещё очень раздражает что приходится копировать default значения из функции которую вызываешь - ведь нельзя сказать что "я хз какое тут надо значение - используй свой default" в точке вызова.

Kopusha- Автор вопроса
🚄 Bonк em Saudade
А в чём проблема дублирования полей?)

ну, если б это был объект я бы мог написать однострочное расширение и получить что-то вроде TextField().withClear(). В Swift UI, вроде, можно. Во Flutter через наследование… Короче, все есть функция это чисто и прекрасно, но с объектами как-то больше практичных вариантов.

Kopusha
ну, если б это был объект я бы мог написать одност...

Я думаю это просто неудачный API... функциями тоже можно сделать нормально

Kopusha
ну, если б это был объект я бы мог написать одност...

Во что я придумал :) гист Такой вариант позволит привести маленькие расширения для TextField`а в сравнительно менее шумный вид

Kopusha
ну, если б это был объект я бы мог написать одност...

Наследование тут мало чем поможет, т.к. кастомизируемые аргументы передать в конструктор всё равно нужно. У флаттера это +\- исправилось только с недавним дартом 2.17, где ввели super параметры в конструкторах. Но я слабо представляю, как вы хотите и кастомизацию оставить, и передачу аргументов пропустить.

ну не дублируйте ¯\_(ツ)_/¯ Вам нужно будет либо давать, либо не давать сетить значения по умолчанию и все

Kopusha
ну, если б это был объект я бы мог написать одност...

так можно же не только функциями пользоваться в компоузе)

Kopusha- Автор вопроса

Похожие вопросы

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Это переведённый текст с английского. Я не говорю на русском, но могу использовать переводчик Телеграм. Приветствую! Я начинающий веб-разработчик и все еще учусь. В настояще...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
3
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Всем привет. Хотел бы написать для себя свою ос. Причины: 1) нужен опыт в чем-то 2) будет меньше весить 3) свое, но там будут свои задумки Я понимаю что нужно писать для всег...
Shadow Akira
18
А не хотим ли мы развлечься? 😉 Но так чтобы с пользой для наших профессиональных навыков?? 👨‍🎓👩‍🎓 Предлагаю на октябрь запланировать тестовый запуск новой командной игры "Игр...
Andrii Kurdiumov
2
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
5? да там все 10
Boris Vinogradov
12
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
что такое erg?
Maksim Lapshin
2
Карта сайта