Как бы вы подошли к добавлению заставки в приложения Flutter? Он должен загружаться и отображаться перед любым другим контентом. В настоящее время перед загрузкой виджета Scaffold (home: X) происходит короткая вспышка цвета.
Я не знаю, правильный ли это способ добавить заставку, установив собственный таймер, мне не нравится держать процессоры в режиме ожидания, почему бы не выполнить некоторые домашние задачи, такие как проверка необходимых файлов или каталогов, или синхронизация некоторых журналов, или резервное копирование некоторых файлов в фон и тем временем сделать брендинг на лицевой стороне. ведь 3-4 секунды - это много времени для процессора.
Я хочу пролить свет на фактический способ создания заставки во Flutter.
Я немного проследил за следом здесь и увидел, что с Splash Screen во Flutter дела обстоят не так уж плохо.
Возможно, большинство разработчиков (например, я) думают, что во Flutter по умолчанию нет заставки, и им нужно что-то с этим делать. Есть экран-заставка, но он с белым фоном, и никто не может понять, что по умолчанию уже есть экран-заставка для iOS и Android.
Единственное, что нужно сделать разработчику, - это поместить изображение брендинга в нужное место, и заставка начнет работать именно так.
Вот как это можно сделать шаг за шагом:
Сначала на Android (потому что это моя любимая платформа :))
Найдите папку "android" в вашем проекте Flutter.
Перейдите в папку app -> src -> main -> res и поместите все варианты вашего фирменного изображения в соответствующие папки. Например:
изображение с плотностью 1 нужно поместить в mipmap-mdpi,
изображение с плотностью 1.5 нужно поместить в mipmap-hdpi,
изображение с плотностью 2 нужно поместить в mipmap-xdpi,
изображение с плотностью 3 нужно поместить в mipmap-xxdpi,
изображение с плотностью 4 нужно поместить в mipmap-xxxdpi,
По умолчанию в папке android нет drawable-mdpi, drawable-hdpi и т.д., но мы можем их создать, если захотим. По этой причине изображения необходимо поместить в папки mipmap. Также XML-код по умолчанию для экрана-заставки (в Android) будет использовать @mipmap вместо ресурса @drawable (вы можете изменить его, если хотите).
Последний шаг на Android - раскомментировать часть кода XML в файле drawable / launch_background.xml. Перейдите к app -> src -> main -> res-> drawable и откройте launch_background.xml. Внутри этого файла вы увидите, почему фон экрана Slash белый. Чтобы применить изображение брендинга, которое мы разместили на шаге 2, мы должны раскомментировать часть кода XML в файле launch_background.xml. После изменения код должен выглядеть так:
Обратите внимание, что мы комментируем код XML для белого фона и раскомментируем код изображения mipmap. Если кому-то интересно, то в файле styles.xml используется файл launch_background.xml.
Второй на iOS:
Найдите папку «ios» в своем проекте Flutter.
Перейдите в Runner -> Assets.xcassets -> LaunchImage.imageset. Должны быть LaunchImage.png, LaunchImage@2x.png и т. Д. Теперь вам нужно заменить эти изображения на свои варианты изображения бренда. Например:
изображение с плотностью 1 должно переопределить LaunchImage.png,
изображение с плотностью 2 должно переопределить LaunchImage@2x.png,
изображение с плотностью 3 должно переопределить LaunchImage@3x.png,
изображение с плотностью 4 должно переопределить LaunchImage@4x.png,
Если я не ошибаюсь, LaunchImage@4x.png не существует по умолчанию, но вы можете легко его создать. Если LaunchImage@4x.png не существует, вы также должны объявить его в файле Contents.json, который находится в том же каталоге, что и изображения. После изменения мой файл Contents.json выглядит так:
Это должно быть все, что вам нужно. В следующий раз, когда вы запустите приложение на Android или iOS, у вас должен быть правильный экран-заставка с добавленным вами фирменным изображением.
У меня возникла ошибка Cannot resolve symbol '@mipmap/ic_launcher'в Android Studio 3.1.1 (даже после перестройки кеша), однако приложение скомпилировано и запустилось без ошибок, и отображается графика запуска.
IanB
1
У меня такая же проблема, однако я не могу запустить его, так как во время выполнения он вылетает и сообщает мне, что изображение отсутствует. но по какой-то причине он не может разрешить MIP-карту. Кто-нибудь знает, почему это?
carlosx2
1
Привет, ребята, не знаю, почему у вас возникла эта проблема, но для меня это похоже на проблему с синхронизацией проекта (нет другой причины не найти ресурс, если он есть). Я не знаю, как решить эту проблему, потому что у меня никогда не было этой проблемы, но попробуйте синхронизировать проект, очистить, перестроить и т. Д., Что бы это ни было возможно в вашей IDEA. Также попробуйте использовать ресурс в папке с возможностью рисования и заменить аннотацию mipmap на аннотацию с возможностью рисования. Я только догадываюсь :)
Стойчо Андреев
1
Любопытно, почему вы добавляете 4-кратное изображение. XCode, похоже, ожидает только 3x, есть ли причина, по которой вы добавляете 4x?
Я единственный, у кого его значки поливаются, выполняя заставку и / или поливая его заставку при обновлении значков? Используя именно этот метод ...?
ChrisH
22
На самом деле Flutter дает более простой способ добавить заставку в наше приложение. Сначала нам нужно создать базовую страницу, как мы разрабатываем экраны других приложений. Вам нужно сделать его StatefulWidget, так как его состояние изменится через несколько секунд.
Логика
Внутри initState () вызовите Timer () с продолжительностью, как вы хотите, я сделал это 3 секунды, как только закончите, переместите навигатор на главный экран нашего приложения.
Примечание . Приложение должно отображать экран-заставку только один раз, пользователь не должен возвращаться к нему снова при нажатии кнопки «Назад». Для этого мы используем Navigator.pushReplacement () , он переместится на новый экран и удалит предыдущий экран из стека истории навигации.
Белый экран-заставка по умолчанию будет отображаться в течение 1+ секунд, прежде чем отобразится этот пользовательский. Придется переопределить сгенерированные проекты xcode и android, чтобы устранить его.
d3vtoolsmith
Да. Экран-заставка по умолчанию в iOS и Android будет отображаться всегда, этот всплывающий экран-заставка является дополнением к этому.
Махеш Пери
Дело в том, что этот пример ненадежен .... Что делать, если ваше приложение загружается более 3 секунд по таким причинам, как подключение к сети?
Эмануэль Санга
Для дополнительной настройки я больше поддерживаю этот ответ. Я хочу сначала выполнить HTTP-запрос при отображении экрана-заставки. Этот подход был намного проще
Идрис Стэк
17
Хорошего примера пока нет, но вы можете сделать это самостоятельно, используя собственные инструменты для каждой платформы:
Подпишитесь на выпуск 8147, чтобы получать обновления по образцу кода для экранов-заставок. Если вас беспокоит мерцание черного цвета между заставкой и приложением на iOS, подпишитесь на выпуск 8127 для получения обновлений.
Изменить: по состоянию на 31 августа 2017 г. улучшенная поддержка экранов-заставок теперь доступна в новом шаблоне проекта. См. №11505 .
Я разобрался ... видимо образ iOS был плохим. iOS и ANDROID теперь работают идеально. ложная тревога
IrishGringo
@SmrutiRanjanRana какой идеальный размер для этого изображения?
Маттиас
2
Этот ответ был бы намного полезнее, если бы был пример расположения изображения. В противном случае пользователю придется угадывать, как добавить путь.
Добавьте свои настройки в файл pubspec.yaml вашего проекта или создайте файл с вашими настройками в корневой папке проекта с именем flutter_native_splash.yaml.
Вы также можете использовать # в цвете. color: "# 42a5f5" Вы также можете установить для android или ios значение false, если не хотите создавать заставку для определенной платформы.
не могли бы вы опубликовать полный код (код, который мы можем запустить независимо, без необходимости определять наши переменные) или ссылку на github?
biniam
8
люди, которые получают сообщение об ошибке, например, изображение не найдено, после применения проверенного ответа, убедитесь, что вы добавляете @ mipmap / ic_launcher вместо @ mipmap / ic_launcher.png
Ваша IDE сообщит вам об этом, когда вы наведете курсор на ошибку
Ojonugwa Jude Ochalifu
7
И @Collin Jackson, и @Sniper правы. Вы можете выполнить следующие действия, чтобы настроить изображения запуска в Android и iOS соответственно. Затем в MyApp (), в initState () вы можете использовать Future.delayed для установки таймера или вызова любого API. Пока ответ не будет возвращен из Future, ваши значки запуска будут отображаться, а затем, когда придет ответ, вы можете перейти к экрану, на который хотите перейти после экрана-заставки. Вы можете увидеть эту ссылку: Flutter Splash Screen
Для настраиваемого экрана-заставки я создаю различные разрешения экрана, а затем добавляю изображения-заставки в папку mipmap в соответствии с разрешением для Android.
Последняя часть - это настройка launch_background.xml в папке с возможностью переноса в папке res в Android.
Просто измените свой код, как показано ниже:
<?xml version="1.0" encoding="utf-8"?><!--Modifythis file to customize your launch splash screen --><layer-list xmlns:android="http://schemas.android.com/apk/res/android"><!--<item android:drawable="@android:color/white"/><item android:drawable="@drawable/<splashfilename>"/>-->--><!--You can insert your own image assets here --><item><bitmap
android:gravity="center"
android:src="@mipmap/<Your splash image name here as per the mipmap folder>"/></item></layer-list>
Некоторые разработчики, которых я видел, добавляли заставку как растягиваемую, я пробовал это, но почему-то сборка не удалась во Flutter 1.0.0 и Dart SDK 2.0+. Поэтому я предпочитаю добавлять заставку в разделе растрового изображения.
Создание заставки в iOS намного проще.
В папке Runner в iOS просто обновите файлы LaunchImage.png своими собственными изображениями экрана-заставки с такими же именами, как LaunchImage.png @ 2x, @ 3x, @ 4x.
Просто дополнение, я считаю, что хорошо иметь 4-кратное изображение в LaunchImage.imageset. Просто обновите свой код в Content.json следующими строками, ниже 3-кратного масштаба, чтобы добавить вариант 4-кратного масштабирования:
да, именно так, есть несколько способов сделать это, но в ответ я расскажу вам, как можно добавить заставку с помощью этого пакета pub.dev/packages/dynamic_theme
Champ 96k
4
Это безошибочный и лучший способ добавить динамический экран-заставку во Flutter.
Я исправил код, оборачивающий потребительский компонент Navigator внутри другого компонента, который инициализирует контекст Navigator с помощью маршрутов, как упоминалось в этой статье.
Не могли бы вы также добавить некоторые пояснения?
Сам по себе
3
Если вам нужен дополнительный экран-заставка (после родного), вот простой пример, который работает:
classSplashPageextendsStatelessWidget{SplashPage(BuildContext context){Future.delayed(constDuration(seconds:3),(){// Navigate here to next screen});}
@override
Widget build(BuildContext context){returnText('Splash screen here');}}
Flutter предоставляет вам возможность иметь заставку по умолчанию, но есть много плагинов, которые могут сделать эту работу. Если вы не хотите использовать плагин для этой задачи и беспокоитесь, что добавление нового плагина может повлиять на размер вашего приложения. Тогда вы можете сделать это вот так.
ДЛЯ Android
Откройте файл launch_background.xml, затем вы можете вставить изображение экрана-заставки или цвет градиента по своему желанию. Это первое, что видит пользователь, открывая ваше приложение.
Для iOS
Откройте свое приложение с помощью Xcode, нажмите Runner> Assest.xcassets> LaunchImage, вы можете добавить изображение сюда. Если вы хотите изменить положение изображения экрана запуска, его можно изменить на LaunchScreen.storyboard.
Вот шаги по настройке заставки на платформах IOS и Android для вашего приложения Flutter.
Платформа iOS
Все приложения, представленные в Apple App Store, должны использовать раскадровку Xcode для обеспечения экрана запуска приложения. Сделаем это за 3 шага: -
Шаг 1. Откройте ios / Runner.xcworkspace из корня каталога вашего приложения.
Шаг 2 : Выберите Runner / Assets.xcassets в навигаторе проекта и перетащите изображения запуска всех размеров (2x, 3x и т. Д.). Вы также можете создавать изображения разных размеров из https://appicon.co/#image-sets
есть ли какая-либо ошибка после такого кодирования?
Используйте синхронизацию с системой в студии Android или аннулируйте кеш и сбросьте. Это решило мою проблему. В режиме отладки флаттера потребуется некоторое время для экрана-заставки. После сборки он уменьшится, как собственный Android
Flutter.dev уже дает лучший ответ на это, это не ошибка и не проблема, просто конфиг. Просто найдите время, прочтите, и все будет решено. Всем хорошего дня.
Ответы:
Я хочу пролить свет на фактический способ создания заставки во Flutter.
Я немного проследил за следом здесь и увидел, что с Splash Screen во Flutter дела обстоят не так уж плохо.
Возможно, большинство разработчиков (например, я) думают, что во Flutter по умолчанию нет заставки, и им нужно что-то с этим делать. Есть экран-заставка, но он с белым фоном, и никто не может понять, что по умолчанию уже есть экран-заставка для iOS и Android.
Единственное, что нужно сделать разработчику, - это поместить изображение брендинга в нужное место, и заставка начнет работать именно так.
Вот как это можно сделать шаг за шагом:
Сначала на Android (потому что это моя любимая платформа :))
Найдите папку "android" в вашем проекте Flutter.
Перейдите в папку app -> src -> main -> res и поместите все варианты вашего фирменного изображения в соответствующие папки. Например:
По умолчанию в папке android нет drawable-mdpi, drawable-hdpi и т.д., но мы можем их создать, если захотим. По этой причине изображения необходимо поместить в папки mipmap. Также XML-код по умолчанию для экрана-заставки (в Android) будет использовать @mipmap вместо ресурса @drawable (вы можете изменить его, если хотите).
Последний шаг на Android - раскомментировать часть кода XML в файле drawable / launch_background.xml. Перейдите к app -> src -> main -> res-> drawable и откройте launch_background.xml. Внутри этого файла вы увидите, почему фон экрана Slash белый. Чтобы применить изображение брендинга, которое мы разместили на шаге 2, мы должны раскомментировать часть кода XML в файле launch_background.xml. После изменения код должен выглядеть так:
Обратите внимание, что мы комментируем код XML для белого фона и раскомментируем код изображения mipmap. Если кому-то интересно, то в файле styles.xml используется файл launch_background.xml.
Второй на iOS:
Найдите папку «ios» в своем проекте Flutter.
Перейдите в Runner -> Assets.xcassets -> LaunchImage.imageset. Должны быть LaunchImage.png, LaunchImage@2x.png и т. Д. Теперь вам нужно заменить эти изображения на свои варианты изображения бренда. Например:
Если я не ошибаюсь, LaunchImage@4x.png не существует по умолчанию, но вы можете легко его создать. Если LaunchImage@4x.png не существует, вы также должны объявить его в файле Contents.json, который находится в том же каталоге, что и изображения. После изменения мой файл Contents.json выглядит так:
Это должно быть все, что вам нужно. В следующий раз, когда вы запустите приложение на Android или iOS, у вас должен быть правильный экран-заставка с добавленным вами фирменным изображением.
Спасибо
источник
Cannot resolve symbol '@mipmap/ic_launcher'
в Android Studio 3.1.1 (даже после перестройки кеша), однако приложение скомпилировано и запустилось без ошибок, и отображается графика запуска.Если вы
flutter create
создали свой проект, вы можете выполнить действия, указанные на странице https://flutter.io/assets-and-images/#updating-the-launch-screen .источник
На самом деле Flutter дает более простой способ добавить заставку в наше приложение. Сначала нам нужно создать базовую страницу, как мы разрабатываем экраны других приложений. Вам нужно сделать его StatefulWidget, так как его состояние изменится через несколько секунд.
Логика Внутри initState () вызовите Timer () с продолжительностью, как вы хотите, я сделал это 3 секунды, как только закончите, переместите навигатор на главный экран нашего приложения.
Примечание . Приложение должно отображать экран-заставку только один раз, пользователь не должен возвращаться к нему снова при нажатии кнопки «Назад». Для этого мы используем Navigator.pushReplacement () , он переместится на новый экран и удалит предыдущий экран из стека истории навигации.
Для лучшего понимания посетите Flutter: Создайте свой собственный экран-заставку.
источник
Хорошего примера пока нет, но вы можете сделать это самостоятельно, используя собственные инструменты для каждой платформы:
iOS: https://docs.nativescript.org/publishing/creating-launch-screens-ios
Android: https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Подпишитесь на выпуск 8147, чтобы получать обновления по образцу кода для экранов-заставок. Если вас беспокоит мерцание черного цвета между заставкой и приложением на iOS, подпишитесь на выпуск 8127 для получения обновлений.
Изменить: по состоянию на 31 августа 2017 г. улучшенная поддержка экранов-заставок теперь доступна в новом шаблоне проекта. См. №11505 .
источник
Для Android перейдите в android> app> src> main> res> drawable> launcher_background.xml.
Теперь раскомментируйте это и замените @ mipmap / launch_image местоположением вашего изображения.
Вы можете изменить цвет экрана здесь -
источник
Самый простой способ добавить заставку во флаттер - это imho этот пакет: https://pub.dev/packages/flutter_native_splash
Руководство по установке (от автора пакета):
1. Настройка заставки
Добавьте свои настройки в файл pubspec.yaml вашего проекта или создайте файл с вашими настройками в корневой папке проекта с именем flutter_native_splash.yaml.
изображение должно быть файлом png.
Вы также можете использовать # в цвете. color: "# 42a5f5" Вы также можете установить для android или ios значение false, если не хотите создавать заставку для определенной платформы.
Если ваше изображение должно использовать весь доступный экран (ширину и высоту), вы можете использовать свойство fill.
Примечание: свойство fill еще не реализовано для экранов-заставок iOS.
Если вы хотите отключить полноэкранный экран-заставку на Android, вы можете использовать свойство android_disable_fullscreen.
2. Запустите пакет
После добавления настроек запустите пакет с
flutter pub pub run flutter_native_splash:create
Когда пакет завершит работу, ваш экран-заставка будет готов.источник
Вы должны попробовать код ниже, работал у меня
источник
люди, которые получают сообщение об ошибке, например, изображение не найдено, после применения проверенного ответа, убедитесь, что вы добавляете @ mipmap / ic_launcher вместо @ mipmap / ic_launcher.png
источник
И @Collin Jackson, и @Sniper правы. Вы можете выполнить следующие действия, чтобы настроить изображения запуска в Android и iOS соответственно. Затем в MyApp (), в initState () вы можете использовать Future.delayed для установки таймера или вызова любого API. Пока ответ не будет возвращен из Future, ваши значки запуска будут отображаться, а затем, когда придет ответ, вы можете перейти к экрану, на который хотите перейти после экрана-заставки. Вы можете увидеть эту ссылку: Flutter Splash Screen
источник
Добавление страницы, как показано ниже, и маршрутизация могут помочь
Если вы хотите продолжить, см. Https://www.youtube.com/watch?v=FNBuo-7zg2Q.
источник
Это можно сделать несколькими способами, но самый простой из них:
Для значков запуска я использую библиотеку flutter Значок запуска Flutter
Для настраиваемого экрана-заставки я создаю различные разрешения экрана, а затем добавляю изображения-заставки в папку mipmap в соответствии с разрешением для Android.
Последняя часть - это настройка launch_background.xml в папке с возможностью переноса в папке res в Android.
Просто измените свой код, как показано ниже:
Некоторые разработчики, которых я видел, добавляли заставку как растягиваемую, я пробовал это, но почему-то сборка не удалась во Flutter 1.0.0 и Dart SDK 2.0+. Поэтому я предпочитаю добавлять заставку в разделе растрового изображения.
Создание заставки в iOS намного проще.
В папке Runner в iOS просто обновите файлы LaunchImage.png своими собственными изображениями экрана-заставки с такими же именами, как LaunchImage.png @ 2x, @ 3x, @ 4x.
Просто дополнение, я считаю, что хорошо иметь 4-кратное изображение в LaunchImage.imageset. Просто обновите свой код в Content.json следующими строками, ниже 3-кратного масштаба, чтобы добавить вариант 4-кратного масштабирования:
источник
сделайте ваше материальное приложение таким
=> Добавить зависимость
=> import import 'package: splashscreen / splashscreen.dart';
Окончательный вывод экрана, подобный этому, вы можете изменить вторую в соответствии с вашими требованиями, круг будет круглым.
источник
Это безошибочный и лучший способ добавить динамический экран-заставку во Flutter.
MAIN.DART
SPLASHSCREEN.DART
CONSTANTS.DART
HOMESCREEN.DART
источник
Код от Джалди Бхатта у меня не работает.
Flutter выдает запрошенную операцию навигатора с контекстом, который не включает навигатор .
Я исправил код, оборачивающий потребительский компонент Navigator внутри другого компонента, который инициализирует контекст Navigator с помощью маршрутов, как упоминалось в этой статье.
источник
Если вам нужен дополнительный экран-заставка (после родного), вот простой пример, который работает:
источник
Flutter предоставляет вам возможность иметь заставку по умолчанию, но есть много плагинов, которые могут сделать эту работу. Если вы не хотите использовать плагин для этой задачи и беспокоитесь, что добавление нового плагина может повлиять на размер вашего приложения. Тогда вы можете сделать это вот так.
ДЛЯ Android
Откройте файл launch_background.xml, затем вы можете вставить изображение экрана-заставки или цвет градиента по своему желанию. Это первое, что видит пользователь, открывая ваше приложение.
Для iOS
Откройте свое приложение с помощью Xcode, нажмите Runner> Assest.xcassets> LaunchImage, вы можете добавить изображение сюда. Если вы хотите изменить положение изображения экрана запуска, его можно изменить на LaunchScreen.storyboard.
источник
Вот шаги по настройке заставки на платформах IOS и Android для вашего приложения Flutter.
Платформа iOS
Все приложения, представленные в Apple App Store, должны использовать раскадровку Xcode для обеспечения экрана запуска приложения. Сделаем это за 3 шага: -
Шаг 1. Откройте ios / Runner.xcworkspace из корня каталога вашего приложения.
Шаг 2 : Выберите Runner / Assets.xcassets в навигаторе проекта и перетащите изображения запуска всех размеров (2x, 3x и т. Д.). Вы также можете создавать изображения разных размеров из https://appicon.co/#image-sets
Шаг 3 : Вы можете видеть, что файл LaunchScreen.storyboard показывает предоставленное изображение, здесь вы также можете изменить положение изображения, просто перетащив изображение. Для получения дополнительной информации см. Официальную документацию https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/launch-screen/
Платформа Android
В Android во время инициализации приложения Android отображается экран запуска. Давайте установим этот экран запуска в 3 шага: -
Шаг 1. Откройте файл android / app / src / main / res / drawable / launch_background.xml.
Шаг 2 : В строке номер 4 вы можете выбрать желаемый цвет: -
Шаг 3 : В строке № 10 вы можете изменить изображение: -
Вот и все, готово! Удачного кодирования :)
источник
Для
приложения Android -> src -> main -> res -> drawble-> launch_background.xml и раскомментируйте закомментированный блок, как это
есть ли какая-либо ошибка после такого кодирования?
Используйте синхронизацию с системой в студии Android или аннулируйте кеш и сбросьте. Это решило мою проблему. В режиме отладки флаттера потребуется некоторое время для экрана-заставки. После сборки он уменьшится, как собственный Android
источник
Flutter.dev уже дает лучший ответ на это, это не ошибка и не проблема, просто конфиг. Просто найдите время, прочтите, и все будет решено. Всем хорошего дня.
https://flutter.dev/docs/development/ui/advanced/splash-screen
источник
Вы можете создать это двумя способами
Я нашел полное объяснение удаления белого экрана и отображения заставки здесь
источник
источник