Программирование : Dart & Flutter по-русски
Evgenii Egorov
centerTitle :true
Rinat Kurmashev
это центрует по горизонтали
Anton ?? ? ??
Покажи как ты хочешь
Rinat Kurmashev
это appbar с prefferedsize
Aleksey
может нужен SafeArea ?
Sergey Lavinov
Оберни в центр
???????
Или Align - он помощнее)
???????
Но для начала все это оберни в контейнер который выкрасишь в красный
Rinat Kurmashev
0 реакции
Rinat Kurmashev
[
{
"type": "pre",
"text": "child: AppBar(\n automaticallyImplyLeading: false,\n titleSpacing: 0.0,\n title:\n Center(child:\n Row(\n crossAxisAlignment: CrossAxisAlignment.stretch,\n mainAxisAlignment: MainAxisAlignment.start,",
"language": ""
}
]
Sergey Lavinov
А, так у тебя Row есть
Sergey Lavinov
[
"Дай ему ",
{
"type": "link",
"text": "CrossAxisAlignment.center"
},
""
]
Rinat Kurmashev
у ощущение, что нужно использовать не title
Sergey Lavinov
Или как он там зовется
Sergey Lavinov
Поправил ^
Rinat Kurmashev
заменил на container red
???????
Тама еще размеры есть, чтоб растянулся)
Rinat Kurmashev
все еще завернутый в центр
Rinat Kurmashev
container же должен растягиваться на всю высоту?
Rinat Kurmashev
ощущения что у title жесткие размеры, а в коде appbar не нахожу(
Kit Khilobok
Судя по опыту, title у аппбара в высоту хрен растянешь
Rinat Kurmashev
вот как без row центрануть просто container?
???????
Покрась в красный, говорюж. И не будет ощущений)
Rinat Kurmashev
что покрасить то?)
Rinat Kurmashev
вон же картинка выше
Kit Khilobok
Вопрос, зачем вообще использовать appbar И title в данном конкретном случае
Sergey Lavinov
Вроде да. А вообще я побаиваюсь использовать контейнер теперь. Во-первых это почти всегда оверхед, во вторых его не законстантить, в-третьх можно выхватить неждан, если не знать, что у него под капотом
???????
Все что можешь, радугу сделай. контейнеру color: red
Rinat Kurmashev
[
{
"type": "pre",
"text": "appBar: PreferredSize(\n preferredSize: Size.fromHeight(144.0),\n child: AppBar(\n automaticallyImplyLeading: false,\n titleSpacing: 0.0,\n title:\n Center(child:\n Container(color: Colors.red)\n ),",
"language": ""
}
]
Sergey Lavinov
Тебе точно нужен AppBar?
Rinat Kurmashev
возможно нет)
Rinat Kurmashev
вот я и хотел спросить совета
Anton ?? ? ??
Ему нужен обычный серч бар же
Kit Khilobok
Судя по опыту, title у аппбара в высоту хрен растянешь
Kit Khilobok
Вопрос, зачем вообще использовать appbar И title в данном конкретном случае
Sergey Lavinov
Мне кажется проще сделать свой хедер, который в перспективе можно переиспользовать без боли сзади
Kit Khilobok
А можно просто всё запихнуть в стэк и контейнер наверху закрепить
???????
Там можно очень хитро через сливер, вроде как.
Rinat Kurmashev
хорошо, где найти высоту отступа от топа?
Rinat Kurmashev
которая под телефонным тайтл баром?
???????
Margin у контейнера
Rinat Kurmashev
ща покажу
Kit Khilobok
Для этого есть SafeArea
Sergey Lavinov
Зачем она тебе? SafeArea проще должно быть
Kit Khilobok
А вообще через MediaQuery можно как-то вытянуть
Kit Khilobok
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/material/kToolbarHeight-constant.html"
}
]
Sergey Lavinov
Беглый осмотр его содержимого не показал ничего похожего
Kit Khilobok
Ну значит я напутал. Как-то давно делал, до того, как узнал про safearea
Rinat Kurmashev
тогда вопросов больше нет)
Rinat Kurmashev
сделаю через flexibleSpace в safearea
Rinat Kurmashev
всем спасибо)
Алексей Корпатенков
Кто-нибудь реализовывал у себя разлогин пользователя по тайм-ауту? Требования: даже если приложение в фоне или просто бездействие пользователя, при возвращении через n минут сбрасывать сессию пользователя. Поделитесь идеями
Анатолий
сбрасывай когда просыпается
???????
Так при логине просто подключить Future.delayed?
???????
Или таймаут в фоне не идет?
Evgenii Egorov
Ну ведь он только при бездействии разлогинивает
Evgenii Egorov
Как я понял
Анатолий
в фоне ничего не идет
???????
Что такое "при бездействии"?
???????
Когда пользователь не совершает действий?
Анатолий
было бы неприкольно лазить по приложению и внезапно увидеть логин
???????
Ну тут смотреть в сторону BlocDelegate Можно даже тупо каждую секунду смотреть когда было последнее действие. А в BlocDelegate крутятся вообще все события. Он тем и хорошь, что из него можно увидеть, что вообще собственно происходит, логировать события и ошибки.
Aleksey
сделать логин через выдачу токена с временем действия, через указанное время токен становится не действительным и требуется повторный логин
Алексей Корпатенков
Т.е. только силами бэкенда. Такая идея как раз в приоритете
???????
Главное не привязываться к часам, а к количеству проверок)
???????
Силами бэкэнда в любом случае надо!!!!!!!
???????
А на клиенте просто дублировать
Aleksey
ну да, если у вас там oauth то просто время действия токена изменить и всё
Мумитроль
Или когда сервер вернет соответственный код, мол все, ты разлогинен. По сути так и есть правильно.
???????
401, если что) Но лучше продублировать все это на клиенте, чтоб не порождать на сервере заранее известных ошибок и не мучать клиента попросту ожиданием ответа на запрос (которые не завершиться) и уж точно не стоит дудосить свой сервер ненужными запросами "я живой?".
???????
Алсо, про "я живой?" была статья на хабре, как ребяты на огромные бабки поали использую таким макаром firebase.
???????
А в чем, собственно, смысел разлогинивания пользователя?
???????
В томже oauth2 вместе с access token'ом обычно выдается и refresh token
Алексей Корпатенков
Требование приложения
???????
А можно поконретнее, в чем выгода заказчика?
Алексей Корпатенков
Есть данные, которыми могут воспользоваться не в хороших целях. Вдруг я скрыл приложение и отошёл.
???????
А, типа банковских приложений, я понял.
Алексей Корпатенков
Именно
???????
Сейчас попробую чото простое предложить, разминки ради)
(;?_?) Ivan Zhuravlev ???>?
банки и прочие сурьезные дяди, не?
(;?_?) Ivan Zhuravlev ???>?
shared_preferences и там хранить last_action_time
???????
Очень некрасиво бд "трогать" по пустякам.
???????
Даже такую быструю и локальную)
???????
Сейчас попробую предложить вариант)
(;?_?) Ivan Zhuravlev ???>?
там же не бд? файл тупо.
???????
Локальная бд, ага
???????
Еще, вроде как, обещаются сделать их универсальными. Чтоб в вебе, мобилке, десктопе идентично работала)
???????
В вебе, её роль, наверное, localStorage будет выполнять. А в десктопе, мб, какуют свою NoSql простенькую прикрутят.
(;?_?) Ivan Zhuravlev ???>?
хм. ну суть в том. что для shared_preferences на обоих девайсах нативная реализация внутри, И это не будет постоянным пинком firebase и прочих бэкендов
(;?_?) Ivan Zhuravlev ???>?
???>?
(;?_?) Ivan Zhuravlev ???>?
я бы туда смотрел
???????
Ну да, эт понятно. Прост идея в том, что незачем это хранить на жестком, ведь можно хранить в оперативе.
???????
Этож на время сеанса, а не между сеансами.
(;?_?) Ivan Zhuravlev ???>?
[
"ну в фоне еще не факт, что оно проживет столько времени, сколько нужно для сброса, до того как его мусорщик съест или токен истечет... вопрос в том, если пользователь свернул и убил приложение, при повторном запуске в допустимых временных лимитах - ему надо снова логиниться или нет. мне кажется только с этим стоит определиться. и если надо логиниться, то можно в состоянии приложения в памяти держать ",
{
"type": "code",
"text": "last_updated_at"
},
", а если считать что он еще залогинен - то в локальной бд хранить"
]
???????
Сча, я запилю свой упрощенный вариант через пару минут) А там, мб, общим разумом чегот придумаем)
???????
[
{
"type": "mention",
"text": "@Dreddyi"
},
" ",
{
"type": "mention",
"text": "@HazarD2311"
},
" \n",
{
"type": "link",
"text": "https://dartpad.dartlang.org/2466b8f34183743281be0a9fa155a777"
}
]
???????
Сори, что без комментариев. Но мне кажется, как то так будет вполне себе здорово)
???????
Смысл в том, что каждую секунду смотрите на счетчик, если "пора" - блокируете, нет - увеличиваете.
???????
При действиях можете сбрасывать этот счетчик
???????
Ну и есть поток, чтоб подписаться.
(;?_?) Ivan Zhuravlev ???>?
ну... надо еще как-то счетчик обнулять, да, когда что-то юзверь делает...хм...
???????
[
"тама метод ",
{
"type": "code",
"text": "dropCounter()"
},
""
]
(;?_?) Ivan Zhuravlev ???>?
я заметил, угу
???????
Или вы где в приложении его дергать?
???????
У себя яб в BlocDelegate разместил бы
(;?_?) Ivan Zhuravlev ???>?
я скорее про то как приложение будет сам этот keepAlive дергать
???????
Там вообще все события и ошибки оказываются
Алексей Корпатенков
Идея интересная,учту
Dambas
Ребят, всем доброго времени суток! Есть нормальная статья на данный момент как подключить firebase к моему флаттеру? А то я всё пытаюсь, вроде получилось, но не могу обратится к FirebaseInstanceId чтобы отправить себе нотификейшен
Dambas
приложение регистрирует
Dambas
import 'package:firebase_messaging.dart';
Dambas
пытаюсь вот это подключить, а его нет
Dambas
уже все packages поставил
Dambas
в app/build.gradle dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'com.google.firebase:firebase-core:16.0.9' implementation 'com.google.firebase:firebase-messaging:17.3.3' }
Dambas
где и какие разрешения выставлять
Dambas
android:name="com.google.firebase.iid.FirebaseInstanceIdService" android:exported="true" >
Dambas
вот это? в манифесте
Dambas
androidmanifest.xml
Dambas
firebasemessaging() не видит данный метод
(;?_?) Ivan Zhuravlev ???>?
инстанс, не?
(;?_?) Ivan Zhuravlev ???>?
потом в нем получается токен и задается конфиг
(;?_?) Ivan Zhuravlev ???>?
ну я думаю если при попытке получения токена всё сломается - то значит не получил =)
(;?_?) Ivan Zhuravlev ???>?
[
{
"type": "link",
"text": "https://medium.com/flutterpub/enabling-firebase-cloud-messaging-push-notifications-with-flutter-39b08f2ed723"
},
" ну я вот от этой статьи начинал плясать. но там нет никаких доп проверок что инстанс создан успешно"
]
(;?_?) Ivan Zhuravlev ???>?
и всё же я не понял к чему это. даже если к тому что "одно дело делать по шаблону, другое думать своей головой". тогда можно просто открыть исходник плагина и посмотреть какие методы есть и что может вернуть конструктор
(;?_?) Ivan Zhuravlev ???>?
ну единственная проблема, с которой я пока столкнулся и не нашел с ходу решения, вылечилась обновлением с firebase_cloud_messaging с 4 до 5 версии
northelks
Может кто знает, можно ли для TextField сделать похожий эффект, как для Text при длинном тексте overflow: TextOverflow.fade?
northelks
И можно ли как-то просто зафэйдить нижнюю границу листа со скролом, чтобы был эффект, что нижние элементы уходят вниз с фэйд эффектом.
northelks
Как сделать сложно примерно знаю. Решил спросить, может кто уже мутил какие лайфхаки.
???????
По списку предположу, что надо копать в сторону списка со сливерами.
Alexandr Klimchuk
Подскажите пожалуйста корректное использование BottomAppBar. Вся страница крашится при добавлении TextField в него
???????
А что если текстфилд засунуть в sizedWidget?
Alexandr Klimchuk
Я попробую, и отпишу, сейчас просто не дома) второй день изучаю Флаттер, многих фич ещё не знаю
???????
Да я тож на верочку сказал и тоже не за пк)
Alexandr Klimchuk
Нужно такую штуку статично внизу экрана прикрепить
northelks
походу да, нужно копать в сторону сливеров
admin
Может нужно просто засунуть textfield в контейнер ?
Vadim Lukichev
Желательно прикладывать скрин краша и кусок кода его вызывающий. Т.е. давать больше инфы, это снимет много последующих вопросов. Без обид, но иногда вопросы похожи на «машина не едет, в чем может быть проблемы?»
Alexandr Klimchuk
Я учту, спасибо за совет
Семён undefined
как сделать такой же свайп?
Семён undefined
пробую через Dismissible, но мне кажется, что он не подходит для моих целей
Александр
[
{
"type": "link",
"text": "https://pub.dev/packages/flutter_slidable"
}
]
Александр
Сделай color transparent
Семён undefined
предлагаешь исходники распотрошить?
Семён undefined
мне просто нужно не потянуть и тыкать, а просто потянуть
???????
[
{
"type": "mention",
"text": "@bunopus"
}
]
???????
[
"Нашел более интересный способ сделать именно через базу данных (если уж очень хочется), но при этом без обращения к физическому накопителю.\n\n",
{
"type": "pre",
"text": "import 'package:sqflite/sqflite.dart';\n\n. . .\nDatabase database = await openDatabase(\n ':memory:',\n version: 1,\n onCreate: (Database db, int version) async {\n await db.execute(\n 'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');\n });\n. . .",
"language": ""
},
""
]
Ivan Dembicki
Привет! Свитчусь на Flutter. Первые впечатления, это Nesting-Hell Oriented Programming Как выживаете? :)
maxnemoy
provider или bloc рулят стейтами, ui разбит кучу мелких виджетов, и проблем нет не с читабельностью, не с поддержкой
Ivan Dembicki
Да, я примерно так и предположил. Хотя сам язык и IDE провоцируют на обратное :) Спасибо!
maxnemoy
если vs code то можешь писать партянку ui, потом рефачить по ctrl+. -> extract widget пока не привыкнешь, под jetbrains в плагин такой возможности не подвезли как мне помнится
Ivan Dembicki
Я в Android Studio, экстракт переменных и методов работает норм. Экстракт виджеты посмотрю, не обращал внимания.
Олжас Сулеймен
repr в дарте? сталкивался кто
Олжас Сулеймен
нужно отобразить коллекции как литерал
Олжас Сулеймен
тянуть code_builder не очь
Rinat Kurmashev
всем привет, в проекте использую bloc, на главном экране гугл карта с кнопкой, по кнопке открывается список городов, после выбора надо перенести пользователя в нужную локацию, не получается реализовать, карта остается на месте
Георгий Малков
[
"Всем привет, пишу диплом по теме применения мобильных приложений на уроках информатики в школе, опрос максимально короткий, занимает 3-5 минут.\n",
{
"type": "link",
"text": "https://bit.ly/2WlumD8"
},
"\n[Ссылка на Google Forms]\nСпасибо большое всем, кто откликнется"
]
???????
Нннада вариант: около 12 часов в день
Vit
Хэй народ, там не слыхать про намерения гугла насчет флаттера, новые девайсы на фуксии, ничего такого не слыхать?
Андрей Хливнюк
Зачем оно тебе
???????
до девайсов еще года 3 и не мобильных, а iot, без флатера на борту
Karen
без флаттера? что это значит.
???????
Какие канвасы на кофеварках-холодильниках, ну вы чего)
Rinat Kurmashev
а streamsink работает как behaviour subject?
???????
Да не) Прост на iot они вряд ли завезут интерфейсы)
Rinat Kurmashev
если например у меня вызывается setstate и я вызвал listen на stream - я буду всегда получать добавленное через sink.add значение?
???????
А зачем ты это делаешь в билде?
???????
Там тебе стримбилдер нужен
???????
Если не в билде, то причем тут сетстейт?)
Rinat Kurmashev
стрим билдер для определения первоначальной позиции карты
Rinat Kurmashev
мне после выбора города на втором экране надо поменять позицию в зависимости от выбранного города
???????
Явно чтот делаешь не так. Возможно это делается через key
???????
Билд чтоб строить интерфейс и только
Rinat Kurmashev
а что там можно через key сделать?
Rinat Kurmashev
у меня в проекте bloc
Rinat Kurmashev
я в didChangeDependencies подписываюсь на изменения в стриме текущего города
Rinat Kurmashev
и делаю _mapController.moveCamera
Rinat Kurmashev
проблема в том, что при открытии диалога например на экране карты этот listen опять срабатывает и центрует меня на выбранный город
Rinat Kurmashev
то есть мне нужно чтобы это действие отработало 1 раз, как это сделать можно?
???????
Ну или мб у карты контроллео есть
???????
Яб проектировал через ключи или контроллер)
Rinat Kurmashev
есть контроллер, как сделать так, чтобы после выбора грода на другом экране я мог через этот контроллер центрироваться на город 1 раз? :)
Rinat Kurmashev
может на bloc в этом случае не завязываться? а делать через Navigator.pop(parameters)
???????
Можете и завязываться
???????
Только лиснеры все стоит в initState располагать, ну или еще гдет
???????
но точно не в билде
Eugene
[
"Всем привет, кто-нибудь сталктвался с задачей получить фото с камеры, а потом его сделать квадратным с заданным размером, например 500х500 пикселей.\nСамый простой способ это использовать библиотеку ",
{
"type": "link",
"text": "https://pub.dev/packages/image"
},
", но процесс обрезки и сжатия крайне медленный.\nНашёл плагин ",
{
"type": "link",
"text": "https://pub.dev/packages/flutter_image_crop"
},
", но он может только обрезать\nА вот этот ",
{
"type": "link",
"text": "https://pub.dev/packages/flutter_image_compress"
},
" может только сжать, без обрезки\nТ.е. получается нужно использовать два плагина, сначала сжать одним, потом обрезать другим?\nЕсть ещё плагины с виджетами, которые позволяют пользователю самому выбрать как обрезать, но мне нужно чтобы просто на выходе была квадратная картинка, без дополнительных действий пользователя"
]
???????
Пользуюсь imaginery на бэке. Но я пережимаю не фотки с камеры, если что. А заранее известную базу фотографий.
Rinat Kurmashev
я в didChangeDependencies подписываюсь на изменения в стриме текущего города
Eugene
На бэке можно пережать, но отправлять исходную фотку долго и дорого
???????
Ну я про то и говорю, что мой кейс не про фото с камеры)
Slava Marchenko
Stream по умолчанию вроде работает как BehaviorSubject
Slava Marchenko
Точнее StreamCobtroller
Rinat Kurmashev
да, в этом и проблема
Rinat Kurmashev
при обновлении стейта я переключаюсь в выбранный город, даже если диалог открылся
Slava Marchenko
Почитай дартовские доки по мтримам. Там все написано
Slava Marchenko
Или юзай rxdart
Slava Marchenko
Там ты можешь выбрать что юзать
|