Инкапсулируйте функцию глобального всплывающего окна и заполните содержимое всплывающего окна семантическим способом.
- Метод, который поддерживает несколько семантических компонентов для заполнения содержимого компонента внутри всплывающего окна.
- Поддерживает метод пользовательских семантических компонентов, чтобы разработчики могли свободно заполнять содержимое компонента внутри всплывающего окна.
- Поддержка настройки цвета фона всплывающего окна, цвета переднего плана, положения, анимации, щелчка снаружи, чтобы исчезнуть, и других функций, подробности см. ниже.
- Поддержка всплывающего окна без контекстного вызова, подробности см. ниже.
🎖 Установка
1. установить
dependencies:
flutter_custom_dialog: ^1.0.4
2. Импорт
import 'package:flutter_custom_dialog/flutter_custom_dialog.dart';
🎖 Пример
dialog_demo
divider ✅ |
body ✅ |
head&body ✅ |
listTile ✅ |
ListRadio ✅ |
progress ✅ |
progress&body ✅ |
pop menu ✅ Поддержка пользовательского местоположения |
dialog_gravity
bottom ✅ |
top ✅ |
left ✅ |
right ✅ |
center ✅ |
left bottom ✅ |
left top ✅ |
right bottom ✅ |
right top ✅ |
dialog_animation
scaleIn ✅ |
fadeIn ✅ |
rotateIn ✅ |
customIn ✅ Поддержка пользовательской анимации |
⚡ Свойство диалога
Настройки свойств всплывающего окна можно вызвать с помощью метода переменных-членов.Подробности см. в следующей таблице.
YYDialog YYDialogDemo(BuildContext context) {
return YYDialog().build(context)
..width = 220
..height = 500
..barrierColor = Colors.black.withOpacity(.3)
..animatedFunc = (child, animation) {
return ScaleTransition(
child: child,
scale: Tween(begin: 0.0, end: 1.0).animate(animation),
);
}
..borderRadius = 4.0
..show();
}
Поддерживаемые свойства
property | description | default |
---|---|---|
width | ширина всплывающего окна | 0 |
height | высота всплывающего окна | Адаптивная высота компонента |
duration | Когда появляется всплывающая анимация | 250 мс |
gravity | Где появляется всплывающее окно | по центру |
gravityAnimationEnable | Доступна ли анимация по умолчанию с позицией, в которой появляется всплывающее окно. | false |
margin | поля всплывающего окна | EdgeInsets.all(0.0) |
barrierColor | Цвет фона вне всплывающего окна | 30% черный |
backgroundColor | Цвет фона во всплывающем окне | белый |
borderRadius | Закругленные углы всплывающего окна | 0.0 |
constraints | Ограничения всплывающих окон | Минимальная ширина и высота должны быть не менее 10%. |
animatedFunc | Всплывающая анимация | выйти из середины |
barrierDismissible | Нужно ли щелкнуть всплывающее окно снаружи, чтобы оно исчезло | true |
поддерживаемые методы
method | description |
---|---|
show[x,y] | Показать всплывающее окно |
dismiss | скрыть всплывающее окно |
isShowing | Показывается ли всплывающее окно |
⚡ Семантический виджет
Содержимое компонентов внутри всплывающего окна инкапсулируется заранее с помощью семантической функции часто используемых компонентов, чтобы быстро создать всплывающее окно. Подробности см. в следующей таблице.
YYDialog YYAlertDialogWithDivider(BuildContext context) {
return YYDialog().build(context)
..width = 220
..borderRadius = 4.0
..text(
padding: EdgeInsets.all(25.0),
alignment: Alignment.center,
text: "确定要退出登录吗?",
color: Colors.black,
fontSize: 14.0,
fontWeight: FontWeight.w500,
)
..divider()
..doubleButton(
padding: EdgeInsets.only(top: 10.0),
gravity: Gravity.center,
withDivider: true,
text1: "取消",
color1: Colors.redAccent,
fontSize1: 14.0,
fontWeight1: FontWeight.bold,
onTap1: () {
print("取消");
},
text2: "确定",
color2: Colors.redAccent,
fontSize2: 14.0,
fontWeight2: FontWeight.bold,
onTap2: () {
print("确定");
},
)
..show();
}
Поддерживаемые семантические компоненты
method | description |
---|---|
text | текстовое управление |
doubleButton | две кнопки управления |
listViewOfListTile | Компонент плитки списка |
listViewOfRadioButton | компонент кнопки списка |
divider | составляющая линии разделения |
widget | Пользовательские семантические компоненты |
⚡ Пользовательский виджет
Настроить содержимое внутренних компонентов всплывающего окна
- Поскольку существующие семантические компоненты предназначены только для помощи в быстром построении пользовательского интерфейса, они далеки от удовлетворения потребностей в реальной разработке проекта.
- Поэтому предусмотрена вставка пользовательских семантических компонентов, а сам компонент добавляется во всплывающее окно разработчиком.
пройти через
widget()
Вставить компонент во всплывающее окно
YYDialog YYDialogDemo(BuildContext context) {
return YYDialog().build(context)
..width = 220
..height = 500
..widget(
Padding(
padding: EdgeInsets.all(0.0),
child: Align(
alignment: Alignment.centerLeft,
child: Text(
"",
style: TextStyle(
color: Colors.black,
fontSize: 14.0,
fontWeight: FontWeight.w100,
),
),
),
),
)
..show();
}
⚡ Звонок без контекста
- Сценарий приложения: после того, как сетевой запрос возвращается, нет контекста, на который можно сослаться в обратном вызове, в это время контекст необходимо инициализировать заранее, а всплывающее окно может быть вызвано без контекста в будущем. .
1. инициализация
Вызовите статический метод до появления окнаYYDialog.init(context);
class AppHome extends StatelessWidget {
Widget build(BuildContext context) {
//1、初始化context
YYDialog.init(context);
//2、后续使用可以不需要context
......
}
}
2. использовать
Использовать напрямуюYYDialog
, обратите внимание, что вы должны позвонитьbuild()
YYDialog YYAlertDialogBody() {
return YYDialog().build()
..width = 240
..text(
text: "Hello YYDialog",
color: Colors.grey[700],
)
..show();
}
Bugs/Requests
- If your application has problems, please submit your code and effect to Issue.
- Pull request are also welcome.
About
- Вопрос: 510402535
- Группа QQ: 798874340
- электронная почта: xyj510402535@qq.com
- г-почта: xyj51042535@gmail.com
- Блог:blog.csdn.net/qq_30379689
- Гитхаб:GitHub.com/Android куры…
License
Apache License 2.0