Программирование : Dart & Flutter по-русски
DVS (Read The F.ng Manual) Studio (NoHello)
Если отправлять через консоль фб - оно тоже не приходит?
DVS (Read The F.ng Manual) Studio (NoHello)
А токен правильный?
Artyom Nesterenko
Сделать свой базовый виджет для экрана со Scaffold и использовать его, других вариантов вроде и нет.
Denis Dubov
Да да через тестовую консоль отправляю, токен правильный
Evgenii Egorov
flutter run -v или по логам в logcat посмотри
Denis Dubov
[
{
"type": "link",
"text": "http://i.imgur.com/AsMuavc.png"
}
]
DVS (Read The F.ng Manual) Studio (NoHello)
Приложение в этот момент открыто?
Denis Dubov
не ссыпиться так Gradle task assembleDebug failed with exit code 1 Exited (sigterm)
Evgenii Egorov
Попробуй в градле аппа поменять до 17.0 версии
Denis Dubov
[
{
"type": "link",
"text": "http://i.imgur.com/AsMuavc.png"
}
]
Artyom Nesterenko
Что-то или они там с версиями намутили, или еще кто-то.
Artyom Nesterenko
Можно принудительно опустить.
Artyom Nesterenko
[
{
"type": "pre",
"text": "configurations.all {\n resolutionStrategy.force 'com.google.firebase:firebase-iid:18.0.0'\n}",
"language": ""
}
]
Artyom Nesterenko
Или наоборот попробовать все поднять до последних.
Evgenii Egorov
В либе 18.0 версия, в проекте 17.0
Denis Dubov
??Взял все советы, спасибо.. пошел билдить.. оно на каких то версиях.. приходит с запазданием..
Oleksandr Yahnenko
Всем привет, кто то сталкивался с проблемой рендеринга больших картинок - 4000х8000?
DVS (Read The F.ng Manual) Studio (NoHello)
Да. Они убивают аппку на иосе На этом всё)
???????
Зачем тебе так много?
Oleksandr Yahnenko
я в плане что они не отображаются, черный экран и никаких ошибок в консоле
Oleksandr Yahnenko
ну что с бэка прилетело то и показываю)
???????
Пусть бэк пережимает, у него для этого 100500 инструментов
???????
Ну на крайняк сам жми.
Oleksandr Yahnenko
там картинка типа карты, она и должна быть очень детализирована, где можно уже и так пережали
???????
Так карты отображают тайлами
???????
значит не только жми, но и реж
???????
и создавай миниатюры
Oleksandr Yahnenko
а чем резать не подскажешь? Может есть тру вариант
???????
[
"Вообще этим бэк должен заниматься.\n\nНо и для дарта должны быть библиотеки:\n",
{
"type": "link",
"text": "https://github.com/brendan-duncan/image"
},
""
]
Oleksandr Yahnenko
ок, спасибо
???????
[
{
"type": "link",
"text": "https://pub.dev/packages/flutter_image_pick_crop"
}
]
???????
Резать лучше в изоляте, наверное (compute в помощь)
Oleksandr Yahnenko
да в том то и дело что гуглил, я уже и делил на 4 части и отображал, просто работает немного криво, вот и решил уточнить другие варианты
???????
Пока режется - отображать заглушку в виде картинки из asseta, анимашки из flare, ну или хотяб CircularProgressIndicator
???????
Так тебе и сжимать надо
???????
а не только резать
???????
crop и resize как минимум.
???????
[
{
"type": "link",
"text": "https://github.com/btastic/flutter_native_image"
}
]
Oleksandr Yahnenko
спасибо
Александр Васильев
никак немогу побороть.. на ios все нормально, а андройд не видит?
Yerzhan
Ребят как обрезать Image по углам, BorderRadius в контейнере не обрезает
Александр Васильев
[
"Я нашел в чем проблема!!\nВ именах проекта я их поменял тут имя проекта на \"ru.kenbo.planturista\"\nandroid/app/src/main/AndroidManifest.xml\nandroid/app/src/debug/AndroidManifest.xml\nandroid/app/build.gradle\n\nА тут забыл.. переименовать папку:\nandroid/app/src/main/java/com/example/plan_turista/",
{
"type": "link",
"text": "MainActivity.java"
},
"\nв\nandroid/app/src/main/java/ru/kenbo/planturista/",
{
"type": "link",
"text": "MainActivity.java"
},
"\n\nИ в самом ",
{
"type": "link",
"text": "MainActivity.java"
},
"\npackage ru.kenbo.planturista;"
]
Александр Васильев
пет проект
Anton Vasiljev
Норм звучит
Александр Васильев
Да, но не сейчас, в закладки просто закинул на будущее - мне OMS карты нравятся - там пешие тропинки есть, высоты обозначены и выглядит дефолтный слой, как на уроках географии. Ностальгия =) Я его уже почти написал в версии 1. Охото залить в гуглплей, наполнить контентом и по-раздовать, самому по-пользоваться.
Александр Васильев
спасибо!
KeepOnSmiling ??
[
"Если делать вот такую штуку: ",
{
"type": "link",
"text": "https://codelabs.developers.google.com/codelabs/first-flutter-app-pt2/img/b17de15fa7831a1c.gif"
},
"\n\nто при лайке ребилдится будет целиком все пункты? А если их дофига... это же какая нагрузка получится?"
]
northelks
если provider, то нет
Pavel Pimenov
емнип, ListView билдит только то, что на экране
???????
ListView.builder вроде как
Pavel Pimenov
[
"да, я имел в виду, если использовать его в виде ",
{
"type": "code",
"text": "ListView.builder(...)"
},
"\n(а не ",
{
"type": "code",
"text": "new ListView( [...])"
},
")"
]
KeepOnSmiling ??
А что это за провайдер такой?
Pavel Pimenov
[
{
"type": "link",
"text": "https://pub.dev/packages/provider"
}
]
KeepOnSmiling ??
А, да, понял. Читал о таком в справке, но не знал как ребилд сработает
northelks
[
{
"type": "link",
"text": "pub.dev"
},
" -> provider"
]
Pavel Pimenov
[
"Почему ",
{
"type": "code",
"text": "myFunction(await future1(), await future2())"
},
"\nвызывает Future по очереди, а не параллельно? Так и было задумано?\n",
{
"type": "link",
"text": "https://dartpad.dartlang.org/eff8122f948ab95d6619010e0a16aaa5"
},
""
]
???????
[
{
"type": "code",
"text": "Future.wait([ ])"
}
]
Pavel Pimenov
[
"И какие есть альтернативы? ",
{
"type": "code",
"text": "Future.wait( >[...])"
},
" не позволяет использовать Future разных типов (только через dynamic)"
]
Pavel Pimenov
мне нужно дождаться, пока оба выполнятся
Pavel Pimenov
а точнее, четыре запроса
???????
[
{
"type": "link",
"text": "https://t.me/rudart/83090"
}
]
???????
Альтернатива - изоляты, лол
KeepOnSmiling ??
Это если внутри itemBuilder: возвращать в return виджет, который будет Stateful? А перегрузками такое не чревато? Это нормальная практика?
???????
Future.wait и есть то что ты хочешь, сам же знаешь
???????
Мешай возвращаемые значения как хочешь
Pavel Pimenov
почти, но там теряются типы
Pavel Pimenov
немного некрасиво
???????
Ну так возвращай Map<,> или еще что
???????
Вариантов то масса
???????
[
{
"type": "pre",
"text": "future1 = func1();\nfuture2 = func2();\nres1 = await future1;\nres2 = await future2;",
"language": ""
}
]
???????
Разве не то что надо?
Pavel Pimenov
[
{
"type": "link",
"text": "https://dartpad.dartlang.org/69ec3785d5142c522358484a8defe755"
},
"\nоказывается, да"
]
Pavel Pimenov
то есть выполнение всё-таки начинается в момент создания, а не в момент вызоыва await
???????
await эт дожидаться завершения
???????
можешь вообще болт ложить и не дожидаться
???????
[
{
"type": "pre",
"text": "Future func1() async {\n int res = 0;\n for (int i = 1;i<5;i++) {\n res += i*2;\n print(' *func1: $i = $res');\n await Future.delayed(Duration(seconds: 1));\n }\n return res;\n}\n\nFuture func2() async {\n int res = 0;\n for (int i = 1;i<5;i++) {\n res += i*3;\n print(' *func2: $i = $res');\n await Future.delayed(Duration(seconds: 1));\n }\n return res;\n}\n\nmain() async {\n Future future1 = func1();\n Future future2 = func2();\n int res1 = await future1;\n int res2 = await future2;\n print('# $res1 x $res2');\n}",
"language": ""
}
]
Karen
как ты пришел в этому выводу по своему коду?
Pavel Pimenov
если бы выполнение начиналось в момент await, то выполнение square(4) началось бы после завершение square(3)
Pavel Pimenov
[
"а он печатает это\n",
{
"type": "pre",
"text": "15:14:17.234 started calculating 3^2\n15:14:17.235 started calculating 4^2\n15:14:18.235 finished calculating 3^2\n15:14:18.238 finished calculating 4^2\n3^2 + 4^2 = 25",
"language": ""
},
""
]
Dmitry Bubnenkov
[
"Засетапл флаттер. И на первом же примере ошибка:\n",
{
"type": "pre",
"text": "adb: failed to install D:\\code\\flutter\\app1\\app_1\\build\\app\\outputs\\apk\\app.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]\nError launching application on Android SDK built for x86.",
"language": ""
},
""
]
Dmitry Bubnenkov
гугление показывает какие-то не очень годные результаты
Sergey ?
создай 64битный эмулятор
Sergey ?
32битные не поддерживаются
Dmitry Bubnenkov
А где тут 64 битный?
Dmitry Bubnenkov
тоесть по факту любой можно выбрать?
Sergey ?
там где написано x86_64
Dmitry Bubnenkov
А тут нет такого
Dmitry Bubnenkov
только x86 которые на скрине
Sergey ?
у тебя какая ос?:
Dmitry Bubnenkov
Win 10 x64
Dmitry Bubnenkov
ой пардон
Dmitry Bubnenkov
помогла кнопка рефреша
Dmitry Bubnenkov
и появились:
Davron Asrorov
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Duplicate plugin key: FLTConnectivityPlugin' Кто сталкивался с такой ошибкой при запуске IOS приложения??
Kherel
Всем привет. Такой вопрос. У меня есть разные entities news и event, они очень схожие за исключением пары параметров. Поэтому я создал базовый класс post для них. Bloc, у них тоже может быть идентичный, если не реализовывать создание и редактирование entity внутри блока. Поэтому я хочу вынести создание entity в сервис, который в ui, будет диспатчить готовый объект, тип newsBloc.dispatch(newsService.create(…)); Экземпляр блоков, буду создавать из одного класса Post, прикидывая туда разные репозитории. Так норм?
Dmitry Bubnenkov
[
"А кто сталкивался с ошибкой:\n",
{
"type": "pre",
"text": "Error connecting to the service protocol: HttpException: Connection closed before full header was received, uri = http://127.0.0.1:62191/pDEVZH40QtU=/ws",
"language": ""
},
"\nИз решений видел только даунгрейд до 28 версии API c 29"
]
Dmitry Bubnenkov
как решать?
Andriy Syvan'
Это когда hot reload на эмуляторе не работает или что-то такое?
Тимур
[
"Парни, тупой вопрос:\nКак сделать чтоб на экране данные парсились с бэкенда только один раз, а не при каждом входе на экран?\nЕсть экран\n",
{
"type": "pre",
"text": "class _SearchWidgetState extends State {\n Future> _stock;\n\n @override\n void initState() {\n _stock = fetchStock();\n super.initState();\n } \n...\nFutureBuilder>(\n future: _stock,\n // initialData: InitialData,\n builder: (BuildContext context,\n AsyncSnapshot> snapshot) {\n if (snapshot.hasData) {\n return ListView.builder(\n....",
"language": ""
},
"\nМне надо чтобы метод ",
{
"type": "pre",
"text": "fetchStock",
"language": ""
},
" выполнился только первый раз, а не каждый раз при входе на экран"
]
Dmitry Bubnenkov
при сборке приложения первого
Dmitry Bubnenkov
точнее при его старте
Dmitry Bubnenkov
А какой флаг?
Aleksey
выглядит логично, но я не понял какую проблему ты пытаешься решить этим. не для красоты же)
Dmitry Bubnenkov
это где-то тут?
Kherel
ну я не хочу 2 разных блока создавать. можно просто в репозитории создавать, а не в сервисе, но я так понял, так не делают.
Davron Asrorov
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Duplicate plugin key: FLTConnectivityPlugin' Кто сталкивался с такой ошибкой при запуске IOS приложения??
Dmitry Bubnenkov
А как файл настроек называется? pubspec.yaml ?
Dmitry Bubnenkov
А если я Визуал Код юзаю?
Konstantin Smirnov
Ребята, а кто знает, как в плагине google_maps_flutter вывести стоковые контролы (кнопки зумма, сдвига) на карту?
???????
Там разве нет параметра в конструкторе виджета такого?
???????
На крайний случай всегда можно через Stack нарисовать свое)
Александр Васильев
Еще так можно: await Future.forEach(funcList, (Function func) async { await func(); }
Dmitry Bubnenkov
[
{
"type": "pre",
"text": "class MyApp extends StatelessWidget {\n @override\n Widget build(BuildContext context) { } ",
"language": ""
},
"\nТретья строка это и есть конструктор? Если да, то почеуму он так вызывается а не\nMyApp() {}"
]
Тимур
Решил вопрос переводом экрана на Stateless widget
Dmitry Bubnenkov
А вот тут о каком глобал-ки он говорит:
Fearless Cry
третья строка это метод
Konstantin Smirnov
[
"Нарисовать можно. И даже использую padding в картах: ",
{
"type": "link",
"text": "https://github.com/flutter/plugins/blob/master/packages/google_maps_flutter/example/lib/padding.dart"
},
"\nНо, конечно же, хотелось бы без изобретения велосипеда. В конструкторе параметров за вывод контролов не нашел..."
]
Dmitry Bubnenkov
а что ему не нравится в ней?
Leonid
[
{
"type": "link",
"text": "https://flutter.dev/docs/get-started/codelab"
}
]
Ruslan Strelba
твой бэкенд походу гзипает контент, надо в хидере запроса убрать из accepted gzip
Pavel Lavreshin
спасибо, проблема таки оказаалась в том, что бэкенд умеет в csv для экселя и libreoffice только в win1252, а я это не учел ??
Dmitry Bubnenkov
Поясните плиз в доке вот эту часть:
Dmitry Bubnenkov
Мы тут конструктор вызываем? (вторым кружком внутри обвел)
Andrey
Да, это конструктор в лямбде
KeepOnSmiling ??
Почему иногда используют new Material, а иногда new Container? Это похожие вещи? В чём разница или профит?
Pavel Pimenov
[
"Да, без лямбды то же самое можно записать вот так\n",
{
"type": "code",
"text": "class RandomWords extends StatefulWidget {\n @override\n RandomWordsState createState() {\n return new RandomWordsState();\n }\n}"
},
""
]
Dmitry Bubnenkov
Т.е. в дочернем классе мы вызываем конструктор родителя? Так?
Pavel Pimenov
Не, родитель тут это StatefulWidget
Pavel Pimenov
Просто создаём объект другого класса, который называется RandomWordsState
Dmitry Bubnenkov
[
{
"type": "pre",
"text": "RandomWordsState createState() { }",
"language": ""
},
"\nТоесть это не конструктор?"
]
Dmitry Bubnenkov
[
"вместо ",
{
"type": "code",
"text": "createState()"
},
" может быть любое другое название функции?"
]
Pavel Pimenov
[
"Текущий класс называется RandomWords, его конструктор бы выглядел так\n",
{
"type": "pre",
"text": "RandomWords(...) {\n ...\n}",
"language": ""
},
""
]
Pavel Pimenov
Нет, потому что любой наследник StatefulWidget обязан реализовать функцию createState
Pavel Pimenov
[
"Поэтому там ",
{
"type": "mention",
"text": "@override"
},
""
]
Dmitry Bubnenkov
А что он на него ругается? Я по описанию не совсем понял
Pavel Pimenov
RandomState должен наследовать State
Dmitry Bubnenkov
[
{
"type": "pre",
"text": "class RandomState extends State ",
"language": ""
},
"\nВ квадратных скобках имя класса от которого мы наследуемся. А перед ними что за слово State?"
]
Антон Шевелёв
Друзья, а подскажите пожалуйста, есть ли какой-то способ прибить AlertDialog имея его key?
Pavel Pimenov
[
"Вообще на начальном этапе в этом необязательно разбираться, прости пиши ",
{
"type": "code",
"text": "extends State<НазваниеВиджета>"
},
" и всё будет работать\n\nА чтобы разобраться, почитай, как устроен Dart, и позапускай примеры\n",
{
"type": "link",
"text": "https://dart.dev/guides/language/language-tour"
},
"\nТо, что ты спрашиваешь, написано в разделах ",
{
"type": "italic",
"text": "Extending a class"
},
" и ",
{
"type": "italic",
"text": "Generics"
},
", но вообще в этой статье всё полезно изучить"
]
Pavel Pimenov
Что значит прибить? Закрыть?
Pavel Pimenov
[
"Если он в данный момент показывается поверх всего, то вроде просто ",
{
"type": "code",
"text": "Navigator.of(context).pop();"
},
""
]
Dmitry Bubnenkov
Спасибо, я с Дженериками более менее знаком, не мог бы ответить тут какая логика? просто как я помню сам дженерик до указывается, а не после типа так: []
Антон Шевелёв
Действительно, можно просто попросить навигатор его закрыть. ?? Спасибо
Pavel Pimenov
int[] – это именно массив (список) с типом int. А в данном случае State – это generic class
Pavel Pimenov
То есть, говоря неформально, это состояние для какого виджета? Если это состояние для виджета MyWidget, то пишем State
KeepOnSmiling ??
[
"Кто подскажет, зачем вот тут при использовании кода локализации используется context? Почему без него нельзя, зачем он?\n\n",
{
"type": "link",
"text": "http://flutterdevs.com/blog/in-app-localization-in-flutter/"
},
""
]
KeepOnSmiling ??
[
"Вот тут:\n",
{
"type": "pre",
"text": "AppLocalizations.of(context).appNameShort,",
"language": ""
},
""
]
KeepOnSmiling ??
Почему нельзя просто создать статический класс, установить нужный locale и вызывать напрямую?
Roman Peshkov
это реализация di через InheritedWidget
KeepOnSmiling ??
А что это значит?)
Roman Peshkov
это значит, что нужно воспользоваться любимым поисковиком
Roman Peshkov
[
{
"type": "link",
"text": "https://medium.com/flutter-community/dependency-injection-in-flutter-with-inheritedwidget-b48ca63e823"
}
]
Kherel
у меня есть текст приходящий с внешего api, в тексте есть в том числе ссылки, я хотел бы открывать ссылки в браузере, знаю что есть url_launcher, но как мне спарсить текст и выделить в нем ссылки ? как вариант можно попытаться переганять в markdown, но может есть более простой способ?
Pavel
Всем доброго вечера! Подскажите, если на экране несколько виджетов должны загружаться асинхронно, следует каждый из них оборачивать в StreamBuilder? Или делать общий для всех и пихать все данные в один стейт? Хочется, чтобы при получении данных форма не перезагружалась целиком и не "промаргивала"
Davron Asrorov
Ну если хочется, чтобы при получении данных форма не перезагружалась целиком и не "промаргивала" то определенно поотдельности. Да и вообще смысл StreamBuilder если ты оборачиваешь всё, чего уже не юзать setState
Pavel
Т.е. вместе их использовать-это антипаттерн?
Pavel
Соотвественно , заворачивать один stream builder в другой тоже нельзя?
Slava Marchenko
Можно а бывает нужно
Davron Asrorov
Вопрос был про все данные в один стейт, а не про вместе. Оборачивать в несколько уровней. думаю это нормально, учитывая, что бывает нужно
Davron Asrorov
Мысли прям читают
Artem Shkryab
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/ValueListenableBuilder-class.html"
}
]
Ivan Dembicki
Привет! Подскажите, как получить доступ по ссылке к конструктору класса? К примеру: Где-то задано: TypesMap.typesMap["Application"] = Application; Затем где-то: var constructor = TypesMap.typesMap["Application"]; var instance = new Conctructor(); Но Application это ссылка на тип, а не на конструктор, поэтому не работает. Как?
Ivan Dembicki
Пока выкрутился через TypesMap.typesMap["Application"] = Application.create; .... static Application create () { return new Application(); } Но может красивше можно?
Ivan Dembicki
Не, и это ругаеццо
Олжас Сулеймен
Можно через рефлексию, но ее нету во флаттере, так что функций
Олжас Сулеймен
И сделать через интерфейс на статик метод не получится
Ivan Dembicki
У меня получилось через статики вот так: class FactoryMap { static var factoryMap = new Map (); static setFactory(String name, Function factory) { factoryMap[name] = factory; }
static Function getFactory(String name) { return factoryMap[name]; } }
class ApplicationFactoryMap extends FactoryMap { static void initMap() { FactoryMap.setFactory("Application", ApplicationState.create); FactoryMap.setFactory("Menu", MenuState.create); FactoryMap.setFactory("Item", ItemState.create); } }
class ApplicationState extends StateController { static ApplicationState create () { return new ApplicationState(); } } .... и так далее.
С конструкторами как, не догадался пока.
Ivan Dembicki
Но в общем, и так с пивом потянет.
l
конструкторы пока нельзя как функции передавать, видел issue в гите дарта
Ivan Dembicki
Да, вполне возможно. Я тоже не нашел как.
l
[
{
"type": "link",
"text": "https://github.com/dart-lang/language/issues/216"
}
]
l
хотя я особо не рылся там в комментах, может и был способ
Олжас Сулеймен
[
"может кому пригодится ",
{
"type": "link",
"text": "https://gist.github.com/ykmnkmi/994e50bcc7af8479f437bfa4f054cbb1"
},
""
]
App Le
[
"При попытке открыть другую страницу в процессе build-а BlocBuilder-a крашится приложение с ошибкой \n",
{
"type": "pre",
"text": "setState() or markNeedsBuild called during build",
"language": ""
},
""
]
App Le
как можно реализовать переход на другую страницу внутри blocbuilder-a?
Aleksey
void _onWidgetDidBuild(Function callback) => WidgetsBinding.instance.addPostFrameCallback((_) { callback(); }); сделай переход внутри callback в этой функции
Aleksey
он выполнится после того как buid закончит работу
App Le
?? спасибо, попробую
Aleksey
тут ктото обьяснял почему это не очень хороший способ, лучше перепроектируй приложение чтобы избежать использование этой функции
Aleksey
например перенести управление роутингом в блок
App Le
[
"Типа так? из\n",
{
"type": "link",
"text": "https://www.didierboelens.com/2018/12/reactive-programming---streams---bloc---practical-use-cases/"
},
""
]
Aleksey
там где ты вызываешь роутинг сделай отправку эвента в твой блок, а уже в нем вызов роутинга
|