1. 1. dio: ^2.1.4
  2. flutterhttp请求库,支持getpost请求,支持添加拦截器,支持添加请求头
  3. 2. shared_preferences
  4. 数据库持久化的库,保存轻量级的用户数据。对应androidSharedPreferences,对应iosNSUserDefaults
  5. 3. crypto: ^2.0.6
  6. 数据加密库,MD5,DES加密,项目中使用MD5的加密
  7. 4.event_bus: ^1.0.1
  8. 事件分发总线库,使用StreamController实现的,对标AndroidEventBus
  9. 5. flutter_webview_plugin: ^0.3.5
  10. webview 加载库
  11. 6. flutter_html: ^0.10.4
  12. HTML富文本加载库
  13. 7. flutter_swiper: ^1.1.6
  14. flutter的图片轮播库
  15. 8.image_picker: ^0.6.1+4
  16. 图片选择库,支持相册,拍照功能
  17. 9. image_cropper: ^1.0.2
  18. 图片修剪的库
  19. 10. fluro: ^1.3.4
  20. 控制路由跳转的库
  21. 11. sqflite: ^1.1.5
  22. 数据库的库
  23. 12.path_provider: ^1.1.0
  24. 访问文件路径的库
  25. 13. permission_handler: ^3.1.0
  26. 权限请求的库
  27. 14. fluttertoast: ^3.1.0
  28. toast 的库
  29. 15. video_player: ^0.10.0+2
  30. 视频播放的库
  31. 16. auto_orientation: ^0.0.2
  32. 转屏(竖屏,横屏)的库
  33. 17.extended_image: ^0.5.5
  34. 图片的三级缓存的库
  35. 18.url_launcher: ^5.0.2
  36. 打电话,邮箱 ,短信的库
  37. 19. intl: ^0.15.7
  38. 国际化
  39. 20.chewie: ^0.9.7
  40. video_player的封装,视频控制器,控制栏和全屏的功能

english_words 随机生成单词

  1. dependencies:
  2. flutter:
  3. sdk: flutter
  4. english_words:
  1. import "package:english_words/english_words.dart";
  2. void main(){
  3. // generateWordPairs 随机生成2个单词
  4. var s1 = generateWordPairs().take(2);
  5. print(s1); //(floorguide, pangrief)
  6. print(s1.toList()); //[coldpond, madjudge]
  7. print(s1.map((e) => e.asPascalCase).toList()); //[StrictFirm, LightRim]
  8. // 生成指定单词
  9. var word = new WordPair('book', 'go');
  10. print(word); //bookgo
  11. print(word.asPascalCase); //BookGo
  12. // 随机生成一个单词
  13. var w2 = new WordPair.random();
  14. print(w2); //stillpitch
  15. print((w2).asPascalCase); //StillPitch 帕斯卡命名法(首字母大写),后续单字的首字母都用大写字母
  16. print((w2).asCamelCase); //stillPitch 骆驼式命名法(首字母小写),后续单字的首字母都用大写字母
  17. print((w2).asLowerCase); //stillpitch
  18. print((w2).asUpperCase); //STILLPITCH
  19. print((w2).asString); //stillpitch
  20. }

crypto 加密

https://pub.dev/packages/crypto

安装依赖
  1. dependencies:
  2. crypto: ^2.1.5

导入
  1. 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.

  1. import 'package:crypto/crypto.dart';
  2. import 'dart:convert'; // for the utf8.encode method
  3. import 'package:convert/convert.dart';
  4. void main() {
  5. var bytes = utf8.encode("foobar"); // data being hashed
  6. //等同于:
  7. var bytes = Utf8Encoder().convert("foobar");
  8. var digest = md5.convert(bytes);
  9. return hex.encode(digest.bytes); //hex 需要 import 'package:convert/convert.dart';
  10. //等同于
  11. return digest.toString();
  12. print(bytes);
  13. print(digest);
  14. print(digest.bytes);
  15. }
  16. //md5.convert(utf8.encode('foobar')).toString()

