搜索插件、代码仓与 APP 分类

flutter_custom_dialog 封面
插件详情v1.3.0

flutter_custom_dialog

语义对话 | Made In YY.inc | 欢迎贡献

近 30 天下载
281
喜欢数
213
Pub 分数
60

安装插件

flutter pub add flutter_custom_dialog

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个由 YY.inc 开发的 Flutter 语义对话包,旨在提供可访问且可自定义的对话组件。它强调正确的语义以改善屏幕阅读器支持和用户体验。该包是开源的,并欢迎社区贡献。基于 Flutter 的 widget 系统构建,使开发者能够以最少的样板代码创建一致且可重用的对话。非常适合需要包容性 UI 设计和结构化对话交互的应用程序。

适合场景

  • 注重可访问性的应用程序
  • 可重用的对话框组件
  • 屏幕阅读器兼容界面
  • 自定义模态对话框
  • 开源协作开发

主要特点

  • 语义可访问性
  • 可自定义的对话框内容
  • 开源贡献模式
  • 最小化样板代码
  • 跨平台兼容性

适合对象

  • 注重可访问性的开发人员
  • 构建可重用 UI 组件的团队
  • 开源贡献者
  • 具有复杂对话需求的Flutter项目

使用建议

  • 需要理解 Flutter 语义
  • 有限的平台特定自定义
  • 无内置动画
  • 社区驱动的更新
  • 依赖外部维护

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

✨ flutter_custom_dialog

pub package

[Language ~~] English | 中文文档

Global dialog function encapsulation, with a semantic way to fill the content inside the dialog, the current function provided

  1. Support for a few semantic component methods to populate the component content inside dialog
  2. Support for customizing semantic components for developers to freely populate component content inside dialog
  3. Support setting dialog background color, foreground color, position, animation, click the external disappear and other functions, see the details below
  4. Support no Context call dialog, see below

🎖 Installing

1、install

dependencies:
  flutter_custom_dialog: ^1.3.0

2、import

import 'package:flutter_custom_dialog/flutter_custom_dialog.dart';

🎖 Example

dialog_demo


divider
✅

body
✅

head&body
✅

listTile
✅

ListRadio
✅

progress
✅

progress&body
✅

bottom sheet
✅

notice
✅

pop menu
✅ Support for custom locations

dialog_gravity


bottom
✅

top
✅

left
✅

right
✅

center
✅

left bottom
✅

left top
✅

right bottom
✅

right top
✅

dialog_animation


scaleIn
✅

fadeIn
✅

rotateIn
✅

customIn
✅ Support for custom animations

⚡ Dialog Property

dialog property Settings can be called through the method of member variables, as detailed in the following table

YYDialog YYNoticeDialog() {
  return YYDialog().build()
    ..width = 120
    ..height = 110
    ..backgroundColor = Colors.black.withOpacity(0.8)
    ..borderRadius = 10.0
    ..showCallBack = () {
      print("showCallBack invoke");
    }
    ..dismissCallBack = () {
      print("dismissCallBack invoke");
    }
    ..widget(Padding(
      padding: EdgeInsets.only(top: 21),
      child: Image.asset(
        'images/success.png',
        width: 38,
        height: 38,
      ),
    ))
    ..widget(Padding(
      padding: EdgeInsets.only(top: 10),
      child: Text(
        "Success",
        style: TextStyle(
          fontSize: 15,
          color: Colors.white,
        ),
      ),
    ))
    ..animatedFunc = (child, animation) {
      return ScaleTransition(
        child: child,
        scale: Tween(begin: 0.0, end: 1.0).animate(animation),
      );
    }
    ..show();
}

Supported attributes

property description default
width Dialog width 0
height Dialog height Adaptive component height
duration Dialog animation time 250 ms
gravity Where the dialog appears center
gravityAnimationEnable The dialog appears with the default animation available false
margin The margin of a dialog EdgeInsets.all(0.0)
barrierColor Dialog barrierColor 30% of black
decoration Dialog decoration null
backgroundColor Dialog backgroundColor white
borderRadius Dialog borderRadius 0.0
constraints Dialog constraints no constraints
animatedFunc Animation of dialog Emerge from the middle
showCallBack dialog show callbacks not
dismissCallBack dialog dismiss callbacks not
barrierDismissible Whether to click to pop up the external disappear true
useRootNavigator Whether to use root navigation true
  • After setting gravity, set gravityAnimationEnable = true if animation is needed
  • If the decoration property is set, the backgroundColor and borderRadius are not in effect; they are mutually exclusive

Supported method

method description
show[x,y] show dialog
dismiss dismiss dialog
isShowing Is the dialog showing

⚡ Semantic Widget

The contents of the components inside the dialog are encapsulated by semantic functions in advance to quickly build the dialog, as shown in the following table

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();
}

Semantic components supported

method description
text text widget
doubleButton two-button widget
listViewOfListTile listTile widget
listViewOfRadioButton listRadio widget
divider divider widget
widget custom semantic widget

⚡ Custom Widget

Customize dialog interior component content

  • Since the existing semantic components only assist in the rapid UI construction, they are far from meeting the requirements in actual project development
  • So it provides the ability to insert custom semantic components into dialog

Insert the component into the dialog through '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();
}

⚡ Without the Context to invoke

  • Application scenario: after the network request comes back, there is no Context to refer to in the callback, at this time, the Context needs to be initialized in advance, and then the dialog can be called without the Context

1、init

Call static methods before show dialog YYDialog.init(context);

class AppHome extends StatelessWidget {
  Widget build(BuildContext context) {
    //1、init context
    YYDialog.init(context);
    //2、Subsequent use may not be required context
    ......
  }
}

2、use

direct use YYDialog,Note that it must be called build()

YYDialog YYAlertDialogBody() {
  return YYDialog().build()
    ..width = 240
    ..text(
      text: "Hello YYDialog",
      color: Colors.grey[700],
    )
    ..show();
}

🔥🔥 Attention

1、dismiss

  • Do not use 'Navigator.pop(context)' to make the popover disappear, or you will close your page
  • This problem has been solved internally in YYDialog, and you can simply call 'dismiss()' supplied internally
var yyDialog = YYDialog();
yyDialog?.dismiss();

Bugs/Requests

  • If your application has problems, please submit your code and effect to Issue.
  • Pull request are also welcome.

About

  • QQ:510402535
  • QQ群:798874340
  • e-mail:xyj510402535@qq.com
  • g-mail:xyj51042535@gmail.com
  • Blog:http://blog.csdn.net/qq_30379689
  • Github:https://github.com/AndroidHensen

License

Apache License 2.0

所属分类

源码仓库

使用此插件的项目