Flutter 中的操作提示主要有这么几种 SnackBar、BottomSheet、Dialog,因为 Dialog 样式比较多,放最后讲好了 SnackBar SnackBar 的源码相对简单 const..., // 进出动画 }) 例如我们需要实现一个功能,修改某个值,修改后给用户一个提示,同时给用户一个撤销该操作的按钮,那么就可以通过 SnackBar 来简单实现。...AlertDialog 在 ListView 中增加一个 AlertDialog 的按钮,用于点击显示 AlertDialog 用,然后加入显示 AlertDilaog 的方法,并将按钮的 onPressed...,再次运行,就会发现之前的英文变成中文了,当然你也可以设置成别的语言。...Dialog 状态保持 假如有个需求,需要在弹出的 Dialog 显示当前被改变的值,然后通过按钮可以修改这个值 ,该如何实现。
Snackbar 呢,是 Android 官方的一个控件,它可以说跟 Toast 类似,在应用交互中给用户以友好提示的控件。 它通常出现屏幕底部,给予用户简短的提示消息。...一、Snackbar 基本使用 先在app build.gradle 中添加依赖: implementation "com.google.android.material:$latest_version...).show() 这里随机在一个按钮点击时间里面调用,点击了按钮会在屏幕底部弹出: snackbar 它也可以设置显示时间,点到源码可以看到,duration 有三种: duration 还有个可选是不定...,回调 Snackbar 弹出和关闭动作。...的 duration 设置成 LENGTH_SHORT,它的显示时间大概是 3 秒。
Snackbar包含与所执行的操作直接相关的单行文本。 它们可能包含操作文本,但不包含icon。 Toast(仅限Android)主要用于系统消息传递。 它们也显示在屏幕的底部,但不能从屏幕中滑走。...用法 一次只能显示一个snackbar。 每个snackbar可能包含一个单独的操作,但不会是“关闭”或“取消”。 行为 Snackbars激活后从屏幕的底部向上滑出。...如果Snackbar中描述的操作重要到需要阻止用户使用屏幕,则应该使用Dialog。 ?...不要挡住浮动操作按钮(Floating Action Button) 纵向移动浮动动作按钮以适应Snackbar的高度。 ? 连续Snackbars 一个时间只有一个Snackbar能展示。...当显示第一个Snackbar时第二个就该做准备,在第二个Snackbar开始出现前第一个Snackbar应该开始向下收缩。 (今天的好短~开心~)
这些限制不可避免的影响到了正常的业务逻辑,在迭代过程中,我们遇到过以下几个问题: 设置中关闭某个App的【显示通知】开关,Toast不再弹出,极大的影响了用户体验。...具体原因是用户在设置里关闭了美团App的【显示通知】开关,导致通知权限无法获取,这极大的影响了用户体验。...然而,在Android 4.4(API19)以下系统中,这个开关的打开状态,也就是通知权限是否开启的状态我们是无法判断的,因此我们也无法感知Toast弹出与否,为了解决这个问题,需要从Toast的源码入手...调用service.enqueueToast(pkg, tn, mDuration)将当前Toast的显示加入到通知队列,并传递了一个tn对象,这个对象就是NMS用作回传Toast的显示状态。...,而且绝大部分手机默认是关闭状态,需要我们引导用户开启,如果用户选择不开启,那么Toast还是不能弹出。
] 注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 基础用法 应用程序有时候需要弹出消息提示用户,比如‘网络连接失败...showSnackBar方法,消息会在底部弹出并显示一段时间,默认显示4秒,然后弹出,我们可以设置其显示的时间: Scaffold.of(context).showSnackBar(SnackBar(...duration: Duration(seconds: 1), )); 显示的时间为1秒,content属性不一定是文字,也可以是其他组件,比如显示一个图标和文字: Scaffold.of...方法时,SnackBar消息将会以队列的形式一个一个的弹出,比如下面的代码: RaisedButton( child: Text( '点我,弹出SnackBar...4秒,如果有10个,那么40秒内会一直弹消息,体验明显不友好,我们希望的效果是如果有新的消息时,旧的都消息立刻消失,显示新的消息,只需在弹出新的SnackBar时移除现在的SnackBar, Scaffold.of
Snackbar 是 Android design support library 中的另一个组件。...显示。...会找到一个父 view,以寄存所赋的 snackbar 值。...同时按照文档中描述: 在项目的 view 中添加 CoordinatorLayout,可以支持 snackbar 的更多特性,比如滑动消失,和 FAB 的自动移动。...snackbar,向用户传递更多暗示信息,比如snackbar背景显示成红色表明这是一个警告提示。
); 2.显示一个SnackBar 使用Scaffold,我们可以展示SnackBar! 首先,我们需要创建一个SnackBar,然后使用Scaffold显示它。...(snackBar); 3.提供额外的操作 在某些情况下,我们可能希望在显示SnackBar时向用户提供额外的操作。...}, ), ); 完整的例子 注意:在本例中,我们将在用户点击按钮时显示SnackBar。 有关处理用户输入的更多信息,请参阅食谱的处理手势部分。...路线 创建一个Scaffold 添加一个Drawer 用条目填充Drawer 以编程方式关闭Drawer 1.创建一个Scaffold 为了将Drawer添加到我们的应用程序中,我们需要将其包装在Scaffold...Drawer 用户点击物品后,我们经常想要关闭抽屉。
简述: Snackbar 是 Android design support library 中的一个组件,它的作用和Toast类似,显示吐司,但Snackbar的特别之处在于Snackbar...他们在屏幕的底部显示一条简短的信息,如果是较大的设备就显示在左下角。SnackBar出现在屏幕中所有其他元素的上方,同一时间仅仅只有一条SnackBar”。...与Toast不同的是Snackbar显示时长有三种: ①Snackbar.LENGTH_SHORT:与Toast.LENGHT_SHORT(大约1.x秒)一样显示较短时长后自动消失...②Snackbar.LENGTH_LONG:与Toast.LENGHT_LONG(大约3秒)一样显示相对较长时间后自动消失。 ...该事件下Snackbar提出的原因:由于新的Snackbar的显示而退出。
第二个参数就是Snackbar中显示的内容, 第三个参数是Snackbar显示的时长。 这些和Toast都是类似的。...最后调用show()方法让Snackbar显示出来。...可以看到,Snackbar从屏幕底部出现了,上面有我们所设置的提示文字,还有一个Undo按钮,按钮是可以点击的。 ? 过一段时间后Snackbar会自动从屏幕底部消失。...其实道理很简单,还记得我们在Snackbar的make()方法中传入的第一个参数吗?...,那么Snackbar就会再次遮挡住悬浮按钮,因为DrawerLayout不是CoordinatorLayout的子控件,CoordinatorLayout也就无法监听到Snackbar的弹出和隐藏事件了
但是你真的知道什么时候应该使用Dialog,什么时候应该使用Toast,什么时候应该使用Snackbar吗?本篇文章中我们就来学习一下这三者使用的时机,另外还会介绍一些额外的技巧。 1....Toast只会弹出一段信息,告诉用户某某事情已经发生了,过一段时间后就会自动消失。它完全不会阻挡用户的任何操作,甚至用户也可以完全不用理会Toast。...这样的体验其实是不好的,因为也许用户是手抖了一下多点了几次,导致Toast就长时间关闭不掉了。又或者我们其实已在进行其他操作了,应该弹出新的Toast提示,而上一个Toast却还没显示结束。...Snackbar使用一个动画效果从屏幕的底部弹出来,过一段时间后也会自动消失。...第二个参数就是Snackbar中显示的内容,第三个参数是Snackbar显示的时长。这些和Toast都是类似的。
其中app:layout_anchor表示当前以哪个视图做为参照物,app:layout_anchorGravity表示本视图相对于参照物的对齐方式。...FloatingActionButton后面; 2、在隐藏、显示按钮上时会播放动画;其中隐藏操作是调用hide方法,显示操作是调用show方法; 3、FloatingActionButton默认会随着Snackbar...的出现或消失而动态调整位置,有关Snackbar的说明参见《Android开发笔记(一百二十七)活用提示窗Toast和Snackbar》; 下面是悬浮按钮自隐藏和显示时的动画效果截图: ?...因此,Android又提供了BottomSheetBehavior用来自定义底部弹窗,不过它并非一种新控件,而是给现有视图加上几个新属性,即可实现弹窗与关闭的效果。...getState : 获取该行为的状态。 setState : 设置该行为的状态。
假设我们想要制作一个自定义按钮,当点击时显示snackbar。 我们如何解决这个问题?...路线 创建一个我们想要点击的部件 将其包装在InkWell部件中以管理点击回调和涟漪动画 // The InkWell Wraps our custom flat button Widget new InkWell...final items = new List.generate(20, (i) => "Item ${i + 1}"); 将数据源转换为List 首先,我们将简单地在屏幕上的列表中显示每个条目...现在我们正在显示项目列表,我们希望让用户能够将每个项目从列表中移除!...用户将该项目删除后,我们需要运行一些代码以从列表中删除该项目并显示Snackbar。 在真实的应用程序中,您可能需要执行更复杂的逻辑,例如从Web服务或数据库中删除项目。
导航到新的屏幕并返回 大多数应用程序包含几个用于显示不同类型信息的屏幕 例如,我们可能有一个显示产品的屏幕。 然后,我们的用户可以在新屏幕上点击产品以获取更多信息。...在我们的onTap回调中,我们将再次使用Navigator.push方法。...路线 定义主屏幕 添加一个启动选择屏幕的按钮 在选择屏幕上创建两个按钮 轻触一个按钮时,关闭选择屏幕 在主屏幕上使用snackbar显示选择 1.定义主屏幕 主屏幕将显示一个按钮。...点击后,它将启动选择屏幕!..., ); 5.在主屏幕上使用snackbar显示选择 既然我们正在启动一个选择屏幕并等待结果,那么我们会想要对返回的信息进行一些操作! 在这种情况下,我们将显示一个显示结果的Snackbar。
在前面的文章中我们学习了Flutter中输入以及选择控件的用法,借助于这些组件大家可以完成很多常用的功能,但是他不能及时在用户操作后完成相应的界面提示,所以今天我们就会来看下Flutter中的操作提示。...Snackbar ---- 底部快捷提示和Android中的可以说是相似度很高的,用法也很简单。...就是可以在SnackBar的右侧显示的Widget(按钮、文字等),点击这个Widget可以触发相应的操作,如常见的 撤回 操作。...虽然构造方法很简单,但是我们并不能直接显示SnackBar,我们可以借助于 Scaffold.of(context).showSnackBar()来显示一个SnackBar,值得注意的是这个context...在Flutter中你可以使用ShowDialog方法来显示这些Dialog。
design包,然后在代码中调用 public void click(View view) { Snackbar.make(view, "这是一个提示", Snackbar.LENGTH_SHORT...Snackbar.gif 我们需要给与用户点击反馈后才能消除提示的情况下,可以这样使用 public void click(View view) { Snackbar.make(...,点击完成后Snackbar会自动消失 ?...Snackbar.gif 我们还可以利用setCallback方法监听SnackBar的显示和消失,利用setActionTextColor方法设置点击按钮的字体颜色 public void click...id为content的FrameLayout,mView就是之前解析xml的Snackbar,最终通过addView方法将Snackbar显示出来。
(onBindViewHolder() 方法中的位置参数 position 不是实时更新的,例如在我们删除元素后,item 的 position 并没有改变。)...mSlider(一个自定义Drawerable对象)的Progress,从而不断刷新状态。...{ Log.e(TAG, "打开XXX模式"); } }); //监听打开与关闭 snackbar.setCallback(new Snackbar.Callback() {...(TAG, "显示"); } @Override public void onDismissed(Snackbar snackbar, int event) {...super.onDismissed(snackbar, event); Log.e(TAG, "关闭"); } }); snackbar.show(); Snackbar的Duration
fragment hide : 隐藏 fragment showHide : 先显示后隐藏 fragment replace...: 打开或关闭 wifi isWifiConnected : 判断 wifi 是否连接状态 isWifiAvailable[Async]...launchAppDetailsSettings: 打开应用具体设置 permission : 设置请求权限 rationale : 设置拒绝权限后再次请求的回调接口...show : 显示 snackbar showSuccess : 显示预设成功的 snackbar showWarning : 显示预设警告的 snackbar showError...: 显示预设错误的 snackbar dismiss : 消失 snackbar getView : 获取 snackbar 视图 addView
例如,对没有授权的权限进行再次申请授权等等。...use permissions后,还要在程序运行的时候进行申请。...* *****3.如果用户Deny了权限,那么下次再次进入Activity,会再次申请权限,这次的权限对话框上,会有一个选项“never ask again”: * ********1).如果用户勾选了...*/ public class PermissionsUtil { // 状态码、标志位 private static final int REQUEST_STATUS_CODE = 0x001...isAppFirstRun(activity)) { Snackbar snackbar = Snackbar.make(activity.findViewById
什么是Activity Activity是Android SDK中Activity类的一个具体实例,负责管理用户与信息屏的交互。...return true; } return super.onOptionsItemSelected(item); } } 点击运行 显示界面如图...,分别点击界面的Back按钮和Home键,再次查看控制台输出 Back键: image.png Home键: image.png 这两者的区别显而易见了,点击Back按钮后,此Activity会经历 pause...但是点击Home键,Activity并不会被立即销毁 后记 大家还可以尝试旋转屏幕、锁屏等后的Activity的状态,本文就不一一列举了 我的学习代码托管在Github上,链接为: 点我 参考资料 Activity...详解 (生命周期、以各种方式启动Activity、状态保存,完全退出等) 两分钟彻底让你明白Android Activity生命周期(图文)!
builder.setTicker("中奖通知"); //用户点击后自动消失 builder.setAutoCancel(true);...//在通知栏显示的标题 builder.setContentTitle("恭喜你中奖了"); //在通知栏显示的内容 builder.setContentText...getApplicationContext(),1,intent,PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); //当用户点击状态栏后...//第一个参数是随便找当前布局的id就行了 Snackbar snackbar = Snackbar.make(findViewById(R.id.activity_main), "这个操作不重要...", Snackbar.LENGTH_LONG); //设置按钮 snackbar.setAction("好的", new View.OnClickListener()
领取专属 10元无门槛券
手把手带您无忧上云