image.png

示例
  1. import 'dart:convert';
  2. import 'package:convert/convert.dart';
  3. void main(){
  4. String generateMd5(String data) {
  5. var bytes = utf8.encode(data);
  6. var digest = md5.convert(bytes);
  7. return hex.encode(digest.bytes);
  8. }
  9. String getSign(Map paramerter) {
  10. var Key = '密钥';
  11. var timestamp = DateTime.now().millisecondsSinceEpoch;
  12. var versionNumber = 'app-V1';
  13. paramerter['timestamp'] = timestamp.toString();
  14. paramerter['versionNumber'] = versionNumber;
  15. // 存储所有的key
  16. List<String> allKeys = [];
  17. paramerter.forEach((key, value) {
  18. allKeys.add(key + value);
  19. });
  20. // key排序
  21. allKeys.sort((a, b) => a.compareTo(b));
  22. // 数组转string
  23. String pairString = allKeys.join('');
  24. // 拼接ABC是你的密钥
  25. String sign = Key + pairString + Key;
  26. // hash
  27. String signString = generateMd5(sign).toUpperCase();
  28. //String signString = md5.convert(utf8.encode(sign)).toString().toUpperCase(); //直接写也可以
  29. return signString;
  30. }
  31. var formData = {'adCode': '000000'};
  32. formData['sign'] = getSign(formData);
  33. print(formData);
  34. //{adCode: 000000, timestamp: 1607246978538, versionNumber: app-V1, sign: 4DB9FB09BEC1B8681BF426BFA73B9FDF}
  35. };

webview_flutter

https://pub.dev/packages/webview_flutter

安装依赖
  1. dependencies:
  2. webview_flutter: ^1.0.7

导入
  1. import 'package:webview_flutter/webview_flutter.dart';

使用

webview_page.dart

  1. import 'package:flutter/material.dart';
  2. import 'package:app1/pages/web_view/webview_template.dart';
  3. class WebviewPage extends StatelessWidget {
  4. WebviewPage({
  5. key,
  6. @required this.url,
  7. this.title,
  8. this.showAppBar,
  9. }) : super(key: key);
  10. final String url;
  11. final String title;
  12. final bool showAppBar;
  13. @override
  14. Widget build(BuildContext context) {
  15. return WebViewTemplate(
  16. url: url,
  17. title: title,
  18. showAppBar: showAppBar,
  19. );
  20. }
  21. }

webview_template.dart

  1. import 'dart:io';
  2. import 'package:flutter/material.dart';
  3. import 'package:webview_flutter/webview_flutter.dart';
  4. import 'package:app1/coms/loading/ELoading.dart';
  5. class WebViewTemplate extends StatefulWidget {
  6. WebViewTemplate({
  7. key,
  8. @required this.url,
  9. this.title,
  10. this.showAppBar,
  11. }) : super(key: key);
  12. final String url;
  13. final String title;
  14. final bool showAppBar;
  15. @override
  16. _WebViewTemplateState createState() => _WebViewTemplateState();
  17. }
  18. class _WebViewTemplateState extends State<WebViewTemplate> {
  19. @override
  20. void initState() {
  21. super.initState();
  22. // Enable hybrid composition.
  23. if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
  24. }
  25. onPageStarted(url) {
  26. ELoading.show(status: "加载中...");
  27. }
  28. onPageFinished(url) {
  29. ELoading.destroy();
  30. }
  31. @override
  32. dispose() {
  33. super.dispose();
  34. ELoading.destroy();
  35. }
  36. @override
  37. Widget build(BuildContext context) {
  38. return Scaffold(
  39. appBar: (widget.showAppBar) ? AppBar(title: Text(widget.title)) : null,
  40. body: WebView(
  41. initialUrl: widget.url,
  42. javascriptMode: JavascriptMode.unrestricted,
  43. onPageStarted: onPageStarted,
  44. onPageFinished: onPageFinished,
  45. ),
  46. );
  47. }
  48. }