Честно говоря впервые столкнулся с концепцией стейт менеджмента в целом. Немного вскипела голова именно от этих трех функций. И я, если честно, пока не увидел в них какого-то практического значения, если мы всегда можем просто вытащить наш блок, напрямую обратившись к провайдеру.
суть любой архитектуры, разделить логику. ui не должно пересекаться с бизнес логикой, это как аксиома. но нет придела дроблению, если ты используешь 1 глобальный класс(виджет) который управляет сотней страниц, то такой код будет сложно поддерживать, а особенно если его колупаешь не только ты а еще 10 человек, и каждый пишет как хочет. у тебя появляется сотня функций в 1 файле, из них например 60 зависят от других функция а они от других. сложно понять на словах, но поверь когда 1 файл 10к строк, ты захочешь бросить эту профессию быстрее чем решить мелкий баг. и получается что стейт менеджер добвляет 1 абстракцию(которую ты можешь делить) на другие абстракции. наверное запишу видео, бо очень много есть чего сказать на этот счет
Спасибо за урок!👍 1) А можно будет сделать урок с примером ListView.builder как отображать данные из List. 2) Ну и как сохранять небольшие данные на телефон как выбор цвета шрифтов. Очень был бы благодарен, а то что-то весь RUclips перерыл так и не понял как это все с BLoC делается.🙃
Привет. Думаю ты уже и сам понял как, но все же отпишу) 1. для сохранения текстовых данных, можно пользоваться p - pub.dev/packages/flutter_secure_storage для сохранения картинок и тд - pub.dev/packages/gallery_saver или юзать нативные стредства, но для этого нужно уже пилить видик. 2. по поводу вывода списка через ListView - код ниже. Но учти в этом примере мы не зависим от высоты, у нас весь наш виджет занимает 100% Если ты захочешь выводить ListView где-то внутри остальной верстки, тебе нужно будет либо задать ему роазмеры, с помощю других виджетов (Container, SizedBox ...), или же обернуть в Expanded если это будет возможно. Более подробно нужно так же пилить видео. Или искать лучше) думаю такое точно есть) import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: MyWidget(), ), ); } } final users = [ {'id': 1, 'title': 'Andry'}, {'id': 2, 'title': 'Artem'}, {'id': 3, 'title': 'Danon'}, ]; class MyWidget extends StatelessWidget { @override Widget build(BuildContext context) { return ListView.builder( itemBuilder: (context, index) { return Text( users[index]['title'].toString(), ); }, itemCount: users.length, ); } }
Привет! спасибо за понятное и интересное объяснение! Я вот думаю BlocProvider.of(context) и context.read() не одно и тоже? если нет, то в чем разница?)
Почему нельзя юзать глобально context.read внутри Builder? "потому что.. еее.. листенер false... еее.. разрабы не рекомендуют потому что..еее.. какие-то проблемы возникнут... еее" *сам не знаю какие* на 7:28 зачем мне использовать context.watch когда вон у меня передается state? builder (context, state)? можно нормально обьяснить зачем? Да и к тому же про context.watch вообще внятного ничего не обьяснил: "ну смотрите вот он есть... но.еее у нас есть проблема что наш брейк поинт отрабатывает и на юзерах, а не только на работе, что по логике не должно быть." И ЧТО? ты можешь внятно обьяснить зачем context.watch нужен, а не показать что он есть, но он создает проблему и пойти дальше к context.select? как кто-то должен понять для чего его использовать? в конце видео когда вынес context.watch на самый верх опять показал как из-за него ребилдятся все виджеты и "нам это не нужно", а для чего он нам нужен? А в конце так вообще использовал BlocProvider.of чтобы все работало так как нам нужно. А для чего вообще ты все это показывал? ты так выбесил если честно этим уроком.
та за шо. потому что слушать надо в контексте а не 5 минут ебланю, 5 минут слушаю. видео мне впадлу пересматривать. так что пишу по памяти. 1. "Почему нельзя юзать глобально context.read внутри Builder" не сработает в нашем случае. потому что листенер отключен, и мы получим просто блок, без подписки на стейт. 2. "зачем мне использовать context.watch когда вон у меня передается state? builder" а тебя не смущает, что там стейт Counter блока, а watch у нас следит за User блоком? 3. (зачем я рассказывал о всех этих методах) потому что видео о них, и о том, что они могут. а не о том как решить конкретную проблему. watch - чтобы получить подписку на весь стейт select - чтобы получить подписку на определенную переменную в стейте read - чтобы получить блок, и его стейт на момент вызова read.
@@it_dev я смотрел видео 5 раз чтобы попытаться вникнуть, но мое сообщение говорит о том что в видео не хватает информации, ты что-то пытаешься расказать по памяти, соскиваешь с темы, недоговариваешь, пересмотри свой урок еще раз, ты ничего нормально не обьяснил.
@@it_dev ты постоянно перескакивал с context.watch на что-то другое внятно не обьяснив зачем он нужен, и когда его использовал. Каждый раз придумывал проблему его не использовать и ни разу решение когда оно нужно.
Не могу не согласиться. Не сказано ничего о том, какую проблему решают watch, select и read. Просто так эти методы не стали бы создавать, видимо, они для чего-то нужны. Но из видео, я сделал вывод, что их вообще луше не использовать.
@@Nixguy "Не сказано ничего о том, какую проблему решают watch, select и read" совершенно верно, это видео можно смело заносить в топ худших видео по программированию. Мне гораздо понятнее было как школьник на ассемблере чавкая в микрофон создавал программу которая выводит hello world
Круто, но почему в этой технологии сначала 10 кривых/некрасивых варианта вы объясняете, а потом в конце - а вот как будет правильно! Так может просто сразу рассказать как правильно делать??
У вас Дар преподнести информацию коротко и ясно, к тому именно то что нужно. Продолжайте пожалуйста в том же духе.
поднял мне чсв)) ахах. пасиб
Лучшее объяснение блока
спасиб) приятно)
Красавчик👍 очень полезное видео, спасибо🤩
3:09 Только с третьего раза понял, что это действительно у него)))
Гений. Спасибо большое.
Честно говоря впервые столкнулся с концепцией стейт менеджмента в целом. Немного вскипела голова именно от этих трех функций. И я, если честно, пока не увидел в них какого-то практического значения, если мы всегда можем просто вытащить наш блок, напрямую обратившись к провайдеру.
суть любой архитектуры, разделить логику. ui не должно пересекаться с бизнес логикой, это как аксиома. но нет придела дроблению, если ты используешь 1 глобальный класс(виджет) который управляет сотней страниц, то такой код будет сложно поддерживать, а особенно если его колупаешь не только ты а еще 10 человек, и каждый пишет как хочет. у тебя появляется сотня функций в 1 файле, из них например 60 зависят от других функция а они от других. сложно понять на словах, но поверь когда 1 файл 10к строк, ты захочешь бросить эту профессию быстрее чем решить мелкий баг.
и получается что стейт менеджер добвляет 1 абстракцию(которую ты можешь делить) на другие абстракции. наверное запишу видео, бо очень много есть чего сказать на этот счет
автор как будто бежал куда-то, быстро очень.
Спасибо)
что-то не понял, а продолжение про buildWhen где-то потерялось? начал про buildWhen и резко все стер и поехали дальше (
да а что там еще про него говорить. я не помню, что уже там было, но вроде все сказал
Спасибо за урок!👍 1) А можно будет сделать урок с примером ListView.builder как отображать данные из List. 2) Ну и как сохранять небольшие данные на телефон как выбор цвета шрифтов. Очень был бы благодарен, а то что-то весь RUclips перерыл так и не понял как это все с BLoC делается.🙃
Привет. опиши плиз подробнее, что нужно сделать. а то я все не совсем понял
Привет. Думаю ты уже и сам понял как, но все же отпишу)
1. для сохранения текстовых данных, можно пользоваться p - pub.dev/packages/flutter_secure_storage
для сохранения картинок и тд - pub.dev/packages/gallery_saver или юзать нативные стредства, но для этого нужно уже пилить видик.
2. по поводу вывода списка через ListView - код ниже. Но учти в этом примере мы не зависим от высоты, у нас весь наш виджет занимает 100% Если ты захочешь выводить ListView где-то внутри остальной верстки, тебе нужно будет либо задать ему роазмеры, с помощю других виджетов (Container, SizedBox ...), или же обернуть в Expanded если это будет возможно. Более подробно нужно так же пилить видео. Или искать лучше) думаю такое точно есть)
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: MyWidget(),
),
);
}
}
final users = [
{'id': 1, 'title': 'Andry'},
{'id': 2, 'title': 'Artem'},
{'id': 3, 'title': 'Danon'},
];
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemBuilder: (context, index) {
return Text(
users[index]['title'].toString(),
);
},
itemCount: users.length,
);
}
}
@@it_dev Увы я сам не понял. Мне еще далековато до тебя. Спасибо за быстрый ответ. Попробую попробовать 😉
Привет! спасибо за понятное и интересное объяснение! Я вот думаю BlocProvider.of(context) и context.read() не одно и тоже? если нет, то в чем разница?)
Спасибо! Сделайте плиз крупнее шрифт, на 13'' ноуте очень все мелко((
Почему нельзя юзать глобально context.read внутри Builder? "потому что.. еее.. листенер false... еее.. разрабы не рекомендуют потому что..еее.. какие-то проблемы возникнут... еее" *сам не знаю какие*
на 7:28 зачем мне использовать context.watch когда вон у меня передается state? builder (context, state)? можно нормально обьяснить зачем?
Да и к тому же про context.watch вообще внятного ничего не обьяснил: "ну смотрите вот он есть... но.еее у нас есть проблема что наш брейк поинт отрабатывает и на юзерах, а не только на работе, что по логике не должно быть." И ЧТО? ты можешь внятно обьяснить зачем context.watch нужен, а не показать что он есть, но он создает проблему и пойти дальше к context.select? как кто-то должен понять для чего его использовать? в конце видео когда вынес context.watch на самый верх опять показал как из-за него ребилдятся все виджеты и "нам это не нужно", а для чего он нам нужен? А в конце так вообще использовал BlocProvider.of чтобы все работало так как нам нужно. А для чего вообще ты все это показывал? ты так выбесил если честно этим уроком.
та за шо. потому что слушать надо в контексте а не 5 минут ебланю, 5 минут слушаю.
видео мне впадлу пересматривать. так что пишу по памяти.
1. "Почему нельзя юзать глобально context.read внутри Builder" не сработает в нашем случае. потому что листенер отключен, и мы получим просто блок, без подписки на стейт.
2. "зачем мне использовать context.watch когда вон у меня передается state? builder" а тебя не смущает, что там стейт Counter блока, а watch у нас следит за User блоком?
3. (зачем я рассказывал о всех этих методах) потому что видео о них, и о том, что они могут. а не о том как решить конкретную проблему.
watch - чтобы получить подписку на весь стейт
select - чтобы получить подписку на определенную переменную в стейте
read - чтобы получить блок, и его стейт на момент вызова read.
@@it_dev я смотрел видео 5 раз чтобы попытаться вникнуть, но мое сообщение говорит о том что в видео не хватает информации, ты что-то пытаешься расказать по памяти, соскиваешь с темы, недоговариваешь, пересмотри свой урок еще раз, ты ничего нормально не обьяснил.
@@it_dev ты постоянно перескакивал с context.watch на что-то другое внятно не обьяснив зачем он нужен, и когда его использовал. Каждый раз придумывал проблему его не использовать и ни разу решение когда оно нужно.
Не могу не согласиться. Не сказано ничего о том, какую проблему решают watch, select и read. Просто так эти методы не стали бы создавать, видимо, они для чего-то нужны. Но из видео, я сделал вывод, что их вообще луше не использовать.
@@Nixguy "Не сказано ничего о том, какую проблему решают watch, select и read" совершенно верно, это видео можно смело заносить в топ худших видео по программированию. Мне гораздо понятнее было как школьник на ассемблере чавкая в микрофон создавал программу которая выводит hello world
Круто, но почему в этой технологии сначала 10 кривых/некрасивых варианта вы объясняете, а потом в конце - а вот как будет правильно! Так может просто сразу рассказать как правильно делать??
В этом и суть. показать как можно. но в данном кэйсе не надо