Flutter常用第三方

Flutter第三方插件汇总(很全)

一、常用的第三方插件

名称 描述
flip_card: ^0.6.0 翻转页面的动画效果
dio 网络请求
fluttertoast 提示 toast
sqflite 数据持久化
flutter_swiper 轮播图
flutter_screenutil 屏幕适配
cached_network_image 缓存网络图片
shared_preferences 本地存储
event_bus 事件通知
provider 状态管理
flutter_screenutil 屏幕适配
city_pickers 城市选择器
flutter_easyrefresh 刷新控件
transparent_image 图片动画
device_info 获取设备信息
fbutton 封装好的各种效果的Button
flutter_tags_x 标签效果
cart_strpper 购物车加减按钮
dotted_line 各种虚线效果
group_button 按钮组
lottie lottie动画
device_info 获取设备信息
photo_view 图片预览
chewie 网络监测
sy_flutter_alipay、sy_flutter_wechat 支付宝、微信支付
flutter_cupertino_date_picker 日期选择组件
url_launcher 实现打开外部浏览器、打开外部应用、发送短信、拨打电话等功能

二、路由

2.1 基本跳转
  • initialRoute:设置应用程序从哪一个路由开始启动,设置了该属性,就不需要再设置home属性了
  • routes:定义名称和路由之间的映射关系,类型为Map<String, WidgetBuilder>
2.2 跳转传值

arguments传递数据。

_onPushTap(BuildContext context) {
  Navigator.of(context).pushNamed(HYDetailPage.routeName, arguments: "a home message of naned route");
}

HYDetailPage接受数据:
在build方法中ModalRoute.of(context)可以获取到传递的参数。

 Widget build(BuildContext context) {
    // 1.获取数据
    final message = ModalRoute.of(context).settings.arguments;
  }
2.3 路由钩子

onGenerateRoute,使用场景,假如我们有一个HYAboutPage,也希望在跳转时,传入对应的参数message,并且已经有一个对应的构造方法。这个时候我们可以使用onGenerateRoute的钩子函数:

  • 当我们通过pushNamed进行跳转,但是对应的name没有在routes中有映射关系,那么就会执行onGenerateRoute钩子函数;
  • 我们可以在该函数中,手动创建对应的Route进行返回;
  • 该函数有一个参数RouteSettings,该类有两个常用的属性:
    name: 跳转的路径名称
    arguments:跳转时携带的参数
onGenerateRoute: (settings) {
  if (settings.name == "/about") {
    return MaterialPageRoute(
      builder: (ctx) {
        return HYAboutPage(settings.arguments);
      }
    );
  }
  returnnull;
}
2.4 onUnknownRoute

在路由不存在的时候,这个时候我们希望跳转到一个统一的错误页面。以防止flutter出现错误的情况。

  • 未知页面/abc
  ListTile(
     onTap: () {
         print("我的收藏");
         Navigator.pushNamed(context, '/GHOrderListPage231231');//弹出错误页面
          },
         leading: Icon(Icons.collections_bookmark, color: Colors.red),
         title: Text("我的收藏"),
         ),)
  • 创建错误提示页面
class UnknownPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("错误页面~"),
      ),
      body: Container(
        child: Center(
          child: Text("页面跳转错误~"),
        ),
      ),
    );
  }
}
  • 设置onUnknownRoute路由
onUnknownRoute: (settings) {
  return MaterialPageRoute(
    builder: (ctx) {
      return UnknownPage();
    }
  );
},

结果如下图所示:

错误路由界面

1、group_button效果
image.png

2、flutter_tags_x效果
image.png

3、fbutton
image.png

4、auth_buttons
image.png

5、video_player、AudioPlayers
6、shared_preferences本地储存

获取 shared_preferences 实例
final prefs = await SharedPreferences.getInstance();
/// 设置值
prefs.setInt('counter', counter);
/// 获取值 
final counter = prefs.getInt('counter') ?? 0;}
///移除
prefs.remove('counter');

https://blog.csdn.net/shulianghan/article/details/119930138
7、lottie 动画

  Widget _lottie(String name, {required AnimationController controller}) {
    return Lottie.asset(
      'assets/lottie/$name',
      controller: controller,
      height: 25.h,
      fit: BoxFit.contain,
    );
  }
 Widget _navItem({
    required String key,
    required String iconName,
    required String label,
  }) {
    final logic = Get.find<VNavigationBarController>();
    return Expanded(
      child: Container(
        color: Colors.transparent,
        child: InkWell(
          onTap: () => logic.onTap(key),
          child: Column(
            children: [
              _lottie(
                iconName,
                controller: logic.controllers[key]!,
              ),
              Obx(
                () => AnimatedDefaultTextStyle(
                  duration: const Duration(milliseconds: 1000),
                  style: TextStyle(
                      color: logic.currentKey == key
                          ? CustomTheme.colorSchema.fontColor
                          : CustomTheme.colorSchema.neutral),
                  child: Text(
                    label,
                  ),
                ),
              )
            ],
          ),
        ),
      ),
    );
  }

8、flip_card翻转效果

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'FlipCard',
      theme: ThemeData.dark(),
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  _renderBg() {
    return Container(
      decoration: BoxDecoration(color: const Color(0xFFFFFFFF)),
    );
  }

  _renderAppBar(context) {
    return MediaQuery.removePadding(
      context: context,
      removeBottom: true,
      child: AppBar(
        elevation: 0.0,
        backgroundColor: Color(0x00FFFFFF),
      ),
    );
  }

  _renderContent(context) {
    return Card(
      elevation: 0.0,
      margin: EdgeInsets.only(left: 32.0, right: 32.0, top: 20.0, bottom: 0.0),
      color: Color(0x00000000),
      child: FlipCard(
        direction: FlipDirection.HORIZONTAL,
        speed: 1000,
        onFlipDone: (status) {
          print(status);
        },
        front: Container(
          decoration: BoxDecoration(
            color: Color(0xFF006666),
            borderRadius: BorderRadius.all(Radius.circular(8.0)),
          ),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Front', style: Theme.of(context).textTheme.headline1),
              Text('Click here to flip back',
                  style: Theme.of(context).textTheme.bodyText1),
            ],
          ),
        ),
        back: Container(
          decoration: BoxDecoration(
            color: Color(0xFF006666),
            borderRadius: BorderRadius.all(Radius.circular(8.0)),
          ),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Back', style: Theme.of(context).textTheme.headline1),
              Text('Click here to flip front',
                  style: Theme.of(context).textTheme.bodyText1),
            ],
          ),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('FlipCard'),
      ),
      body: Stack(
        fit: StackFit.expand,
        children: <Widget>[
          _renderBg(),
          Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: <Widget>[
              // _renderAppBar(context),
              Expanded(
                flex: 4,
                child: _renderContent(context),
              ),
              Expanded(
                flex: 1,
                child: Container(),
              ),
            ],
          )
        ],
      ),
    );
  }
image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354