8

Flutter Toast、弹出提示、轻提示

 3 years ago
source link: https://www.bugcatt.com/archives/1179
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

阿航

2020年5月21日

86

Flutter Toast、弹出提示、轻提示

主流的三种APP反馈形式: toastsnackbar以及dialog. toast又称为弹出提示、轻提示.通常用于提示用户一些不那么重要的信息, 会弹出并显示文字一段时间. 时间一到就会消失. 相较于snackbardialog, 对屏幕的入侵较少. 身为开发人员怎能不掌握toast的基本使用? 这篇文章阿航就带着大家一起探讨一下Flutter中的toast.

有图有真相, 我们来看下我们本次要实现的最终效果:

Flutter-Toast、弹出提示、轻提示-06

👉Github码云上查看本篇文章全部代码.

搜索fluttertoast

有同学会问, 为什么要选择插件, 不选择原生呢… 因为Flutter没有我们所需的这种效果! 只有自带的snackBar!

老样子, 上pub.dev寻找我们所需的插件, 在搜索框输入fluttertoast:

看到第一条:

99分, 相当高的评分.

点进去, 查看最新版本发布日期和兼容性:

一般我们在选择一款Flutter插件时, 会先看它的评分(Flutter官方评分还是比较严格的). 之后再去看看它的最新日期(如果很久未更新, 可能项目已经停止维护了). 最后再来看看它的兼容性, 是否合乎我们的规则.

同时支持AndroidIOS以及Web. 兼容性很好.

创建一个Flutter项目, 先来清理项目.

删除./test目录, 因为我们的这个项目只是一个简单的demo. 不需要测试驱动开发.

通过flutter创建的项目的./lib/main.dart会有很多自带的注释, 我们替换整个文件为:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '阿航的技术小站 Flutter toast',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter toast实战'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [],
        ),
      ),
    );
  }
}

💡 代码解析: 删除了多余的注释, 和部分初始化的按钮. 添加一些名称.

运行项目, 应该相当简洁:
Flutter-Toast%E3%80%81%E5%BC%B9%E5%87%BA%E6%8F%90%E7%A4%BA%E3%80%81%E8%BD%BB%E6%8F%90%E7%A4%BA-04.png

./pubspec.yaml中添加依赖:

fluttertoast: ^4.0.1
一定要注意字符缩进. 缩进不正确会导致导入失败!

运行IDE的Packages get或者在终端中输入:

flutter pub get

回到./lib/main.dart, 在Column内添加一个按钮:

RaisedButton(
  child: Text("弹出toast"),
  onPressed: (){},
)

该按钮等下用来触发弹出toast

使用fluttertoast

导入fluttertoast:

import 'package:fluttertoast/fluttertoast.dart';

上面创建的按钮中的onPressed中添加函数, 替换上面的RaisedButton为:

RaisedButton(
  child: Text("弹出toast"),
  onPressed: () {
    Fluttertoast.showToast(
                  msg: "你今天真好看",
                  toastLength: Toast.LENGTH_SHORT,
                  gravity: ToastGravity.BOTTOM,
                  timeInSecForIosWeb: 1,
                  backgroundColor: Colors.black45,
                  textColor: Colors.white,
                  fontSize: 16.0,
                  webShowClose: true,
                  webBgColor: "#00b09b",
                  webPosition: "center",
                );
  },
)

下面会详细解释各个参数的作用, 先运行, 一睹为快!

具体位置如图:

运行项目(因为有新导入的库, 所以建议先停止, 再重新运行), 点击”弹出toast”按钮试试:
Flutter-Toast%E3%80%81%E5%BC%B9%E5%87%BA%E6%8F%90%E7%A4%BA%E3%80%81%E8%BD%BB%E6%8F%90%E7%A4%BA-06.gif

成功运行.

下面来介绍一下Fluttertoast.showToast的详细参数:

参数参数类型参数说明是否必传默认值msgString设置toast展示的字符串√–gravityToastGravity枚举设置toast的展示位置.(Web端仅支持顶部和底部)×ToastGravity.BOTTOMtimeInSecForIosWebintios秒数×1bgcolorColortoast背景色×Colors.blacktextcolorColortoast文字颜色×Colors.whitefontSizefloattoast文字字体大小×16.0webShowCloseboolweb端 是否显示关闭按钮(“×”号)×falsewebBgColorStringweb端 16进制颜色, 比如#00b09b×渐变色(#00b09b与#96c93d)webPositionStringweb端 toast水平位置(left, centerright)×right

你可以自己随意传入参数和值来看看效果!

经过阿航的测试, fluttertoast本版本的web端不是非常好看. 所以不放出web端的截图啦!

主动隐藏toast

toast不仅可以自动消失, 也可以根据我们的需要让其立即消失.

在刚才的按钮下方再添加一个按钮:

RaisedButton(
  child: Text("隐藏toast"),
  onPressed: () => Fluttertoast.cancel(),
)
运行项目, 先点击”弹出toast”按钮, 紧接着点击”隐藏toast`按钮, 你会发现提示立刻消失:
Flutter-Toast%E3%80%81%E5%BC%B9%E5%87%BA%E6%8F%90%E7%A4%BA%E3%80%81%E8%BD%BB%E6%8F%90%E7%A4%BA-09.gif

至此, 我们的教程已经基本完成. 如果你对本篇文章有任何问题, 欢迎在下方评论区进行讨论.

👉Github码云上查看本篇文章全部代码.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK