Flutter 常用插件汇总

DIO网络请求框架

提起 Flutter 的网络框架,就不得不提 DIO,而且令人自豪的是 DIO 是国人开发的哦!DIO 作为一个网络框架实现了全部的网络请求,包括 GET、POST、PUT、PATCH、DELETE等,同时还支持拦截器,错误捕获和文件下载。借助 DIO,可以快速完成 Flutter App 与后端的数据交互。示例代码如下:

Response response;
var dio = Dio();
response = await dio.get('/test?id=12&name=wendu');
print(response.data.toString());
// Optionally the request above could also be done as
response = await dio.get('/test', queryParameters: {'id': 12, 'name': 'wendu'});
print(response.data.toString());

DIO最新版本为4.0,在github 上有近万个 Star,流行指数达到了99%,项目地址为:pub.flutter-io.cn/packages/di…​

url_launcher系统应用跳转

在 App 中不可避免会使用url 跳转到系统浏览器或其他应用,这时候 url_launcher 就派上用场了, 用法十分简单:

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

const _url = 'https://flutter.cn';

void main() => runApp(
      const MaterialApp(
        home: Material(
          child: Center(
            child: RaisedButton(
              onPressed: _launchURL,
              child: Text('Show Flutter homepage'),
            ),
          ),
        ),
      ),
    );

void _launchURL() async =>
    await canLaunch(_url) ? await launch(_url) : throw 'Could not launch $_url';

url_launcher支持跳转到系统的浏览器打开网页,跳转拨打电话和发送短信界面,在 pub 上流行度为100%,项目地址为:pub.flutter-io.cn/packages/ur…​

flutter_easyrefresh上下拉刷新

flutter 中上下拉加载数据的不二之选,也是国人开发的,支持在大部分组件上套用实现上拉加载或下拉刷新。使用方法也是很简单,同时也支持自定义 header 和 footer。

import 'package:flutter_easyrefresh/easy_refresh.dart';
//...
  EasyRefresh(
    child: ScrollView(),
    onRefresh: () async{
      ....
    },
    onLoad: () async {
      ....
    },
  )

flutter_easyrefresh 在 pub 上的流行度为95%,项目地址为:pub.flutter-io.cn/packages/fl…

flutter_swiper 轮播组件

flutter_swiper 是一个轮播组件,号称是 flutter 最佳的轮播组件。flutter_swiper 支持自动轮播,显示页面指示,动画时长,点击回调等多种参数设置。

new Swiper(
  itemBuilder: (BuildContext context, int index) {
    return new Image.network(
      "http://via.placeholder.com/288x188",
      fit: BoxFit.fill,
    );
  },
  itemCount: 10,
  viewportFraction: 0.8,
  scale: 0.9,
)

flutter_swiper 的流行度达到了99%,项目地址为:pub.flutter-io.cn/packages/fl…

catcher 异常捕获

catcher 是一个 flutter 的全局异常捕获插件,可以自动捕捉到系统的异常,并且可以指定异常上报地址自动将运行错误上报给服务端,从而方便开发者跟踪程序的 Bug 进而进行修复。

import 'package:flutter/material.dart';
import 'package:catcher/catcher.dart';

main() {
  /// STEP 1. Create catcher configuration.
  /// Debug configuration with dialog report mode and console handler. It will show dialog and once user accepts it, error will be shown   /// in console.
  CatcherOptions debugOptions =
      CatcherOptions(DialogReportMode(), [ConsoleHandler()]);

  /// Release configuration. Same as above, but once user accepts dialog, user will be prompted to send email with crash to support.
  CatcherOptions releaseOptions = CatcherOptions(DialogReportMode(), [
    EmailManualHandler(["support@email.com"])
  ]);

  /// STEP 2. Pass your root widget (MyApp) along with Catcher configuration:
  Catcher(rootWidget: MyApp(), debugConfig: debugOptions, releaseConfig: releaseOptions);
}

catcher 的流行度达到了95%,项目地址为:pub.flutter-io.cn/packages/ca…​

cached_network_image 网络图片加载缓存

cached_network_image 有点类似iOS的 SDWebImage,可以缓存已经加载过的图片而无需重复下载,既提高了加载速度也节省了网络资源请求。同时 cached_network_image 支持占位图、加载进度和请求失败的占位组件,可以做到很好的用户体验。

CachedNetworkImage(
        imageUrl: "http://via.placeholder.com/350x150",
        placeholder: (context, url) => CircularProgressIndicator(),
        errorWidget: (context, url, error) => Icon(Icons.error),
     ),
//......

cached_network_image 流行度达到了99%,项目地址为:pub.flutter-io.cn/packages/ca…

shared_preferences 本地离线键值对缓存

shared_preferences类似iOS的 NSUserDefaults和安卓的 SharedPreferences,支持App简单的键值对离线缓存,对于离线存储简单的数据十分适用。但是需要注意的是插件的离线写入操作是异步的,因此并不能保证写入返回后100%存储成功,因此对于十分关键的数据不建议使用。

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      body: Center(
      child: RaisedButton(
        onPressed: _incrementCounter,
        child: Text('Increment Counter'),
        ),
      ),
    ),
  ));
}

