当前位置: 首页>后端>正文

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

结果如下图所示:

Flutter常用第三方,第1张
错误路由界面

1、group_button效果
Flutter常用第三方,第2张

2、flutter_tags_x效果
Flutter常用第三方,第3张

3、fbutton
Flutter常用第三方,第4张

4、auth_buttons
Flutter常用第三方,第5张

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(),
              ),
            ],
          )
        ],
      ),
    );
  }
Flutter常用第三方,第6张

Flutter常用第三方,第7张

https://www.xamrdz.com/backend/3v71997556.html

相关文章: