最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter 常用插件匯總

 更新時間:2021年05月14日 10:38:30   作者:島上碼農  
Flutter 有了谷歌強大后盾加持,加上跨平臺的特性,生態(tài)日益豐富,目前大部分應用能夠用到的插件在 pub.flutter-io.cn上都可以找得到。本篇介紹 Flutter 最為常見的插件,以避免重復造輪子和新手少走彎路。

DIO網絡請求框架

提起 Flutter 的網絡框架,就不得不提 DIO,而且令人自豪的是 DIO 是國人開發(fā)的哦!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系統(tǒng)應用跳轉

在 App 中不可避免會使用url 跳轉到系統(tǒng)瀏覽器或其他應用,這時候 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支持跳轉到系統(tǒng)的瀏覽器打開網頁,跳轉撥打電話和發(fā)送短信界面,在 pub 上流行度為100%,項目地址為:pub.flutter-io.cn/packages/ur…​

flutter_easyrefresh上下拉刷新

flutter 中上下拉加載數據的不二之選,也是國人開發(fā)的,支持在大部分組件上套用實現上拉加載或下拉刷新。使用方法也是很簡單,同時也支持自定義 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 的全局異常捕獲插件,可以自動捕捉到系統(tǒng)的異常,并且可以指定異常上報地址自動將運行錯誤上報給服務端,從而方便開發(fā)者跟蹤程序的 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,可以緩存已經加載過的圖片而無需重復下載,既提高了加載速度也節(jié)省了網絡資源請求。同時 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 的操作支持直接執(zhí)行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 常用插件的資料請關注腳本之家其它相關文章!

相關文章

  • 簡介Android應用中sharedPreferences類存儲數據的用法

    簡介Android應用中sharedPreferences類存儲數據的用法

    這篇文章主要介紹了Android應用中使用sharedPreferences類存儲數據的方法,文中舉了用SharedPreferences保存數據和讀取數據的例子,需要的朋友可以參考下
    2016-02-02
  • Android實現簡單計算器

    Android實現簡單計算器

    這篇文章主要為大家詳細介紹了Android實現簡單計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Android之Notification的多種用法實例

    Android之Notification的多種用法實例

    本篇文章主要介紹了Android之Notification的多種用法實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Android自定義View仿華為圓形加載進度條

    Android自定義View仿華為圓形加載進度條

    這篇文章主要為大家詳細介紹了Android自定義View仿華為圓形加載進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android下拉框PopupWindow使用詳解

    Android下拉框PopupWindow使用詳解

    這篇文章主要為大家詳細介紹了Android下拉框PopupWindow的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 使用RecyclerView實現Item點擊事件

    使用RecyclerView實現Item點擊事件

    這篇文章主要介紹了使用RecyclerView實現Item點擊事件,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Android使用addView動態(tài)添加組件的方法

    Android使用addView動態(tài)添加組件的方法

    這篇文章主要為大家詳細介紹了Android使用addView動態(tài)添加組件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 你用不慣 RxJava,只因缺了這把鑰匙(推薦)

    你用不慣 RxJava,只因缺了這把鑰匙(推薦)

    這篇文章主要介紹了RxJava操作符,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Android開發(fā)之DatePicker和TimePicker實現選擇日期時間功能示例

    Android開發(fā)之DatePicker和TimePicker實現選擇日期時間功能示例

    這篇文章主要介紹了Android開發(fā)之DatePicker和TimePicker實現選擇日期時間功能,結合實例形式分析了Android DatePicker和TimePicker組件的功能、常用函數、布局及日期時間選擇相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • Android自定義LinearLayout布局顯示不完整的解決方法

    Android自定義LinearLayout布局顯示不完整的解決方法

    這篇文章主要給大家介紹了關于Android自定義LinearLayout但布局顯示不完整的解決方法,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-11-11

最新評論

乐东| 和林格尔县| 沽源县| 和平区| 东丽区| 象山县| 抚州市| 邢台市| 玛曲县| 蒲江县| 芮城县| 长葛市| 三门县| 卓资县| 楚雄市| 滕州市| 资阳市| 贵阳市| 高碑店市| 麻阳| 虹口区| 琼中| 望谟县| 房产| 屏边| 罗甸县| 阿坝| 新巴尔虎右旗| 合水县| 巧家县| 凤凰县| 岑溪市| 开原市| 同德县| 阿尔山市| 犍为县| 且末县| 郴州市| 盐边县| 阳曲县| 阿拉善盟|