1. dio: ^2.1.4
flutter的http请求库,支持get、post请求,支持添加拦截器,支持添加请求头
2. shared_preferences
数据库持久化的库,保存轻量级的用户数据。对应android的SharedPreferences,对应ios的NSUserDefaults
3. crypto: ^2.0.6
数据加密库,MD5,DES加密,项目中使用MD5的加密
4.event_bus: ^1.0.1
事件分发总线库,使用StreamController实现的,对标Android的EventBus
5. flutter_webview_plugin: ^0.3.5
webview 加载库
6. flutter_html: ^0.10.4
HTML富文本加载库
7. flutter_swiper: ^1.1.6
flutter的图片轮播库
8.image_picker: ^0.6.1+4
图片选择库,支持相册,拍照功能
9. image_cropper: ^1.0.2
图片修剪的库
10. fluro: ^1.3.4
控制路由跳转的库
11. sqflite: ^1.1.5
数据库的库
12.path_provider: ^1.1.0
访问文件路径的库
13. permission_handler: ^3.1.0
权限请求的库
14. fluttertoast: ^3.1.0
toast 的库
15. video_player: ^0.10.0+2
视频播放的库
16. auto_orientation: ^0.0.2
转屏(竖屏,横屏)的库
17.extended_image: ^0.5.5
图片的三级缓存的库
18.url_launcher: ^5.0.2
打电话,邮箱 ,短信的库
19. intl: ^0.15.7
国际化
20.chewie: ^0.9.7
对video_player的封装,视频控制器,控制栏和全屏的功能
english_words 随机生成单词
dependencies:
flutter:
sdk: flutter
english_words:
import "package:english_words/english_words.dart";
void main(){
// generateWordPairs 随机生成2个单词
var s1 = generateWordPairs().take(2);
print(s1); //(floorguide, pangrief)
print(s1.toList()); //[coldpond, madjudge]
print(s1.map((e) => e.asPascalCase).toList()); //[StrictFirm, LightRim]
// 生成指定单词
var word = new WordPair('book', 'go');
print(word); //bookgo
print(word.asPascalCase); //BookGo
// 随机生成一个单词
var w2 = new WordPair.random();
print(w2); //stillpitch
print((w2).asPascalCase); //StillPitch 帕斯卡命名法(首字母大写),后续单字的首字母都用大写字母
print((w2).asCamelCase); //stillPitch 骆驼式命名法(首字母小写),后续单字的首字母都用大写字母
print((w2).asLowerCase); //stillpitch
print((w2).asUpperCase); //STILLPITCH
print((w2).asString); //stillpitch
}
crypto 加密
https://pub.dev/packages/crypto
安装依赖
dependencies:
crypto: ^2.1.5
导入
import 'package:crypto/crypto.dart';
A set of cryptographic hashing functions implemented in pure Dart
The following hashing algorithms are supported:
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
- MD5
- HMAC (i.e. HMAC-MD5, HMAC-SHA1, HMAC-SHA256)
Digest on a single input
To hash a list of bytes, invoke the convert
method on the sha1
, sha256
or md5
objects.
import 'package:crypto/crypto.dart';
import 'dart:convert'; // for the utf8.encode method
import 'package:convert/convert.dart';
void main() {
var bytes = utf8.encode("foobar"); // data being hashed
//等同于:
var bytes = Utf8Encoder().convert("foobar");
var digest = md5.convert(bytes);
return hex.encode(digest.bytes); //hex 需要 import 'package:convert/convert.dart';
//等同于
return digest.toString();
print(bytes);
print(digest);
print(digest.bytes);
}
//md5.convert(utf8.encode('foobar')).toString()
示例
import 'dart:convert';
import 'package:convert/convert.dart';
void main(){
String generateMd5(String data) {
var bytes = utf8.encode(data);
var digest = md5.convert(bytes);
return hex.encode(digest.bytes);
}
String getSign(Map paramerter) {
var Key = '密钥';
var timestamp = DateTime.now().millisecondsSinceEpoch;
var versionNumber = 'app-V1';
paramerter['timestamp'] = timestamp.toString();
paramerter['versionNumber'] = versionNumber;
// 存储所有的key
List<String> allKeys = [];
paramerter.forEach((key, value) {
allKeys.add(key + value);
});
// key排序
allKeys.sort((a, b) => a.compareTo(b));
// 数组转string
String pairString = allKeys.join('');
// 拼接ABC是你的密钥
String sign = Key + pairString + Key;
// hash
String signString = generateMd5(sign).toUpperCase();
//String signString = md5.convert(utf8.encode(sign)).toString().toUpperCase(); //直接写也可以
return signString;
}
var formData = {'adCode': '000000'};
formData['sign'] = getSign(formData);
print(formData);
//{adCode: 000000, timestamp: 1607246978538, versionNumber: app-V1, sign: 4DB9FB09BEC1B8681BF426BFA73B9FDF}
};
webview_flutter
https://pub.dev/packages/webview_flutter
安装依赖
dependencies:
webview_flutter: ^1.0.7
导入
import 'package:webview_flutter/webview_flutter.dart';
使用
webview_page.dart
import 'package:flutter/material.dart';
import 'package:app1/pages/web_view/webview_template.dart';
class WebviewPage extends StatelessWidget {
WebviewPage({
key,
@required this.url,
this.title,
this.showAppBar,
}) : super(key: key);
final String url;
final String title;
final bool showAppBar;
@override
Widget build(BuildContext context) {
return WebViewTemplate(
url: url,
title: title,
showAppBar: showAppBar,
);
}
}
webview_template.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:app1/coms/loading/ELoading.dart';
class WebViewTemplate extends StatefulWidget {
WebViewTemplate({
key,
@required this.url,
this.title,
this.showAppBar,
}) : super(key: key);
final String url;
final String title;
final bool showAppBar;
@override
_WebViewTemplateState createState() => _WebViewTemplateState();
}
class _WebViewTemplateState extends State<WebViewTemplate> {
@override
void initState() {
super.initState();
// Enable hybrid composition.
if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
}
onPageStarted(url) {
ELoading.show(status: "加载中...");
}
onPageFinished(url) {
ELoading.destroy();
}
@override
dispose() {
super.dispose();
ELoading.destroy();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: (widget.showAppBar) ? AppBar(title: Text(widget.title)) : null,
body: WebView(
initialUrl: widget.url,
javascriptMode: JavascriptMode.unrestricted,
onPageStarted: onPageStarted,
onPageFinished: onPageFinished,
),
);
}
}