_incrementCounter() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  int counter = (prefs.getInt('counter') ?? 0) + 1;
  print('Pressed $counter times.');
  await prefs.setInt('counter', counter);
}

shared_preferences的流行度为100%,项目地址为:pub.flutter-io.cn/packages/sh…

image_picker 和 multi_image_pikcer 图片选择器

image_picker 和 multi_image_picker 为图片选择器,前者支持单张图片选择,后者支持多图选择,二者均支持相机或从相册选择图片。需要注意的是 multi_image_picker 默认语言是英文的,需要自己配置本地语言。

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

//......

class _MyHomePageState extends State<MyHomePage> {
  File _image;
  final picker = ImagePicker();

  Future getImage() async {
    final pickedFile = await picker.getImage(source: ImageSource.camera);

    setState(() {
      if (pickedFile != null) {
        _image = File(pickedFile.path);
      } else {
        print('No image selected.');
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Picker Example'),
      ),
      body: Center(
        child: _image == null
            ? Text('No image selected.')
            : Image.file(_image),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: getImage,
        tooltip: 'Pick Image',
        child: Icon(Icons.add_a_photo),
      ),
    );
  }
}

image_picker 项目地址为:pub.flutter-io.cn/packages/im…,multi_image_picker 项目地址为:pub.flutter-io.cn/packages/mu…。​

marquee滚动文字组件

遇到文字太长不想换行也不想截断的时候就可以使用 marquee 了,marquee 在文字超出容器宽度后会自动滚动播报。同时,marquee 支持设置文字的多种参数,如字体,滚动方向,留白,滚动速度等等。

Marquee(
  text: 'Some sample text that takes some space.',
  style: TextStyle(fontWeight: FontWeight.bold),
  scrollAxis: Axis.horizontal,
  crossAxisAlignment: CrossAxisAlignment.start,
  blankSpace: 20.0,
  velocity: 100.0,
  pauseAfterRound: Duration(seconds: 1),
  startPadding: 10.0,
  accelerationDuration: Duration(seconds: 1),
  accelerationCurve: Curves.linear,
  decelerationDuration: Duration(milliseconds: 500),
  decelerationCurve: Curves.easeOut,
)

marquee 的流行度达到了96%,项目地址为:pub.flutter-io.cn/packages/ma…。​

sqflite 本地数据库访问

sqflite 从名字就知道它是用于手机端 sqlite 数据库访问的工具,支持 sqlite 数据库的全部增改删查操作,同时还支持事务和批量操作。SQL 的操作支持直接执行SQL 语句,也支持模板语法。

// Get a location using getDatabasesPath
var databasesPath = await getDatabasesPath();
String path = join(databasesPath, 'demo.db');

// Delete the database
await deleteDatabase(path);

// open the database
Database database = await openDatabase(path, version: 1,
    onCreate: (Database db, int version) async {
  // When creating the db, create the table
  await db.execute(
      'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
});

// Insert some records in a transaction
await database.transaction((txn) async {
  int id1 = await txn.rawInsert(
      'INSERT INTO Test(name, value, num) VALUES("some name", 1234, 456.789)');
  print('inserted1: $id1');
  int id2 = await txn.rawInsert(
      'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
      ['another name', 12345678, 3.1416]);
  print('inserted2: $id2');
});

// Update some record
int count = await database.rawUpdate(
    'UPDATE Test SET name = ?, value = ? WHERE name = ?',
    ['updated name', '9876', 'some name']);
print('updated: $count');

// Get the records
List<Map> list = await database.rawQuery('SELECT * FROM Test');
List<Map> expectedList = [
  {'name': 'updated name', 'id': 1, 'value': 9876, 'num': 456.789},
  {'name': 'another name', 'id': 2, 'value': 12345678, 'num': 3.1416}
];
print(list);
print(expectedList);
assert(const DeepCollectionEquality().equals(list, expectedList));

// Count the records
count = Sqflite
    .firstIntValue(await database.rawQuery('SELECT COUNT(*) FROM Test'));
assert(count == 2);

// Delete a record
count = await database
    .rawDelete('DELETE FROM Test WHERE name = ?', ['another name']);
assert(count == 1);

// Close the database
await database.close();

sqflite 流行度达到了100%,如果为了应用中更好地维护最好是再封装一层,项目地址为:pub.flutter-io.cn/packages/sq…

以上就是Flutter 常用插件汇总的详细内容,更多关于Flutter 常用插件的资料请关注我们其它相关文章!

(0)

相关推荐

  • Flutter 创建私有公共插件的步骤

    创建package 通过以下命令行创建一个package flutter create --template=package plugins 创建演示代码(可选) 在test文件中,对存dart库进行单元测试,但是在涉及页面等功能,需要有一个demo,需要在工程内部创建一个demo. 如果要发布到公有pub上,需要写上示例代码,方便别人知道如何使用. cd plugins flutter create example 得到的目录结构如下所示: |____CHANGELOG.md |____LIC

  • Flutter 插件url_launcher简介

    url_launcher是用于在移动平台中启动URL的Flutter插件,适用于IOS和Android平台.他可以打开网页,发送邮件,还可以拨打电话. github地址:https://github.com/flutter/plugins/tree/master/packages/url_launcher 最近项目需求就是打开一个连接跳转到安卓或苹果默认的浏览器.虽然开始一个简单的要求,其中的一个细节就是执行打开网页这一操作后,不能看上去像在应用内部打开,看上去要在应用外部打开.pub.dev提

  • Flutter permission_handler 权限插件的使用详解

    编译环境:Flutter 版本v1.12.hotfix9 dart SDK:2.7.2 1 pubspec.yaml中引入: #  权限   permission_handler: ^3.2.0 ios中info.plist配置(根据权限情况使用): <!-- Permission options for the `location` group --> <key>NSLocationWhenInUseUsageDescription</key> <string&

  • Flutter 常用插件汇总

    DIO网络请求框架 提起 Flutter 的网络框架,就不得不提 DIO,而且令人自豪的是 DIO 是国人开发的哦!DIO 作为一个网络框架实现了全部的网络请求,包括 GET.POST.PUT.PATCH.DELETE等,同时还支持拦截器,错误捕获和文件下载.借助 DIO,可以快速完成 Flutter App 与后端的数据交互.示例代码如下: Response response; var dio = Dio(); response = await dio.get('/test?id=12&nam

  • Python pip 常用命令汇总

    使用了这么就pip命令,但是一直是简单使用,很多命令都是用了查,查了用,今天把常用的命令汇总一下,方便使用. 命令: pip 由上图可以看到 pip 支持一下命令 Commands: install Install packages. download Download packages. uninstall Uninstall packages. freeze Output installed packages in requirements format. list List install

  • c# 常用框架汇总

    Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象.让你轻松实现.Net中所有类型(对象,基本数据类型 等)和Json的转换. Math.NET http://www.mathdotnet.com/ Math.NET的目标是为提供一款自身包含清晰框

  • 基于flutter sound插件实现录音与播放功能

    目录 插件介绍: 插件信息: 插件使用前的准备工作 设置麦克风权限描述 权限管理插件 permission_handler 音频硬件配置插件 audio_session 动画插件 常用的方法 录音常见的方法 初始化录音对象 开启录音 麦克风权限 开始录音 结束录音 播放常见的方法 初始化播放器 初始化操作 开始播放 结束播放 动画实现 加载GIF动画 加载动画文件 上传文件 上传音频文件 总结 插件介绍: flutter_sound这个插件可以实现iOS和Android平台的录音和播放功能.即可

  • 前端常用正则表达式汇总

    前言 正则这东西吧,感觉是开发的都会接触到一些.. 那些所谓的基础语法就不说了哈,一搜一大把,来点实际的. 我这里就分享下我工作中汇总和遇到的,希望对一些小伙伴有些许帮助哈!! 正则汇总 匹配URL const regexURL = /((https?|ftp)?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/gi; // 这条正则可以匹配这么一坨格式的url //ww

  • 正则表达式常用用法汇总

    在没看正文之前,先给大家介绍下正则表达式基本概念: 正则表达式,又称正规表示法.常规表示法.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式,有木有人像我一样,学了好几遍却还是很懵圈,学的时候老明白了,学完了忘光了.好吧,其实还是练的不够,所谓温故而知新,可以为师矣,今天就随我来复习

  • ASP.NET程序中常用代码汇总

    1. 打开新的窗口并传送参数: //传送参数: response.write("<script>window.open('*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="++"')</script>") //接收参数: string a = Request.QueryString("id"); string b = Request.QueryS

  • javascript常用正则表达式汇总

    javascript常用正则表达式汇总 /** * 检验各种规则 * @param str 检验的内容 * @param cType 预设的检验规则 字符串[ * empty, 检验是否为空 * telphone, 座机手机号码 * allphone, 所有手机号码 * ydphone, 移动手机号码 * ltphone, 联通手机号码 * dxphone, 电信手机号码 * email, 邮箱 * url, 网址 * cn, 汉字 * image, 图片格式 * emscode, 邮政编码 *

  • PHP常用技巧汇总

    本文为大家分享了多个php常用技巧,供大家参考,具体内容如下 1.PHP文件读取函式 //文件读取函式 function PHP_Read($file_name) { $fd=fopen($file_name,r); while($bufline=fgets($fd, 4096)){ $buf.=$bufline; } fclose($fd); return $buf; } ?> 2.文件写入函式 //文件写入函式 function PHP_Write($file_name,$data,$met

  • Maven 常用插件的详细整理

    Maven 常用插件的详细整理 1.源码分析 <artifactId>maven-pmd-plugin</artifactId> 2.代码格式检查 <artifactId>maven-checkstyle-plugin</artifactId> 3.代码相似度检查 <groupId>org.codehaus.mojo</groupId> <artifactId>simian-maven-plugin</artifac

随机推荐