diff --git a/FRouter/FRouter.dart b/FRouter/FRouter.dart new file mode 100644 index 0000000..64b7f5a --- /dev/null +++ b/FRouter/FRouter.dart @@ -0,0 +1,328 @@ +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; + +class FRouter extends StatefulWidget { + // 是否是首页 默认为非首页 + bool isFirstPage; + + // 是否显示AppBar + bool isShowAppBar; + + Widget child; + String title; + ThemeData theme; + ThemeData darkTheme; + Color color; + GlobalKey navigatorKey; + GenerateAppTitle onGenerateTitle; + + // 路由集合 所有的路由跳转都放在这里集中管理 + Map routes; + ThemeMode themeMode; + + // 默认初始路由 + String initialRoute = '/'; + RouteFactory onGenerateRoute; + RouteFactory onUnknownRoute; + List navigatorObservers; + TransitionBuilder builder; + Locale locale; + Iterable> localizationsDelegates; + LocaleListResolutionCallback localeListResolutionCallback; + LocaleResolutionCallback localeResolutionCallback; + Iterable supportedLocales; + bool debugShowMaterialGrid; + bool showPerformanceOverlay; + bool checkerboardRasterCacheImages; + bool checkerboardOffscreenLayers; + bool showSemanticsDebugger; + bool debugShowCheckedModeBanner; + + // AppBar有关 + Widget appBarleading; + bool automaticallyImplyLeading; + Widget appBarTitle; + List appBarActions; + Widget appBarFlexibleSpace; + PreferredSizeWidget appBarBottom; + double appBarElevation; + ShapeBorder appBarShape; + Color appBarBackgroundColor; + Brightness appBarBrightness; + IconThemeData appBarIconTheme; + IconThemeData appBarActionsIconTheme; + TextTheme appBarTextTheme; + bool appBarPrimary; + bool appBarCenterTitle; + double appBarTitleSpacing = NavigationToolbar.kMiddleSpacing; + double appBarToolbarOpacity; + double appBarBottomOpacity; + + // Scaffod有关 + Widget body; + Widget floatingActionButton; + FloatingActionButtonLocation floatingActionButtonLocation; + FloatingActionButtonAnimator floatingActionButtonAnimator; + List persistentFooterButtons; + Widget drawer; + Widget endDrawer; + Color drawerScrimColor; + double drawerEdgeDragWidth; + DragStartBehavior drawerDragStartBehavior; + Color backgroundColor; + Widget bottomNavigationBar; + Widget bottomSheet; + bool resizeToAvoidBottomPadding; + bool resizeToAvoidBottomInset; + bool primary; + + bool extendBody; + + FRouter({ + Key key, + this.isFirstPage = false, + this.isShowAppBar = false, + this.child, + this.title = '', + this.theme, + this.darkTheme, + this.themeMode = ThemeMode.system, + this.color, + // 路由有关 + this.navigatorKey, + this.onGenerateTitle, + this.routes = const {}, + this.initialRoute, + this.onGenerateRoute, + this.onUnknownRoute, + this.navigatorObservers = const [], + this.builder, + // 本地化有关 + this.locale, + this.localizationsDelegates, + this.localeListResolutionCallback, + this.localeResolutionCallback, + this.supportedLocales = const [Locale('en', 'US')], + // debug有关 + this.debugShowMaterialGrid = false, + this.showPerformanceOverlay = false, + this.checkerboardRasterCacheImages = false, + this.checkerboardOffscreenLayers = false, + this.showSemanticsDebugger = false, + this.debugShowCheckedModeBanner = true, + + // AppBar有关 + this.appBarleading, + this.automaticallyImplyLeading = true, + this.appBarTitle, + this.appBarActions, + this.appBarFlexibleSpace, + this.appBarBottom, + this.appBarElevation, + this.appBarShape, + this.appBarBackgroundColor, + this.appBarBrightness, + this.appBarIconTheme, + this.appBarActionsIconTheme, + this.appBarTextTheme, + this.appBarPrimary = true, + this.appBarCenterTitle, + this.appBarTitleSpacing = NavigationToolbar.kMiddleSpacing, + this.appBarToolbarOpacity = 1.0, + this.appBarBottomOpacity = 1.0, + + // Scaffod有关 + this.floatingActionButton, + this.floatingActionButtonLocation, + this.floatingActionButtonAnimator, + this.persistentFooterButtons, + this.drawer, + this.endDrawer, + this.bottomNavigationBar, + this.bottomSheet, + this.backgroundColor, + this.resizeToAvoidBottomPadding, + this.resizeToAvoidBottomInset, + this.primary = true, + this.drawerDragStartBehavior = DragStartBehavior.start, + this.extendBody = false, + this.drawerScrimColor, + this.drawerEdgeDragWidth, + }) : assert(isFirstPage != null), + assert(isShowAppBar != null), + // MaterialApp 有关 + assert(routes != null), + assert(navigatorObservers != null), + assert(title != null), + assert(debugShowMaterialGrid != null), + assert(showPerformanceOverlay != null), + assert(checkerboardRasterCacheImages != null), + assert(checkerboardOffscreenLayers != null), + assert(showSemanticsDebugger != null), + assert(debugShowCheckedModeBanner != null), + // appbar有关 + assert(automaticallyImplyLeading != null), + assert(appBarElevation == null || appBarElevation >= 0.0), + assert(appBarPrimary != null), + assert(appBarTitleSpacing != null), + assert(appBarToolbarOpacity != null), + assert(appBarBottomOpacity != null), + // Scaffold 有关 + assert(primary != null), + assert(extendBody != null), + assert(drawerDragStartBehavior != null), + super(key: key); + + @override + FRouterState createState() => FRouterState(); + + /// 发送路由到新页面 + static sendRouterPage(BuildContext context, Widget page) { + Navigator.of(context) + .push(MaterialPageRoute(builder: (BuildContext context) { + return page; + })); + } + + /// 发送命名路由 这个需要配合 [routes] 属性使用 + static sendRouter(BuildContext context, String routeName) { + Navigator.of(context).pushNamed(routeName); + } + + get getDatas => routes; + + set setDatas(Map datas) => datas = routes; + + /// 返回上个页面的路由 参数2:要传递给上个页面的数据 + static backPageRouter(BuildContext context, {T backData}) { + Navigator.of(context).pop(backData); + } + + /// 接收路由返回的数据 参数2:路由名称 + Future receiverRouterData( + BuildContext context, String routeName) async { + var data = await Navigator.of(context).pushNamed(routeName); + return data; + } +} + +class FRouterState extends State { + @override + Widget build(BuildContext context) { + if (widget.isFirstPage == true) { + return MaterialApp( + home: widget.isShowAppBar == true + ? Scaffold( + appBar: AppBar( + key: widget.key, + leading: widget.appBarleading, + automaticallyImplyLeading: widget.automaticallyImplyLeading, + title: widget.appBarTitle, + actions: widget.appBarActions, + flexibleSpace: widget.appBarFlexibleSpace, + bottom: widget.appBarBottom, + elevation: widget.appBarElevation, + shape: widget.appBarShape, + backgroundColor: widget.appBarBackgroundColor, + brightness: widget.appBarBrightness, + iconTheme: widget.appBarIconTheme, + actionsIconTheme: widget.appBarActionsIconTheme, + textTheme: widget.appBarTextTheme, + primary: widget.appBarPrimary, + centerTitle: widget.appBarCenterTitle, + titleSpacing: widget.appBarTitleSpacing, + toolbarOpacity: widget.appBarToolbarOpacity, + bottomOpacity: widget.appBarBottomOpacity, + ), + body: widget.body, + floatingActionButton: widget.floatingActionButton, + floatingActionButtonLocation: + widget.floatingActionButtonLocation, + floatingActionButtonAnimator: + widget.floatingActionButtonAnimator, + persistentFooterButtons: widget.persistentFooterButtons, + drawer: widget.drawer, + endDrawer: widget.endDrawer, + bottomNavigationBar: widget.bottomNavigationBar, + bottomSheet: widget.bottomSheet, + backgroundColor: widget.backgroundColor, + resizeToAvoidBottomPadding: widget.resizeToAvoidBottomPadding, + resizeToAvoidBottomInset: widget.resizeToAvoidBottomInset, + primary: widget.primary, + drawerDragStartBehavior: widget.drawerDragStartBehavior, + extendBody: widget.extendBody, + drawerScrimColor: widget.drawerScrimColor, + drawerEdgeDragWidth: widget.drawerEdgeDragWidth, + ) + : widget.child, + title: widget.title, + theme: widget.theme, + darkTheme: widget.darkTheme, + themeMode: widget.themeMode, + color: widget.color, + navigatorKey: widget.navigatorKey, + onGenerateTitle: widget.onGenerateTitle, + routes: widget.routes, + initialRoute: widget.initialRoute, + onGenerateRoute: widget.onGenerateRoute, + onUnknownRoute: widget.onUnknownRoute, + navigatorObservers: widget.navigatorObservers, + builder: widget.builder, + locale: widget.locale, + localizationsDelegates: widget.localizationsDelegates, + localeListResolutionCallback: widget.localeListResolutionCallback, + localeResolutionCallback: widget.localeResolutionCallback, + supportedLocales: widget.supportedLocales, + debugShowMaterialGrid: widget.debugShowMaterialGrid, + showPerformanceOverlay: widget.showPerformanceOverlay, + checkerboardRasterCacheImages: widget.checkerboardRasterCacheImages, + checkerboardOffscreenLayers: widget.checkerboardOffscreenLayers, + showSemanticsDebugger: widget.showSemanticsDebugger, + debugShowCheckedModeBanner: widget.debugShowCheckedModeBanner, + ); + } else { + widget.isShowAppBar == true + ? Scaffold( + appBar: AppBar( + key: widget.key, + leading: widget.appBarleading, + automaticallyImplyLeading: widget.automaticallyImplyLeading, + title: widget.appBarTitle, + actions: widget.appBarActions, + flexibleSpace: widget.appBarFlexibleSpace, + bottom: widget.appBarBottom, + elevation: widget.appBarElevation, + shape: widget.appBarShape, + backgroundColor: widget.appBarBackgroundColor, + brightness: widget.appBarBrightness, + iconTheme: widget.appBarIconTheme, + actionsIconTheme: widget.appBarActionsIconTheme, + textTheme: widget.appBarTextTheme, + primary: widget.appBarPrimary, + centerTitle: widget.appBarCenterTitle, + titleSpacing: widget.appBarTitleSpacing, + toolbarOpacity: widget.appBarToolbarOpacity, + bottomOpacity: widget.appBarBottomOpacity, + ), + body: widget.body, + floatingActionButton: widget.floatingActionButton, + floatingActionButtonLocation: widget.floatingActionButtonLocation, + floatingActionButtonAnimator: widget.floatingActionButtonAnimator, + persistentFooterButtons: widget.persistentFooterButtons, + drawer: widget.drawer, + endDrawer: widget.endDrawer, + bottomNavigationBar: widget.bottomNavigationBar, + bottomSheet: widget.bottomSheet, + backgroundColor: widget.backgroundColor, + resizeToAvoidBottomPadding: widget.resizeToAvoidBottomPadding, + resizeToAvoidBottomInset: widget.resizeToAvoidBottomInset, + primary: widget.primary, + drawerDragStartBehavior: widget.drawerDragStartBehavior, + extendBody: widget.extendBody, + drawerScrimColor: widget.drawerScrimColor, + drawerEdgeDragWidth: widget.drawerEdgeDragWidth, + ) + : widget.child; + } + } +} diff --git a/FRouter/test_frouter.dart b/FRouter/test_frouter.dart new file mode 100644 index 0000000..cd9dbba --- /dev/null +++ b/FRouter/test_frouter.dart @@ -0,0 +1,99 @@ +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'FRouter.dart'; + +void main() => runApp(MainPage()); + +// 使用示例代码 +class MainPage extends StatefulWidget { + @override + MainPageState createState() => new MainPageState(); +} + +class MainPageState extends State { + @override + Widget build(BuildContext context) { + // 首页 isFirstPage: true, + return FRouter( + isFirstPage: true, + isShowAppBar: true, + routes: { + // 不传递数据 + '/pageone': (builder) => PageOne(), + // 传递数据给PageTwo这个页面 + '/pagetwo': (builder) => PageTwo('数据2'), + '/pagethree': (builder) => PageThree('数据3'), + }, + appBarTitle: Text('Hello World'), + child: RaisedButton( + onPressed: () { + // 命名路由 + FRouter.sendRouter(context, '/pageone'); + // 发送路由到新页面 + // FRouter.sendRouterPage(context, PageOne('data')); + }, + child: Text('点击进行跳转'), + ), + ); + } +} + +class PageOne extends StatelessWidget { + + @override + Widget build(BuildContext context) { + // 非首页 isFirstPage: false, 默认就是非首页 + return FRouter( + isShowAppBar: true, + appBarTitle: Text(), + child: RaisedButton( + onPressed: () { + // 返回到上个页面 + FRouter.backPageRouter(context); + }, + child: Text('点击进行跳转'), + ), + ); + } +} + +class PageTwo extends StatelessWidget { + String data; + + PageTwo(this.data); + + @override + Widget build(BuildContext context) { + return FRouter( + isShowAppBar: true, + appBarTitle: Text('PageTwo'), + child: RaisedButton( + onPressed: () { + // 返回数据给上个页面 + FRouter.backPageRouter(context,'返回给上个页面的数据'); + }, + child: Text('点击进行跳转'), + ), + ); + } +} + +class PageThree extends StatelessWidget { + String data; + + PageThree(this.data); + + @override + Widget build(BuildContext context) { + // 不显示AppBar + return FRouter( + isShowAppBar: false, + child: RaisedButton( + onPressed: () { + FRouter.backPageRouter(context); + }, + child: Text('点击进行跳转'), + ), + ); + } +} \ No newline at end of file diff --git a/README-EN.md b/README-EN.md index 1924b5e..f98f625 100644 --- a/README-EN.md +++ b/README-EN.md @@ -1,14 +1,15 @@ # Flutter-learning -#### README [English](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/README-EN.md)|[中文版请点击这里](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/README.md) +## README +#### [中文版文档](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/README.md) | [English Docs](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/README-EN.md) ![logo](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/pics/logo.png?raw=true) # Introductions -> This library is a collection of Flutter learning resources , summaries, and sample codes. If you want to learn Flutter quickly, check out this library, because this library is very helpful for you. If you like, you can give a `star`.Thank you! Welcome to comment and help improve this library. If you have any questions, please pull issue. +> This library is a collection of Flutter learning resources , summaries, and sample codes. If you want to learn Flutter quickly, check out this library, because this library is very helpful for you. If you like, you can give a `star`. Thank you! Welcome to comment and help improve this library. If you have any questions, please pull issues. ![](https://img.shields.io/badge/platform-android-lightgreen.svg)![](https://img.shields.io/badge/platform-ios-lightgreen.svg) @@ -18,15 +19,18 @@ ## 1、Flutter Resources +* #### :fire: [Common libraries for Flutter(Everything you want is here)](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E7%9A%84%E9%9C%80%E8%A6%81%E4%B8%8E%E5%8E%9F%E7%94%9F%E4%BA%A4%E4%BA%92%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%BA%93/English_docs/Common%20libraries%20for%20Flutter.md) + * #### [Flutter basis](https://www.jianshu.com/p/2c9867e737a1) * #### [Flutter tools,install and wtf problems](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E4%BB%8E%E9%85%8D%E7%BD%AE%E5%AE%89%E8%A3%85%E5%88%B0%E5%A1%AB%E5%9D%91%E6%8C%87%E5%8D%97%E8%AF%A6%E8%A7%A3.md) -* #### [Flutter widgets VS Android widgets](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E5%92%8C%E5%8E%9F%E7%94%9FAndroid%E6%8E%A7%E4%BB%B6%E5%AF%B9%E6%AF%94.md) + +* #### :+1: [Flutter code template plugin for Android Studio, IDEA & VSCode](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/code_plugins) * #### [Dart languages](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Dart%E8%AF%AD%E6%B3%95.md) -* #### [Widely used libraries in Flutter](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E7%9A%84%E9%9C%80%E8%A6%81%E4%B8%8E%E5%8E%9F%E7%94%9F%E4%BA%A4%E4%BA%92%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%BA%93.md) +* #### [Flutter widgets VS Android widgets](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E5%92%8C%E5%8E%9F%E7%94%9FAndroid%E6%8E%A7%E4%BB%B6%E5%AF%B9%E6%AF%94.md) * #### [Flutter widgets VS react native widgets](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E5%92%8Creact%20native%E7%9A%84%E5%AF%B9%E6%AF%94.md) @@ -34,26 +38,27 @@ * #### [Flutter Chinese Website, written by me(Imitate flutter.io)](https://github.com/AweiLoveAndroid/FlutterWebsiteCN_Mine) -* #### :+1: [Flutter code template plugin for Android Studio, IDEA & VSCode](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/code_plugins) - ---- + ## 2、Sample codes and projects + * #### [Flutter demo codes](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/projects/flutter-demo) * #### [Dart grammar codes](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/projects/dart_demo/test) -* #### [FractionalOffsetUtil.dart](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/projects/flutter-demo/util/FractionalOffsetUtil.dart) +* #### [Tools -- FractionalOffsetUtil.dart](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/projects/flutter-demo/util/FractionalOffsetUtil.dart) ---- + ## 3、Flutter documents -* #### [Flutter相关译文](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/flutter-learning-doc-resources/%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3%E8%AF%91%E6%96%87/Android%E5%BC%80%E5%8F%91%E8%80%85%E5%8F%82%E8%80%83.md) +* #### [Flutter translation](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/flutter-learning-doc-resources/%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3%E8%AF%91%E6%96%87/Android%E5%BC%80%E5%8F%91%E8%80%85%E5%8F%82%E8%80%83.md) -* #### [Flutter有关博客详解](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/flutter-learning-doc-resources/Flutter%E6%9C%89%E5%85%B3%E5%8D%9A%E5%AE%A2%E8%AE%B2%E8%A7%A3.md) +* #### [Flutter blogs](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/flutter-learning-doc-resources/Flutter%E6%9C%89%E5%85%B3%E5%8D%9A%E5%AE%A2%E8%AE%B2%E8%A7%A3.md) * #### Comparison of Flutter and other platforms @@ -65,38 +70,37 @@ ---- + ## 4、Websites for Flutter & Dart ### ★ About Flutter Websites -##### :arrow_right: [Flutter Website https://flutter.io/docs/](https://flutter.io/docs/) +##### :arrow_right: [Flutter Website https://flutter.dev/docs/](https://flutter.dev/docs/) Official website,English language. ##### :arrow_right: [Flutter Chinese official website https://flutter-io.cn/](https://flutter-io.cn/) It's new, you can find videos,blogs,docs & codelabs in it.It is very comprehensive. -##### :arrow_right: [Flutter Website for China https://www.flutter123.com/](https://www.flutter123.com/) - Chinese websites made by me. This website is updated faster, and almost sync with the official website. -##### :arrow_right: [Flutter Website for China https://www.flutter123.cn](https://www.flutter123.cn/) - Chinese websites made by me. This website is updated faster, and almost sync with the official website. +##### :arrow_right: [http://www.flutterj.com/](http://www.flutterj.com/) + Flutter website for develops. - -##### :arrow_right: [Flutter Github https://github.com/flutter/flutter(https://github.com/flutter/flutter) +##### :arrow_right: [Flutter Github : https://github.com/flutter/flutter(https://github.com/flutter/flutter) Flutter open source code,you can find sources and samples form github. ### ★ About Dart Websites -##### :arrow_right: [Dart Open source code libraries https://pub.dartlang.org/](https://pub.dartlang.org/) - You can download Dart libraries here.Also You can upload open source library to `https://pub.dartlang.org`. +##### :arrow_right: Dart Open source code libraries: [https://pub.dev](https://pub.dev) + You can download Dart libraries here.Also You can upload open source library to `https://pub.dev`. + -##### :arrow_right: [Dart website https://www.dartlang.org/](https://www.dartlang.org/) +##### :arrow_right: Dart website: [https://dart.dev](https://dart.dev) Official website,English language. -##### :arrow_right: [dart-pad Github https://github.com/dart-lang/dart-pad](https://github.com/dart-lang/dart-pad) +##### :arrow_right: dart-pad Github: [https://github.com/dart-lang/dart-pad](https://github.com/dart-lang/dart-pad) Source code for the online editor for the Dart language. -##### :arrow_right: [DartPad online editor https://dartpad.dartlang.org/](https://dartpad.dartlang.org/) +##### :arrow_right: DartPad online editor: [https://dartpad.dartlang.org/](https://dartpad.dartlang.org/) Dart language online editor ---- @@ -109,9 +113,10 @@ ---- + # About me -### ● 微信: +### ● Wechat: > Search `wei_xing_tian_xia` and add me. diff --git a/README.md b/README.md index 3ec4177..4c409ae 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ ## 一、自己总结的Flutter有关资料 -* #### :fire: [Flutter的需要与原生交互的一些常用库](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E7%9A%84%E9%9C%80%E8%A6%81%E4%B8%8E%E5%8E%9F%E7%94%9F%E4%BA%A4%E4%BA%92%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%BA%93.md) +* #### :fire: [Flutter的需要与原生交互的一些常用库](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E7%9A%84%E9%9C%80%E8%A6%81%E4%B8%8E%E5%8E%9F%E7%94%9F%E4%BA%A4%E4%BA%92%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%BA%93/Flutter%E7%9A%84%E9%9C%80%E8%A6%81%E4%B8%8E%E5%8E%9F%E7%94%9F%E4%BA%A4%E4%BA%92%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%BA%93.md) * #### [Flutter基础全面详解](https://www.jianshu.com/p/2c9867e737a1) @@ -36,10 +36,26 @@ * #### [我模仿Flutter中文官网写的一个本地的html页面,同时将官网的一些**未翻译的英文**页面**翻译**成了中文。](https://github.com/AweiLoveAndroid/FlutterWebsiteCN_Mine) +---- + + +## 二、Flutter原创干货视频 + +#### :fire: :movie_camera: [Flutter基础快速入门全攻略](https://edu.csdn.net/course/detail/26227) +从开发实践中得来的经验和教训,全部免费赠送给大家。示例都是开发中用到的,结合具体案例做基础知识讲解,作者讲解的细致好懂,思路清晰,作者课后答疑解惑耐心仔细,帮助了很多开发者,难得一遇的良心讲师。 + + +#### :fire: :movie_camera: [Flutter实战网易新闻APP](https://edu.csdn.net/course/detail/26858) +你不成长,就会被淘汰;你不学习新知识,就会被陈旧的不符合发展趋势的技术耽误自己的前途。那么问题来了,如今跨平台技术那么火爆,Flutter又是最牛逼全面的一个技术,难道你想眼睁睁被社会无情淘汰吗?我是阿韦,年薪50W大佬教你如何快速掌握Flutter精髓,独家秘笈传给大家,市面上找不到的独家精华全部奉献给大家, 只为企业需求量身打造,让你学完无缝衔接企业需求上手项目开发,免费赠送Flutter面试指导和一对一答疑解惑,切实解决你的燃眉之急,让你学好Flutter,能够使用Flutter进行项目开发,升职加薪不再是梦。 + + +#### :fire: :movie_camera: [Flutter从基础到实践全套视频](https://edu.csdn.net/combo/detail/1533) +本套餐包含入门+进阶实战课程,免费赠送Flutter基础课程,从简到难、从浅入深,逐步带领大家了解Flutter,熟悉掌握Flutter的组成部分,最后以一个完整的仿网易新闻的UI实战讲解,教会大家如何合理选择UI组件,并且使用组件快速实现我们的需求,完成一个完整的Flutter项目,让你学完即可进入企业项目实践。 + ---- -## 二、相关示例代码和项目实战 +## 三、相关示例代码和项目实战 * #### :fire: [Flutter相关demo示例代码](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/projects/flutter-demo) @@ -48,9 +64,24 @@ * #### [自己封装的一个线性渐变工具类FractionalOffsetUtil.dart](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/projects/flutter-demo/util/FractionalOffsetUtil.dart) + ---- -## 三、Flutter相关学习文档 +## 四、本人的开源框架和插件库 + +* #### :fire: [自己写的轻量级路由框架 FRouter,让路由使用和书写更容易,更好处理和维护。值得关注一下。](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/FRouter) + +* #### :+1: [友盟统计Flutter插件](https://github.com/AweiLoveAndroid/umeng_analytics_flutter) + +* #### :+1: [Flutter调用Android的电量和判断是否充电插件](https://github.com/AweiLoveAndroid/flutter_os) + +* #### :+1: [Flutter获取Android设备信息插件](https://github.com/AweiLoveAndroid/flutter_device_information) + +* #### :+1: [Flutter常用的工具类](https://github.com/AweiLoveAndroid/FlutterUtil) + +---- + +## 五、Flutter相关学习文档 * #### [Flutter相关译文](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/flutter-learning-doc-resources/%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3%E8%AF%91%E6%96%87/Android%E5%BC%80%E5%8F%91%E8%80%85%E5%8F%82%E8%80%83.md) @@ -66,7 +97,7 @@ ---- -## 四、Flutter、Dart有关网站 +## 六、Flutter、Dart有关网站 ### ★ Flutter有关网站 @@ -76,11 +107,9 @@ ##### :arrow_right: [Flutter中文官网 https://flutter-io.cn/](https://flutter-io.cn/) 官方的中文网,最新出来的,资料齐全,视频、博客、文档、最新咨询都有。 -##### :arrow_right: [Flutter中文版 https://www.flutter123.com/](https://www.flutter123.com/) -本人自制的中文网,翻译更新的比较快,基本跟官网同步。 -##### :arrow_right: [Flutter中文版 https://www.flutter123.cn](https://www.flutter123.cn/) -本人自制的中文网,翻译更新的比较快,基本跟官网同步。 +##### :arrow_right: [Flutter教程]http://www.flutterj.com/) + ##### :arrow_right: [Flutter Github地址 https://github.com/flutter/flutter](https://github.com/flutter/flutter) Flutter开源库,上面有源码和示例项目。 @@ -128,7 +157,7 @@ Dart语言的在线编辑器 ### ● QQ群: -> 2千人QQ群,**Flutter学习开发交流群,QQ群号:202921297**, 欢迎大家加入。 +> 2千人QQ群,**Flutter学习开发交流群,QQ群号:695025386**, 欢迎大家加入。 ### ● 个人博客: diff --git a/code_plugins/README-CN.md b/code_plugins/README-CN.md index 17c25e0..7636ee5 100644 --- a/code_plugins/README-CN.md +++ b/code_plugins/README-CN.md @@ -1,3 +1,13 @@ # 使用说明 ### ▶【提示:】更多详细的图文使用详细讲解,请看我的博客:[Flutter代码模板,解放双手,提高开发效率必备](https://www.jianshu.com/p/4184745d6983) + + +> 导入到Android Studio 或者 Intellij IDEA + +**Tips: 如果你不喜欢 `new`关键字, 你可以下载 [no_new_keywords/settings.jar](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/code_plugins/no_new_keywords/settings.jar) 文件, 否则请下载 [have_new_keywords/settings.jar](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/code_plugins/have_new_keywords/settings.jar) 这个文件。** + + +> 导入到VSCode + +**Tips: 如果你不喜欢 `new`关键字, 你可以下载 [no_new_keywords/dart.json](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/code_plugins/no_new_keywords/dart.json) 文件, 否则请下载 [have_new_keywords/dart.json](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/code_plugins/have_new_keywords/dart.json) 这个文件。** \ No newline at end of file diff --git a/code_plugins/dart.json b/code_plugins/have_new_keywords/dart.json similarity index 98% rename from code_plugins/dart.json rename to code_plugins/have_new_keywords/dart.json index c85cca4..079393d 100644 --- a/code_plugins/dart.json +++ b/code_plugins/have_new_keywords/dart.json @@ -99,13 +99,13 @@ "prefix": "cc", "body": [ "class $1 extends CustomClipper {", - " @override", - " Path getClip(Size size) {", - " //TODO:", - " }", + " @override", + " Path getClip(Size size) {", + " //TODO:", + " }", "", - " @override", - " bool shouldReclip(CustomClipper oldClipper) => false;", + " @override", + " bool shouldReclip(CustomClipper oldClipper) => false;", "}", ], "description": "自定义CustomClipper" diff --git a/code_plugins/have_new_keywords/settings.jar b/code_plugins/have_new_keywords/settings.jar new file mode 100644 index 0000000..e0edb6f Binary files /dev/null and b/code_plugins/have_new_keywords/settings.jar differ diff --git a/code_plugins/no_new_keywords/dart.json b/code_plugins/no_new_keywords/dart.json new file mode 100644 index 0000000..6bf3fba --- /dev/null +++ b/code_plugins/no_new_keywords/dart.json @@ -0,0 +1,648 @@ +{ + // Place your snippets for dart here. Each snippet is defined under a snippet name and has a prefix, body and + // description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the + // same ids are connected. + // Example: + // "Print to console": { + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // }, + + "创建AnimatedBuilder": { + "prefix": "bab", + "body": [ + "AnimatedBuilder(", + " animation: $1,", + " child: $1,", + " builder: (BuildContext context, Widget child) {", + " return Container();", + " },", + "),", + ], + "description": "创建AnimatedBuilder" + }, + "创建Build()方法": { + "prefix": "bu", + "body": [ + "@override", + "Widget build(BuildContext context) {", + " return $1;", + "}", + ], + "description": "创建Build()方法" + }, + "创建FutureBuilder": { + "prefix": "bufb", + "body": [ + "FutureBuilder(", + " future: $1,", + " initialData: $1,", + " builder: (BuildContext context, AsyncSnapshot snapshot) {", + " return $1;", + " },", + ");", + ], + "description": "创建FutureBuilder" + }, + "创建LayoutBuilder": { + "prefix": "bulb", + "body": [ + "LayoutBuilder(", + " builder: (BuildContext context, BoxConstraints constraints) {", + " return $1;", + " },", + ");", + ], + "description": "创建LayoutBuilder" + }, + "创建OrientationBuilder": { + "prefix": "buob", + "body": [ + "OrientationBuilder(", + " builder: (BuildContext context, Orientation orientation) {", + " return Container();", + " },", + ");", + ], + "description": "创建OrientationBuilder" + }, + "创建StatefulBuilder": { + "prefix": "bustf", + "body": [ + "StatefulBuilder(", + " builder: (BuildContext context, setState) {", + " return $1;", + " },", + ");", + ], + "description": "创建StatefulBuilder" + }, + "创建StreamBuilder": { + "prefix": "bustr", + "body": [ + "StreamBuilder(", + " stream: $1,", + " initialData: $2,", + " builder: (BuildContext context, AsyncSnapshot snapshot) {", + " return $3;", + " },", + ");", + ], + "description": "创建StreamBuilder" + }, + "自定义CustomClipper": { + "prefix": "cc", + "body": [ + "class $1 extends CustomClipper {", + " @override", + " Path getClip(Size size) {", + " //TODO:", + " }", + "", + " @override", + " bool shouldReclip(CustomClipper oldClipper) => false;", + "}", + ], + "description": "自定义CustomClipper" + }, + "创建Center": { + "prefix": "cen", + "body": [ + "Center(", + " child: $1," , + "),", + ], + "description": "创建Center" + }, + "创建Column": { + "prefix": "col", + "body": [ + "Column(", + " chilchildren: [$1]," , + "),", + ], + "description": "创建Column" + }, + "创建完整的Container": { + "prefix": "con", + "body": [ + "Container(", + " //宽度", + " width: $1,", + " //高度", + " height: $2,", + " // 盒子样式", + " decoration: BoxDecoration(", + " color: Colors.$3,", + " //设置Border属性给容器添加边框", + " border: Border.all(", + " //为边框添加颜色", + " color: Colors.$3,", + " width: $4, //边框宽度", + " ),", + " ),", + " child: $5,", + ");", + ], + "description": "创建完整的Container" + }, + "自定义CustomPainter": { + "prefix": "cp", + "body": [ + "class $1Painter extends CustomPainter {", + " @override", + " void paint(Canvas canvas, Size size) {", + " //TODO", + " }", + "", + " @override", + " bool shouldRepaint($name$Painter oldDelegate) => false;", + "", + " @override", + " bool shouldRebuildSemantics($1Painter oldDelegate) => false;", + "}", + ], + "description": "自定义CustomPainter" + }, + "CustomScrollView + SliverPadding创建列表,子控件带有边距": { + "prefix": "csv", + "body": [ + "CustomScrollView(", + " shrinkWrap: true,", + " slivers: [", + " SliverPadding(", + " padding: const EdgeInsets.all($1),", + " sliver: SliverList(", + " delegate: SliverChildListDelegate(", + " [", + " //TODO:请填写子控件", + " ],", + " ),", + " ),", + " ),", + " ],", + ");", + ], + "description": "CustomScrollView + SliverPadding创建列表,子控件带有边距" + }, + "使用CustomScrollView + SliverGrid创建列表": { + "prefix": "csv2", + "body": [ + "CustomScrollView(", + " shrinkWrap: true,", + " slivers: [", + " SliverGrid(", + " // 设置grid的宽高、间距属性", + " gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(", + " // 可以理解为:每一个item的宽(或高)的最大值", + " maxCrossAxisExtent: $maxCrossAxisExtent$,", + " // 行之间的间距", + " mainAxisSpacing: $1,", + " // 列之间的间距", + " crossAxisSpacing: $2,", + " // 子孩子的宽高比例,即:宽度/高度的值", + " childAspectRatio: $3,", + " ),", + " // 设置每一个item的布局", + " delegate: SliverChildBuilderDelegate(", + " (BuildContext context, int index) {", + " return $4;", + " },", + " childCount: $5,", + " ),", + " )", + " ],", + ");", + ], + "description": "使用CustomScrollView + SliverGrid创建列表" + }, + "创建GridView.count": { + "prefix": "gv", + "body": [ + "GridView.count(", + " // 创建几列", + " crossAxisCount: $1,", + " // Axis.horizontal表示横向滑动,scrollDirection: Axis.vertical表示纵向滑动", + " scrollDirection: Axis.vertical,", + " // 列之间的间距", + " crossAxisSpacing: $2,", + " // 行之间的间距", + " mainAxisSpacing: $3,", + " // 默认false 是否根据子孩子的宽高自动包裹item自身", + " shrinkWrap: false,", + " // true表示数据倒序排列 false表示顺序排列", + " reverse: false,", + " // 子孩子的比例", + " childAspectRatio: $4,", + " // 设置子孩子item,这里传入子孩子控件", + " children: $5,", + ");", + ], + "description": "创建GridView.count" + }, + "创建 Inherited": { + "prefix": "inh", + "body": [ + "class $1 extends InheritedWidget {", + " $1({Key key, this.child}) : super(key: key, child: child);", + "", + " final Widget child;", + "", + " static $1 of(BuildContext context) {", + " return (context.inheritFromWidgetOfExactType($1)as $1);", + " }", + "", + " @override", + " bool updateShouldNotify( $1 oldWidget) {", + " return true;", + " }", + "}", + ], + "description": "创建 Inherited" + }, + "创建基本的ListView": { + "prefix": "lv", + "body": [ + "ListView(", + " children: [", + " //TODO:这里写子控件。", + " ],", + ");", + ], + "description": "创建基本的ListView" + }, + "创建ListView.builder": { + "prefix": "lvb", + "body": [ + "ListView.builder(", + " padding: EdgeInsets.all($value$),", + " itemCount: $itemCount$,", + " itemBuilder: (BuildContext context, int index) {", + " return $widget$;", + " },", + ");", + ], + "description": "创建ListView.builder" + }, + "创建带分割线的ListView": { + "prefix": "lvd", + "body": [ + "ListView(", + " shrinkWrap: true,", + " // 排列方向,Axis.horizontal表示水平,Axis.vertical表示垂直", + " scrollDirection: Axis.vertical,", + " padding: const EdgeInsets.all(20.0),", + " children: [", + " $1,", + " Divider(height: 1.0, color: Colors.grey),", + " $1,", + " Divider(height: 1.0, color: Colors.grey),", + " // todo: 建议控件多的话可以做一个封装", + " ],", + ");", + ], + "description": "创建带分割线的ListView" + }, + "创建RadioListTile,可以单选的item": { + "prefix": "lvr", + "body": [ + " //TODO:以下代码要写在State类里面", + " Widget items() {", + " return Column(", + " // In the build function of that State", + " children: [", + " RadioListTile(", + " title: const Text('$1'),", + " value: SingingCharacter.title1,", + " groupValue: _character,", + " onChanged: (SingingCharacter value) {", + " setState(() {", + " _character = value;", + " });", + " },", + " ),", + " RadioListTile(", + " title: const Text('$2'),", + " value: SingingCharacter.title2,", + " groupValue: _character,", + " onChanged: (SingingCharacter value) {", + " setState(() {", + " _character = value;", + " });", + " },", + " ),", + " ],", + " );", + " }", + "", + " // In the State of a stateful widget:", + " SingingCharacter _character = SingingCharacter.title1;", + "", + "// TODO: 这个类写在State类外面", + "enum SingingCharacter { title1, title2 }", + ], + "description": "创建RadioListTile,可以单选的item" + }, + "创建带有各种ListTile的ListView": { + "prefix": "lvt", + "body": [ + "ListView(", + " children: [", + " // 一个有图片和文字组成的简单列表item", + " ListTile(", + " leading: Icon(Icons.$1),", + " title: Text('$title$'),", + " subtitle: Text('$2'),", + " // 右边的图标", + " trailing: Icon(Icons.$1),", + " onTap: () {", + " //TODO:这里处理点击事件", + " },", + " onLongPress: () {", + " //TODO:这里处理长按事件", + " },", + " selected: true,", + " ),", + " // 单选框列表item", + " CheckboxListTile(", + " value: true,", + " onChanged: ((bool) {", + " //TODO:焦点改变的监听事件写在这里:", + " }),", + " title: Text('$3'),", + " subtitle: Text('$4'),", + " selected: true,", + " activeColor: Colors.teal,", + " ),", + " // 开关列表item", + " SwitchListTile(", + " value: true,", + " onChanged: ((bool) {", + " //TODO:焦点改变的监听事件写在这里:", + " }),", + " title: Text('$5'),", + " subtitle: Text('$5'),", + " //如果subtitle文字过长,将会以三行显示", + " isThreeLine: true,", + " selected: true,", + " activeColor: Colors.teal,", + " //SwitchListTile左边的图标", + " secondary: Icon(Icons.account_circle),", + " ),", + " AboutListTile(", + " icon: Icon(Icons.$6),", + " //公司logo", + " applicationIcon: Image.asset('$7'),", + " //app名称", + " applicationName: '关于我们',", + " //app版本号", + " applicationVersion: 'V1.0.0',", + " //版权信息", + " applicationLegalese: '版权归XX科技有限公司所有...',", + " ),", + " ],", + ");", + ], + "description": "创建带有各种ListTile的ListView" + }, + "创建 StatefulWidget 控件": { + "prefix": "mainstf", + "body": [ + "import 'package:flutter/material.dart';", + "", + "void main(){", + "runApp(MaterialApp(", + " title:'$1',", + " theme: ThemeData(", + " primarySwatch: Colors.blue,", + "),", + "home: $2(),", + "));", + "}", + "", + "class $2 extends StatefulWidget{", + "@override", + "_$2State createState() => _$2State();", + "}", + "", + "class _$2State extends State<$2>{", + "@override", + "Widget build(BuildContext context){", + "return Scaffold(", + "appBar: AppBar(", + "title: Text('$1'),", + "),", + ");", + "}", + "}", + ], + "description": "创建 StatefulWidget 控件" + }, + "创建 StatelessWidget 控件": { + "prefix": "mainstl", + "body": [ + "import 'package:flutter/material.dart';", + "", + "void main(){", + "runApp(MaterialApp(", + " title:'$1',", + " theme: ThemeData(", + " primarySwatch: Colors.blue,", + "),", + "home: $2(),", + "));", + "}", + "", + "class $2 extends StatelessWidget{", + "@override", + "Widget build(BuildContext context){", + "return Scaffold(", + "appBar: AppBar(", + "title: Text('$1'),", + "),", + ");", + "}", + "}", + ], + "description": "创建 StatelessWidget 控件" + }, + "创建方法": { + "prefix": "me", + "body": [ + "void $1(){", + " //TODO", + "}", + ], + "description": "创建方法" + }, + "创建私有方法": { + "prefix": "mep", + "body": [ + "void _$1(){", + " //TODO", + "}", + ], + "description": "创建私有方法" + }, + "创建Row": { + "prefix": "row", + "body": [ + "Row(", + " children: [],", + "),", + ], + "description": "创建Row" + }, + "创建SizedBox": { + "prefix": "sb", + "body": [ + "SizedBox(", + " width: $1,", + " height: $2, ", + " child: $3,", + ");", + ], + "description": "创建SizedBox" + }, + "创建SingleChildScrollView": { + "prefix": "ssv", + "body": [ + "SingleChildScrollView(", + " scrollDirection: Axis.vertical,", + " padding: EdgeInsets.all($1),", + " controller: $2,", + " child: $3,", + ");", + ], + "description": "创建SingleChildScrollView" + }, + "创建Stateful(带有 AnimationController)": { + "prefix": "stanim", + "body": [ + "class $1 extends StatefulWidget {", + " @override", + " _$1State createState() => _$1State();", + "}", + "", + "class _$1State extends State<$1> with SingleTickerProviderStateMixin {", + " AnimationController _controller;", + "", + " @override", + " void initState() {", + " _controller = AnimationController(vsync: this);", + " super.initState();", + " }", + "", + " @override", + " void dispose() {", + " _controller.dispose();", + " super.dispose();", + " }", + " ", + " @override", + " Widget build(BuildContext context) {", + " return Container($2);", + " }", + "}", + ], + "description": "创建Stateful(带有 AnimationController)" + }, + "创建完整的StatefulWidget,包含生命周期相关方法。": { + "prefix": "stf", + "body": [ + "class $1 extends StatefulWidget {", + " @override", + " $1State createState() => $1State();", + "}", + "", + "class $1State extends State<$1> {", + " @override", + " Widget build(BuildContext context) {", + " return Scaffold(", + " appBar: AppBar(", + " title: Text('$2'),", + " ),", + " );", + " }", + " @override", + " void initState() {", + " // TODO: implement initState", + " super.initState();", + " }", + " ", + " @override", + " void dispose() {", + " // TODO: implement dispose", + " super.dispose();", + " }", + " ", + " @override", + " void didUpdateWidget($1 oldWidget) {", + " // TODO: implement didUpdateWidget", + " super.didUpdateWidget(oldWidget);", + " }", + " ", + " @override", + " void didChangeDependencies() {", + " // TODO: implement didChangeDependencies", + " super.didChangeDependencies();", + " }", + "}", + ], + "description": "创建完整的StatefulWidget,包含生命周期相关方法。" + }, + "创建StatelessWidget": { + "prefix": "stl", + "body": [ + "class $1 extends StatelessWidget {", + " @override", + " Widget build(BuildContext context) {", + " return Scaffold(", + " appBar: AppBar(", + " title: Text('$2'),", + " ),", + " );", + " }", + "}", + ], + "description": "创建StatelessWidget" + }, + + "创建CustomScrollView": { + "prefix": "svc", + "body": [ + "CustomScrollView(", + " slivers: [", + " //TODO", + " ],", + "),", + ], + "description": "创建CustomScrollView" + }, + + "创建一个标准的Text": { + "prefix": "te", + "body": [ + "Text('$1',", + " style: TextStyle(", + " color: Colors.$2, ", + " fontWeight: FontWeight.$3, ", + " fontSize: $4,", + " ),", + " textAlign: TextAlign.$5,", + " textDirection: TextDirection.$6,", + " textScaleFactor: $7,", + " overflow: TextOverflow.$8,", + " locale: Localizations.localeOf(context),", + " maxLines: $9,", + ");", + ], + "description": "创建一个标准的Text" + }, + +} \ No newline at end of file diff --git a/code_plugins/no_new_keywords/settings.jar b/code_plugins/no_new_keywords/settings.jar new file mode 100644 index 0000000..69cb546 Binary files /dev/null and b/code_plugins/no_new_keywords/settings.jar differ diff --git a/code_plugins/readme.md b/code_plugins/readme.md index 050026c..e5e83c3 100644 --- a/code_plugins/readme.md +++ b/code_plugins/readme.md @@ -11,7 +11,6 @@ * 1.Do not make any changes to the settings.jar file, otherwise please re-download the settings.jar flie. * 2.After importing, if the shortcut is not working, please check whether the code completions are correct in Android Studio or Intellij IDEA. - --- ### 2.Set the fuzzy match: @@ -33,8 +32,8 @@ Click menu bar `File → Settings → Editor → General → Code Completion → > Import into Android Studio or Intellij IDEA -First open github [https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/code_plugins/settings.jar](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/code_plugins/settings.jar) and download the settings.jar file. The jar flie can be placed in any English file path. -Then, click the menu bar `File → Import Settings`, then find the `Settings.jar` that you had downloaded and import it. +First open github [https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/code_plugins](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/code_plugins) and download the `settings.jar` file. The jar flie can be placed in any English file path. +Then, click the menu bar `File → Import Settings`, then find the `settings.jar` that you had downloaded and import it. ![](https://upload-images.jianshu.io/upload_images/6098829-450d5f8e17341ba7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/270/format/webp) @@ -42,9 +41,13 @@ Then select the `live template` and `live template (schemes)` and click the `OK` ![](https://upload-images.jianshu.io/upload_images/6098829-5a16c2468a36d9d8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/541/format/webp) +* **Tips: If you don't want to use the keywords `new`, you should download the [no_new_keywords/settings.jar](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/code_plugins/no_new_keywords/settings.jar) file, otherwise you should download the [have_new_keywords/settings.jar](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/code_plugins/have_new_keywords/settings.jar) file.** + > Import into VSCode -For VSCode users, download the [https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/code_plugins/dart.json](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/code_plugins/dart.json) file and copy it to `C:\ Users\ Administrator \ AppData \ Roaming \ Code \ User \ Snippets \ directory (user is the username in the computer)`. If the file `dart.json` already exists, please replace it. +For VSCode users, download the `dart.json` file and copy it to `C:\ Users\ Administrator \ AppData \ Roaming \ Code \ User \ Snippets \ directory (user is the username in the computer)`. If the file `dart.json` already exists, please replace it. + +* **Tips: If you don't want to use the keywords `new`, you should download the [no_new_keywords/dart.json](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/code_plugins/no_new_keywords/dart.json) file, otherwise you should download the [have_new_keywords/dart.json](https://github.com/AweiLoveAndroid/Flutter-learning/tree/master/code_plugins/have_new_keywords/dart.json) file.** --- diff --git a/code_plugins/settings.jar b/code_plugins/settings.jar deleted file mode 100644 index 4fad11a..0000000 Binary files a/code_plugins/settings.jar and /dev/null differ diff --git a/projects/dart_demo/lib/ConvertNumberToChineseMoneyWords.dart b/projects/dart_demo/lib/ConvertNumberToChineseMoneyWords.dart new file mode 100644 index 0000000..ae198b7 --- /dev/null +++ b/projects/dart_demo/lib/ConvertNumberToChineseMoneyWords.dart @@ -0,0 +1,178 @@ +// 测试一下 把数字转成中文金额大写 +void main() { + // 输出结果: + // 转换前数字: 45.12 + // 转换后的中文大写: 肆拾伍元壹角贰分 + // + // 转换前数字: 97953164651665.123 + // 转换后的中文大写: 玖拾柒万玖仟伍佰叁拾壹亿陆仟肆佰陆拾伍万壹仟陆佰陆拾伍元壹角贰分叁厘 + // + // 转换前数字: 25000 + // 转换后的中文大写: 贰万伍仟元 + // + // 转换前数字: 363,5 + // 转换后的中文大写: 叁仟陆佰叁拾伍元 + + String number = "45.12"; + ConvertNumberToChineseMoneyWords numbers = + new ConvertNumberToChineseMoneyWords(); + print("转换前数字: " + number + " ,转换后的中文大写: " + numbers.toChinese(number) + "\n"); + number = "97953164651665.123"; + print("转换前数字: " + number + " ,转换后的中文大写: " + numbers.toChinese(number) + "\n"); + number = "25000"; + print("转换前数字: " + number + " ,转换后的中文大写: " + numbers.toChinese(number) + "\n"); + number = "363,5"; + print("转换前数字: " + number + " ,转换后的中文大写: " + numbers.toChinese(number) + "\n"); +} + + +////////////////////////////////////////////////////////////////////////////////// +///////// +///////// 以下才是工具类的完整内容 +//////// +////////////////////////////////////////////////////////////////////////////////// + + +/* + * 把数字转换成中文金额大写工具类 + */ +class ConvertNumberToChineseMoneyWords { + // 大写数字 + List NUMBERS = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]; + + // 整数部分的单位 + List IUNIT = [ + "元", + "拾", + "佰", + "仟", + "万", + "拾", + "佰", + "仟", + "亿", + "拾", + "佰", + "仟", + "万", + "拾", + "佰", + "仟" + ]; + + // 小数部分的单位 + List DUNIT = ["角", "分", "厘"]; + + //转成中文的大写金额 + String toChinese(String str) { + if (str == "0" || str == "0.00") { + return "零元"; + } + // 去掉"," + str = str.replaceAll(",", ""); + // 整数部分数字 + String integerStr; + // 小数部分数字 + String decimalStr; + + // 初始化:分离整数部分和小数部分 + if (str.indexOf(".") > 0) { + integerStr = str.substring(0, str.indexOf(".")); + decimalStr = str.substring(str.indexOf(".") + 1); + } else if (str.indexOf(".") == 0) { + integerStr = ""; + decimalStr = str.substring(1); + } else { + integerStr = str; + decimalStr = ""; + } + + // 超出计算能力,直接返回 + if (integerStr.length > IUNIT.length) { + print(str + ":超出计算能力"); + return str; + } + + // 整数部分数字 + var integers = toIntArray(integerStr); + // 设置万单位 + bool isWan = isWanYuan(integerStr); + // 小数部分数字 + var decimals = toIntArray(decimalStr); + // 返回最终的大写金额 + return getChineseInteger(integers, isWan) + getChineseDecimal(decimals); + } + + // 将字符串转为int数组 + static List toIntArray(String number) { + List array = []; + if (array.length > number.length) { + throw new Exception("数组越界异常"); + } else { + for (int i = 0; i < number.length; i++) { + array.insert(i, int.parse(number.substring(i, i + 1))); + } + return array; + } + } + + // 判断当前整数部分是否已经是达到【万】 + static bool isWanYuan(String integerStr) { + int length = integerStr.length; + if (length > 4) { + String subInteger = ""; + if (length > 8) { + subInteger = integerStr.substring(length - 8, length - 4); + } else { + subInteger = integerStr.substring(0, length - 4); + } + return int.parse(subInteger) > 0; + } else { + return false; + } + } + + // 将整数部分转为大写的金额 + String getChineseInteger(var integers, bool isWan) { + StringBuffer chineseInteger = new StringBuffer(""); + int length = integers.length; + for (int i = 0; i < length; i++) { + String key = ""; + if (integers[i] == 0) { + // 万(亿) + if ((length - i) == 13) + key = IUNIT[4]; + else if ((length - i) == 9) { + // 亿 + key = IUNIT[8]; + } else if ((length - i) == 5 && isWan) { + // 万 + key = IUNIT[4]; + } else if ((length - i) == 1) { + // 元 + key = IUNIT[0]; + } + if ((length - i) > 1 && integers[i + 1] != 0) { + key += NUMBERS[0]; + } + } + chineseInteger.write(integers[i] == 0 + ? key + : (NUMBERS[integers[i]] + IUNIT[length - i - 1])); + } + return chineseInteger.toString(); + } + + // 将小数部分转为大写的金额 + String getChineseDecimal(var decimals) { + StringBuffer chineseDecimal = new StringBuffer(""); + for (int i = 0; i < decimals.length; i++) { + if (i == 3) { + break; + } + chineseDecimal + .write(decimals[i] == 0 ? "" : (NUMBERS[decimals[i]] + DUNIT[i])); + } + return chineseDecimal.toString(); + } +} diff --git a/projects/flutter-demo/lib/all_samples/router/navigator_encapsulation/navigator_util.dart b/projects/flutter-demo/lib/all_samples/router/navigator_encapsulation/navigator_util.dart new file mode 100644 index 0000000..d867d54 --- /dev/null +++ b/projects/flutter-demo/lib/all_samples/router/navigator_encapsulation/navigator_util.dart @@ -0,0 +1,40 @@ +import 'dart:collection'; + +import 'package:flutter/material.dart'; + + + +class RouteManager{ + + BuildContext context; + + // 管理路由的map + Map routeManagerMap = {}; + + Map routeMap = {}; + + // 构造函数 + RouteManager(this.context); + + void pushNamed(String routeName){ + Navigator.of(context).pushNamed(routeName); + } + + // key是 发送路由的标记 Value是要跳转的页面 + putRoutesMap(Map map){ + routeMap = map; + } + + _putRoutes(){ + routeMap.forEach((routeName, targetPage){ + routeManagerMap[routeName] = (BuildContext context) => targetPage; + }); + } + + + Map getRoutes(){ + return routeManagerMap; + } + + +} diff --git a/projects/flutter-demo/lib/all_samples/router/navigator_encapsulation/test_navigator.dart b/projects/flutter-demo/lib/all_samples/router/navigator_encapsulation/test_navigator.dart new file mode 100644 index 0000000..dba9591 --- /dev/null +++ b/projects/flutter-demo/lib/all_samples/router/navigator_encapsulation/test_navigator.dart @@ -0,0 +1,136 @@ +import 'package:flutter/material.dart'; +import 'navigator_util.dart'; + +void main() => runApp(MyApp()); + + + + +RouteManager manager; +void data(BuildContext context){ + manager = new RouteManager(context); + + Map routes = { + '/data2':Page2(), + '/data3':Page3(), + '/data4':Page4(), + }; + manager.putRoutesMap(routes); +} + + +RouteManager getData(){ + return manager; +} + + +class MyApp extends StatelessWidget { + + + @override + Widget build(BuildContext context) { + + data(context); + + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: MyHomePage(title: 'Flutter Demo Home Page'), + // 让路由管理更方便一些 + routes: getData().getRoutes(), + ); + } +} + +class MyHomePage extends StatefulWidget { + MyHomePage({Key key, this.title}) : super(key: key); + + final String title; + + @override + _MyHomePageState createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.title), + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + RaisedButton( + onPressed: (){ + //Navigator.of(context).pushNamed('/data2'); + getData().pushNamed('/data2'); + }, + child: Text('打开Page2'), + ), + RaisedButton( + onPressed: (){ + //Navigator.of(context).pushNamed('/data3'); + getData().pushNamed('/data3'); + }, + child: Text('打开Page3'), + ), + RaisedButton( + onPressed: (){ + //Navigator.of(context).pushNamed('/data4'); + getData().pushNamed('/data4'); + }, + child: Text('打开Page4'), + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: (){}, + tooltip: 'Increment', + child: Icon(Icons.add), + ), + ); + } +} + + +class Page2 extends StatefulWidget { + @override + _Page2State createState() => _Page2State(); +} + +class _Page2State extends State { + @override + Widget build(BuildContext context) { + return Text('hello'); + } +} + +class Page3 extends StatefulWidget { + @override + _Page3State createState() => _Page3State(); +} + +class _Page3State extends State { + @override + Widget build(BuildContext context) { + return Text('hello'); + } +} + +class Page4 extends StatefulWidget { + @override + _Page4State createState() => _Page4State(); +} + +class _Page4State extends State { + @override + Widget build(BuildContext context) { + return Text('hello'); + } +} \ No newline at end of file diff --git a/projects/flutter-demo/lib/color_test.dart b/projects/flutter-demo/lib/color_test.dart new file mode 100644 index 0000000..69a52c9 --- /dev/null +++ b/projects/flutter-demo/lib/color_test.dart @@ -0,0 +1,164 @@ +import 'dart:ui'; + +void main() { + test(); +} + +/// Color 类的所有 Api 完整使用示例 +void test() { + // 方式1:使用16进制颜色值 + // #FFB5B5 粉红色 255 181 181 + Color color = new Color(0xFFB5B5); + int red = color.red; + int green = color.green; + int blue = color.blue; + print("color: " + + " red: " + + red.toString() + + " green: " + + green.toString() + + " blue: " + + blue.toString()); // red: 255 green: 181 blue: 181 + + // 前两位为透明度:不透明度(00是完全透明,FF是完全不透明) + Color color1 = new Color(0xFFFFB5B5); + int alpha1 = color1.alpha; + int red1 = color1.red; + int green1 = color1.green; + int blue1 = color1.blue; + print("color1: " + + " alpha: " + + alpha1.toString() + + " red: " + + red1.toString() + + " green: " + + green1.toString() + + " blue: " + + blue1.toString()); // alpha: 255 red: 255 green: 181 blue: 181 + + // 方式2: 参数4为:不透明度(0是完全透明,255是完全不透明) + Color color2 = Color.fromARGB(255, 255, 181, 181); + int alpha2 = color2.alpha; + int red2 = color2.red; + int green2 = color2.green; + int blue2 = color2.blue; + print("color2: " + + " alpha: " + + alpha1.toString() + + " red: " + + red2.toString() + + " green: " + + green2.toString() + + " blue: " + + blue2.toString()); // alpha: 255 red: 255 green: 181 blue: 181 + + // 方式3: 参数4为:不透明度(0.0是完全透明,1.0是完全不透明) + Color color3 = Color.fromRGBO(255, 181, 181, 1.0); + int red3 = color3.red; + int green3 = color3.green; + int blue3 = color3.blue; + double opacity3 = color3.opacity; + print("color3: " + + " red: " + + red3.toString() + + " green: " + + green3.toString() + + " blue: " + + blue3.toString() + + " " + + opacity3.toString()); // red: 255 green: 181 blue: 181 1.0 + + // 方式4: 参数3:从0.0到1.0 + // 算法:a + (b - a) * t + // 从红色到蓝色,线性插值系数为0.5 + Color color4 = Color.lerp(new Color(0x88FF0000), new Color(0x880000FF), 0.5); + int alpha4 = color4.alpha; + int red4 = color4.red; + int green4 = color4.green; + int blue4 = color4.blue; + double opacity4 = color4.opacity; + print("color4: " + + " alpha: " + + alpha4.toString() + + " red: " + + red4.toString() + + " green: " + + green4.toString() + + " blue: " + + blue4.toString() + + " opacity:" + + opacity4 + .toString()); // alpha: 136 red: 127 green: 0 blue: 127 opacity:0.5333333333333333 + + // 方式5:把前景色作为透明色盖在背景色上面 + Color color5 = Color.alphaBlend(new Color(0x88FF0000), new Color(0x880000FF)); + int alpha5 = color5.alpha; + int red5 = color5.red; + int green5 = color5.green; + int blue5 = color5.blue; + double opacity5 = color4.opacity; + print("color5: " + + " alpha: " + + alpha5.toString() + + " red: " + + red5.toString() + + " green: " + + green5.toString() + + " blue: " + + blue5.toString() + + " opacity:" + + opacity5 + .toString()); // alpha: 199 red: 174 green: 0 blue: 80 opacity:0.5333333333333333 + + // 颜色的亮度 0是最暗,1是最亮 + Color color6 = new Color(0x88FF0000); + double computeLuminance = color.computeLuminance(); + print("color6: " + computeLuminance.toString()); // 0.5764394295278801 + + // 替换掉原来颜色中的 alpha 值 + color6.withAlpha(100); + // 替换掉原来颜色中的 red 值 + color6.withRed(100); + // 替换掉原来颜色中的 green 值 + color6.withGreen(100); + // 替换掉原来颜色中的 blue 值 + color6.withBlue(100); + // 替换掉原来颜色中的 opacity 值 + color6.withOpacity(0.8); + + + // 测试 fromRGBA 的用法 + Color rgbaColor = fromRGBA(255, 181, 181, 255); + int red7 = rgbaColor.red; + int green7 = rgbaColor.green; + int blue7 = rgbaColor.blue; + int alpha7 = rgbaColor.alpha; + print("rgbaColor: " + + " red: " + + red7.toString() + + " green: " + + green7.toString() + + " blue: " + + blue7.toString() + + " alpha: " + + alpha7.toString()); // red: 255 green: 181 blue: 181 alpha: 255 +} + +// 设置把原有的ARGB方式转换成 RGBA,更符合某一些人的使用习惯 +Color fromRGBA(int red, int green, int blue, int alpha){ + // 方式2: 参数4为:不透明度(0是完全透明,255是完全不透明) + Color color2 = Color.fromARGB(255, 255, 181, 181); + int alpha2 = color2.alpha; + int red2 = color2.red; + int green2 = color2.green; + int blue2 = color2.blue; + print("color2: " + + " alpha: " + + alpha1.toString() + + " red: " + + red2.toString() + + " green: " + + green2.toString() + + " blue: " + + blue2.toString()); // alpha: 255 red: 255 green: 181 blue: 181 +} diff --git a/projects/flutter_adobe_logo/flutter_adobe_logo.dart b/projects/flutter_adobe_logo/flutter_adobe_logo.dart new file mode 100644 index 0000000..134ee02 --- /dev/null +++ b/projects/flutter_adobe_logo/flutter_adobe_logo.dart @@ -0,0 +1,272 @@ +import 'package:flutter/material.dart'; + +void main() => runApp(MyApp()); + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter 打造 Adobe 全家桶', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: MyHomePage(title: 'Flutter 打造 Adobe 全家桶'), + ); + } +} + +class MyHomePage extends StatefulWidget { + MyHomePage({Key key, this.title}) : super(key: key); + + final String title; + + @override + _MyHomePageState createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + + @override + void initState() { + super.initState(); + } + + Widget buildItems( + String text, Color textColor, Color borderColor, Color bgColor, + {bool showRectRadis = false}) { + return Padding( + padding: EdgeInsets.all(15), + child: Container( + decoration: BoxDecoration( + color: bgColor, + border: Border.all(color: borderColor, width: 5), + borderRadius: showRectRadis == true + ? BorderRadius.circular(15) + : BorderRadius.circular(0), + ), + child: Center( + child: Text( + text, + style: TextStyle( + fontSize: 35.0, + color: textColor, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.grey[300], + appBar: AppBar( + title: Text(widget.title), + ), + body: GridView.count( + crossAxisCount: 4, + crossAxisSpacing: 5.0, + mainAxisSpacing: 5.0, + children: [ + + buildItems( + 'Ps', + const Color(0XFF00C8FD), + const Color(0XFF00C8FD), + const Color(0XFF001C25), + showRectRadis: true, + ), + buildItems( + 'Ai', + const Color(0XFFFF7C00), + const Color(0XFFFF7C00), + const Color(0XFF271403), + ), + buildItems( + 'Id', + const Color(0XFFDA007A), + const Color(0XFFDA007A), + const Color(0XFF412E34), + ), + buildItems( + 'Xd', + const Color(0XFFFE2BC0), + const Color(0XFFFE2BC0), + const Color(0XFF2D001D), + showRectRadis: true, + ), + buildItems( + 'Dw', + const Color(0XFF35F900), + const Color(0XFF35F900), + const Color(0XFF072600), + ), + buildItems( + 'Bē', + const Color(0XFFFFFFFF), + const Color(0XFFFFFFFF), + const Color(0XFF02ABF4), + ), + buildItems( + 'Br', + const Color(0XFFFB9300), + const Color(0XFFFB9300), + const Color(0XFF261C00), + ), + buildItems( + 'Ch', + const Color(0XFFDA91FF), + const Color(0XFFDA91FF), + const Color(0XFF26003B), + ), + buildItems( + 'Ic', + const Color(0XFFFF5FF8), + const Color(0XFFFF5FF8), + const Color(0XFF2B0028), + ), + buildItems( + 'Lr', + const Color(0XFF3CEEED), + const Color(0XFF3CEEED), + const Color(0XFF012225), + ), + buildItems( + 'Pr', + const Color(0XFFEA77FE), + const Color(0XFFEA77FE), + const Color(0XFF290034), + ), + buildItems( + 'Ae', + const Color(0XFFD190FE), + const Color(0XFFD190FE), + const Color(0XFF1F003F), + ), + buildItems( + 'Au', + const Color(0XFF01E4BA), + const Color(0XFF01E4BA), + const Color(0XFF00251E), + ), + buildItems( + 'Pl', + const Color(0XFF00DBFF), + const Color(0XFF00DBFF), + const Color(0XFF002026), + ), + buildItems( + 'An', + const Color(0XFFFF4A19), + const Color(0XFFFF4A19), + const Color(0XFF260600), + ), + buildItems( + 'Cf', + const Color(0XFFCADBFE), + const Color(0XFFCADBFE), + const Color(0XFF000F34), + ), + buildItems( + 'Cp', + const Color(0XFF00E778), + const Color(0XFF00E778), + const Color(0XFF00120A), + ), + buildItems( + 'Sp', + const Color(0XFFFFF7CC), + const Color(0XFFFFD70D), + const Color(0XFF262002), + showRectRadis: true, + ), + buildItems( + 'Dn', + const Color(0XFFD4FCEF), + const Color(0XFF3CF2A6), + const Color(0XFF00261A), + showRectRadis: true, + ), + buildItems( + 'St', + const Color(0XFFFD4286), + const Color(0XFFFD4286), + const Color(0XFF1F0101), + ), + buildItems( + 'Ru', + const Color(0XFFECD9FF), + const Color(0XFFC993FF), + const Color(0XFF260D40), + showRectRadis: true, + ), + buildItems( + 'Sc', + const Color(0XFFC1B2D2), + const Color(0XFFC1B2D2), + const Color(0XFF302A36), + ), + buildItems( + 'Fb', + const Color(0XFFD1C4C3), + const Color(0XFFD1C4C3), + const Color(0XFF2B2728), + ), + buildItems( + 'Fw', + const Color(0XFFE4EB00), + const Color(0XFFE4EB00), + const Color(0XFF3E3A26), + ), + buildItems( + 'Sg', + const Color(0XFF04F7F6), + const Color(0XFF04F7F6), + const Color(0XFF002726), + ), + buildItems( + 'Fs', + const Color(0XFFF98A00), + const Color(0XFFF98A00), + const Color(0XFF261600), + ), + buildItems( + 'Mu', + const Color(0XFFC1E702), + const Color(0XFFC1E702), + const Color(0XFF1D2304), + ), + buildItems( + 'Fl', + const Color(0XFFF1201B), + const Color(0XFFF1201B), + const Color(0XFF482D29), + ), + buildItems( + 'Ul', + const Color(0XFFF2F7F2), + const Color(0XFF35811F), + const Color(0XFF35811F), + ), + buildItems( + 'PM', + const Color(0XFF434646), + const Color(0XFF969B37), + const Color(0XFF969B37), + ), + buildItems( + 'Sb', + const Color(0XFFF3F3EF), + const Color(0XFF605B3A), + const Color(0XFF605B3A), + showRectRadis: true, + ), + + ], + ), + ); + } + +} \ No newline at end of file diff --git a/projects/flutter_adobe_logo/sample.gif b/projects/flutter_adobe_logo/sample.gif new file mode 100644 index 0000000..899e3d0 Binary files /dev/null and b/projects/flutter_adobe_logo/sample.gif differ diff --git a/projects/hub_demo/hub_demo.dart b/projects/hub_demo/hub_demo.dart new file mode 100644 index 0000000..12d116a --- /dev/null +++ b/projects/hub_demo/hub_demo.dart @@ -0,0 +1,356 @@ +import 'package:flutter/material.dart'; + +void main() { + runApp( + MaterialApp( + title: 'Flutter自定义及自由切换Logo', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: MyApp(), + // 直接使用自定义Logo 使用这个 + // home: MyHomePage(), + ), + ); +} + +class MyApp extends StatefulWidget { + @override + MyAppState createState() => new MyAppState(); +} + +class MyAppState extends State { + Widget showWidgetContents; + bool isChange; + String texts; + + @override + void initState() { + showWidgetContents = Contents().youtube; + isChange = false; + texts = '切换至 PornHub Logo'; + super.initState(); + } + + changeWidget() { + setState(() { + if (isChange == true) { + showWidgetContents = new Contents().pornhub; + texts = '切换至 YouTube Logo'; + isChange = !isChange; + } else { + showWidgetContents = Contents().youtube; + // showWidgetContents = Contents().suning; + texts = '切换至 PornHub Logo'; + isChange = !isChange; + } + }); + return showWidgetContents; + } + + @override + Widget build(BuildContext context) { + return new MyInheritedWidget( + texts: texts, + onTap: changeWidget, + showWidgetContents: showWidgetContents, + isChange: isChange, + child: new MyHomePage(), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key key}) : super(key: key); + + @override + _MyHomePageState createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.grey[400], + appBar: AppBar( + title: Text('Flutter自定义及自由切换Logo'), + ), + body: ListView( + children: [ + // 仿制更多自定义的Logo + // Contents( + // bgColor: Color.fromARGB(255, 4, 141, 87), + // bgWidth: 150, + // bgHeight: 150, + // leftText: 'OPPO', + // leftTextSize: 60, + // leftTextColor: Colors.white, + // rightBgColor: Color.fromARGB(255, 1, 159, 222), + // rightBgBorderRadius: 5, + // rightText: 'vivo', + // rightTextColor: Colors.white, + // ), + // Contents( + // bgColor: Colors.white, + // bgWidth: 150, + // bgHeight: 150, + // leftText: '小米', + // leftTextSize: 80, + // leftTextColor: Colors.black, + // rightBgColor: Color.fromARGB(255, 246, 123, 43), + // rightBgBorderRadius: 5, + // rightText: 'mi', + // rightTextColor: Colors.white, + // ), + // Contents( + // bgColor: Color.fromARGB(255, 2, 104, 188), + // bgWidth: 150, + // bgHeight: 150, + // leftText: 'Suning', + // leftTextSize: 60, + // leftTextColor: Colors.white, + // rightBgColor: Color.fromARGB(255, 2, 104, 188), + // rightBgBorderRadius: 5, + // rightText: '苏宁', + // rightTextColor: Colors.white, + // ), + // Contents( + // bgColor: Color.fromARGB(255, 236, 29, 23), + // bgWidth: 150, + // bgHeight: 150, + // leftText: '高露潔', + // leftTextSize: 40, + // leftTextColor: Colors.white, + // rightBgColor: Color.fromARGB(255, 236, 29, 23), + // rightBgBorderRadius: 5, + // rightText: 'Colgate®', + // rightTextColor: Colors.white, + // ), + // Contents( + // bgColor: Colors.white, + // bgWidth: 150, + // bgHeight: 150, + // leftText: 'Tencent', + // leftTextSize: 50, + // leftTextColor: Color.fromARGB(255, 0, 82, 217), + // rightBgColor: Colors.white, + // rightBgBorderRadius: 5, + // rightText: '腾讯', + // rightTextColor: Color.fromARGB(255, 0, 82, 217), + // ), + // Contents( + // bgColor: Color.fromARGB(255, 199, 21, 33), + // bgWidth: 150, + // bgHeight: 150, + // leftText: 'JD.COM', + // leftTextSize: 50, + // leftTextColor: Color.fromARGB(255, 249, 253, 252), + // rightBgColor: Color.fromARGB(255, 199, 21, 33), + // rightBgBorderRadius: 5, + // rightText: '京东', + // rightTextColor: Color.fromARGB(255, 249, 253, 252), + // ), + // Contents( + // bgColor: Color.fromARGB(255, 255, 69, 18), + // bgWidth: 150, + // bgHeight: 150, + // leftText: 'mobike', + // leftTextSize: 40, + // leftTextColor: Colors.white, + // rightBgColor: Color.fromARGB(255, 255, 69, 18), + // rightBgBorderRadius: 5, + // rightText: '摩拜单车', + // rightTextColor: Colors.white, + // ), + + MyInheritedWidget.of(context).showWidgetContents, + RaisedButton( + onPressed: () { + MyInheritedWidget.of(context).onTap(); + }, + child: Text('${MyInheritedWidget.of(context).texts.toString()}'), + ), + ], + ), + ); + } +} + +// 生成的Logo内容 +class Contents extends StatefulWidget { + Contents( + {Key key, + this.bgColor = Colors.black, + this.bgWidth = 300, + this.bgHeight = 300, + this.leftText = 'Porn', + this.leftTextSize = 30, + this.leftTextColor = Colors.white, + this.rightBgColor = const Color.fromARGB(255, 254, 155, 0), + this.rightBgBorderRadius = 5, + this.rightText = 'Hub', + this.rightTextColor = Colors.black}) + : super(key: key); + + // 全局背景颜色 + Color bgColor; + + // 全局内容宽度 + double bgWidth; + + // 全局内容高度 + double bgHeight; + + // 左侧文字内容 + String leftText; + + // 左侧文字大小 + double leftTextSize; + + // 左侧文字颜色 + Color leftTextColor; + + // 右侧背景颜色 + Color rightBgColor; + + // 右侧边框圆角大小 + double rightBgBorderRadius; + + // 右侧文字内容 + String rightText; + + // 右侧文字颜色 + Color rightTextColor; + + Contents get pornhub => Contents( + bgColor: Colors.black, + bgWidth: 300, + bgHeight: 300, + leftText: 'Porn', + leftTextSize: 60, + leftTextColor: Colors.white, + rightBgColor: Color.fromARGB(255, 254, 155, 0), + rightBgBorderRadius: 5, + rightText: 'Hub', + rightTextColor: Colors.black, + ); + + Contents get youtube => Contents( + bgColor: Color.fromARGB(255, 238, 28, 27), + bgWidth: 300, + bgHeight: 300, + leftText: 'You', + leftTextSize: 60, + leftTextColor: Colors.white, + rightBgColor: Colors.white, + rightBgBorderRadius: 10, + rightText: 'Tube', + rightTextColor: Color.fromARGB(255, 238, 28, 27), + ); + + Contents get suning => Contents( + bgColor: Colors.blue, + bgWidth: 300, + bgHeight: 300, + leftText: 'Su', + leftTextSize: 60, + leftTextColor: Colors.white, + rightBgColor: Colors.blue, + rightBgBorderRadius: 10, + rightText: 'ning', + rightTextColor: Colors.white, + ); + + @override + _ContentsState createState() => _ContentsState(); +} + +// 全局背景颜色、宽度、高度 +// 左侧 文字内容、大小、加粗、文字颜色 +// 右侧 背景颜色 文字内容、文字颜色 +class _ContentsState extends State { + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Container( + margin: EdgeInsets.all(30), + width: widget.bgWidth, + height: widget.bgHeight, + color: widget.bgColor, + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(left: 0, top: 0, right: 5, bottom: 0), + child: Text( + widget.leftText, + style: TextStyle( + fontSize: widget.leftTextSize, + color: widget.leftTextColor, + fontWeight: FontWeight.bold, + ), + ), + ), + Container( + decoration: BoxDecoration( + color: widget.rightBgColor, + border: Border.all( + color: widget.rightBgColor, + width: 8.0, + ), + borderRadius: BorderRadius.circular(widget.rightBgBorderRadius), + ), + padding: EdgeInsets.all(5), + child: Text( + widget.rightText, + style: TextStyle( + fontSize: widget.leftTextSize, + color: widget.rightTextColor, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ); + } +} + +// 核心代码: + +class MyInheritedWidget extends InheritedWidget { + final String texts; + final Function onTap; + final Widget showWidgetContents; + final bool isChange; + + const MyInheritedWidget( + {Key key, + this.texts, + this.onTap, + this.showWidgetContents, + this.isChange, + child}) + : super(key: key, child: child); + + @override + bool updateShouldNotify(MyInheritedWidget oldWidget) { + return oldWidget.showWidgetContents != showWidgetContents || + oldWidget.isChange != isChange || + oldWidget.texts != texts; + } + + static MyInheritedWidget of(BuildContext context) { + return context.inheritFromWidgetOfExactType(MyInheritedWidget); + } +} diff --git a/projects/hub_demo/sample.gif b/projects/hub_demo/sample.gif new file mode 100644 index 0000000..167ecbc Binary files /dev/null and b/projects/hub_demo/sample.gif differ diff --git a/projects/hub_demo/sample2.gif b/projects/hub_demo/sample2.gif new file mode 100644 index 0000000..c71fdef Binary files /dev/null and b/projects/hub_demo/sample2.gif differ diff --git a/projects/readme.md b/projects/readme.md index 11d9c32..a63b0fb 100644 --- a/projects/readme.md +++ b/projects/readme.md @@ -2,8 +2,34 @@ -`flutter_demo` 是flutter使用的相关Demo +#### `flutter_demo` 是flutter使用的相关Demo -`dart_demo` 是 Dart使用的相关Demo +#### `dart_demo` 是 Dart使用的相关Demo -`flutter_white_screen` 是解决Flutter白屏的方案的示例项目,遇到应用启动白屏问题可以参考一下。 \ No newline at end of file +#### `flutter_white_screen` 是解决Flutter白屏的方案的示例项目,遇到应用启动白屏问题可以参考一下。 + +#### `hub_demo`: Flutter仅用100行轻松实现自定义P站和油管的Logo及自由切换Logo功能。 + +> `hub_demo`自由切换Logo功能效果图: + +![](hub_demo/sample.gif) + +> `hub_demo`自定义各种风格的Logo效果图: + +![](hub_demo/sample2.gif) + +> 代码戳这里:[hub_demo/hub_demo.dart](hub_demo/hub_demo.dart) + +> 配套视频请戳这里:[Flutter仅用100行轻松实现自定义P站和油管的Logo及自由切换Logo功能](https://www.bilibili.com/video/av75564707/) + + + +#### `flutter_adobe_logo`: Flutter轻松实现Adobe全家桶Logo列表功能。 + +> `flutter_adobe_logo`效果图: + +![](flutter_adobe_logo/sample.gif) + +> 代码戳这里:[flutter_adobe_logo/flutter_adobe_logo.dart](flutter_adobe_logo/flutter_adobe_logo.dart) + +> 配套视频请戳这里:[Flutter轻松实现Adobe全家桶Logo列表功能](https://www.bilibili.com/video/av75750858/) diff --git "a/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223.md" "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223.md" deleted file mode 100644 index 78fc97d..0000000 --- "a/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223.md" +++ /dev/null @@ -1,438 +0,0 @@ -# Flutter的需要与原生交互的一些常用库 - -**【说明】由于这些库一直在更新,请自己选择合适的稳定版本下载。** -**另外如果发现有问题或者你有更好的库,欢迎留言告诉我。** - - ----- - -## 谷歌官方的针对Dart语言的一些实用性的功能以及扩展的库 -- Quiver - -Quiver是一组针对Dart的实用程序库,它使使用许多Dart库变得更容易、更方便,或者增加了额外的功能。 - -github地址 https://github.com/google/quiver-dart - -使用方式: - -```yaml -dependencies: - quiver: '>=2.0.0 <3.0.0' -``` - ----- - -## 根据pubspec.yaml中设置的目录模板自动向其中添加文件记录的脚本 `asset_generator` - -好多人都说Flutter中的资源引用很头疼,手写很麻烦,最近找到了一个脚本刚好卡呀解决这个问题。 - - **这个脚本的作用:利用`asset_generator`脚本生成r.dart 资源文件,方便在代码中引用资源。** - -github地址: https://github.com/flutter-dev/asset_generator - -使用方式: - -``` -1.下载 asset_generator.dart 脚本文件。 -2.找到自己Flutter的安装目录,将脚本放在Flutter的根目录下。 -``` - -#### :point_right: 另外关于pubspec.yaml文件,它很严格,很多人会写错,多一个或者少一个空格都会报错。刚好我找到了一个在线监测工具https://www.bejson.com/validators/yaml/ 把你的yaml文件复制进去 就可以自动帮你找出错误了。 - ----- - -## 常用开源包: - - -> 网络请求 - -库名|版本号|链接|描述 --|-|-|- -http|0.11.3+16|https://pub.dartlang.org/packages/http|该软件包包含一组高级函数和类,可以轻松使用HTTP资源。它与平台无关,可以在命令行和浏览器上使用。 -dio|0.0.14|https://pub.dartlang.org/packages/dio|Dart的一个强大的Http客户端,支持拦截器、全局配置、FormData、请求取消、文件下载、超时等。 -http_multi_server|2.0.5|https://pub.dartlang.org/packages/http_multi_server|dart:io HttpServer包装器,用于处理来自多个服务器的请求 -jaguar_retrofit|2.8.6|https://pub.dartlang.org/packages/jaguar_retrofit|Dart版本的Retrofit库,用于实现一个HTTP客户端API生成器。(我给它点评:666!思想都是想通的。) - - ----- - -> 类型编解码的库: - -库名|版本号|链接|描述 --|-|-|- -html_unescape|1.0.0|https://pub.dartlang.org/packages/html_unescape|用于解决HTML编码字符串的Dart库。支持所有命名字符引用(如` `),小数字符引用(如`á`)和十六进制字符引用(如`ã`)。 -gbk2utf8||https://github.com/jzoom/gbk2utf8|官方的http还不能支持中文gbk的解析,这个项目就是为了解决gbk转成utf-8编码的。 - - ----- - -> 序列化 - -* 手动序列化: - -使用 `dart:convert` 的内置解码器。包括传入 JSON 原始字符串给 JSON.decode() 方法,然后从 Map 中查询你需要的数据。 - -* 自动序列化: - -库名|版本号|链接|描述 --|-|-|- -json_serializable|0.5.7|https://pub.dartlang.org/packages/json_serializable| -built_value|5.5.1|https://pub.dartlang.org/packages/built_value|runtime依赖项 -built_value_generator|5.5.1|https://pub.dartlang.org/packages/built_value_generator|dev依赖项 -built_value_test|5.5.1|https://pub.dartlang.org/packages/built_value_test|test依赖项 - - ----- - -> json解析 - -库名|版本号|链接|描述 --|-|-|- -codable |1.0.0-beta.2|https://pub.dartlang.org/packages/codable|用于将动态结构化数据(JSON,YAML)转换为Dart类型的库。 - -* https://github.com/javiercbk/json_to_dart 根据json生成Dart实体类 -* https://github.com/debuggerx01/JSONFormat4Flutter 这是一个AS的辅助插件,将JSONObject格式的String解析成Dart的实体类 - - - -* Dson 0.13.2 下载地址 https://pub.dartlang.org/packages/dson -描述:Dson的github地址 https://github.com/drails-dart/dson -DSON是一个将Dart对象转换为JSON的库。(用于web)这个库是Dartson的一个分支,但又有不同。 -* Dartson是一个Dart库,可用于将Dart对象转换为JSON字符串。 -https://github.com/eredo/dartson (用于web) - -* **几个Json库的比较:[https://github.com/drails-dart/dart-serialise](https://github.com/drails-dart/dart-serialise)** - -|方式| 大小 (js) |序列化 (dart) |反序列化 (dart) |序列化 (js) |反序列化 (js)| -|----|----|----|----|----|----| -|json_serializable| 80 KB |9.09 ms |6.61 ms |8.23 ms |8.12 ms| -|Serializable |79 KB |6.1 ms |6.92 ms |4.37 ms| |8.38 ms| -|DSON |94 KB|12.72 ms |11.15 ms |16.64 ms |17.94 ms| -|Dartson |86 KB |9.61 ms |6.81 ms |8.58 ms |7.01 ms| -|Manual| 86 KB |8.29 ms| 5.78 ms |10.7 ms |7.9 ms| -|Interop |70 KB |61.55 ms |14.96 ms |2.49 ms |2.93 ms| -|Jaguar_serializer| 88 KB |8.57 ms |6.58 ms |10.31 ms |8.59 ms| -|Jackson (Groovy) || 496 ms| 252 ms |n/a| n/a| - - ----- - -**编解码、加密解密有关的库** - -库名|版本号|链接|描述 --|-|-|- -ninja |1.0.0|https://pub.dartlang.org/packages/ninja|在Dart的Converter和Codec接口上完善的AES以及RSA加密解密算法的库。 -archive |2.0.0|https://pub.dartlang.org/packages/archive|为各种存档和压缩格式提供编码器和解码器,如zip,tar,bzip2,gzip和zlib。(不知道移动端能否用得到,文档说服务端和web端可以用。) - - ----- - -> 系统平台有关的库: - -库名|版本号|链接|描述 --|-|-|- -**分享(官方的库)**||| -share |0.5.2|https://pub.dartlang.org/packages/share|用于通过平台共享UI共享内容,使用Android上的ACTION_SEND意图和iOS上的UIActivityViewController。 -**获取本地文件**||| -path_provider|0.4.1|https://pub.dartlang.org/packages/path_provider|用于获取Android和iOS文件系统上的常用位置,例如temp和app数据目录。 -**读写sp文件**||| -shared_preferences|0.4.2|https://pub.dartlang.org/packages/shared_preferences|用于读写简单键值对的Flutter插件。包装iOS上的NSUserDefaults和Android上的SharedPreferences。 -**网络状态有关**||| -connectivity|0.3.1|https://pub.dartlang.org/packages/connectivity|用于发现Android和iOS上的网络状态(WiFi和移动/蜂窝)连接。 -**设备信息**||| -device_info|0.2.1|https://pub.dartlang.org/packages/device_info|提供有关设备(品牌,型号等)的详细信息,以及应用程序正在运行的Android或iOS版本。 -**蓝牙**||| -flutter_blue|0.3.3|https://pub.dartlang.org/packages/flutter_blue|这是跨平台的蓝牙sdk. -flutter_ble_lib|1.0.0|https://pub.dartlang.org/packages/flutter_ble_lib|这是一个支持蓝牙连接的flutter库。它里面使用RxAndroidBle和RxBluetoothKit作为本地库。 - ----- - -> 国际化和本地化: - -库名|版本号|链接|描述 --|-|-|- -intl|0.15.6|https://pub.dartlang.org/packages/intl|这个包提供国际化和本地化功能,包括消息翻译、复数和性别、日期/数字格式和解析以及双向文本。 - ----- - -> 图片加载和缓存 - -使用`Image.network`,或者使用下面这个库: - -库名|版本号|链接|描述 --|-|-|- -cached_network_image|0.4.1+1|https://pub.dartlang.org/packages/cached_network_image|Flutter库来加载和缓存网络图像。也可以与占位符和错误小部件一起使用。 - ----- - -> 数据存储、缓存有关的库 - - -库名|版本号|链接|描述 --|-|-|- -sqflite|sqflite0.10.0|https://pub.dartlang.org/packages/sqflite|SQLite的Flutter插件,一个自包含的高可靠性嵌入式SQL数据库引擎。 -file_cache|0.0.1|https://pub.dartlang.org/packages/file_cache|为flutter package项目缓存Json,Buffer,FileCacheImage。 - ----- - -> UI库: - -库名|版本号|链接|描述 --|-|-|- -font_awesome_flutter|7.0.0|https://pub.dartlang.org/packages/font_awesome_flutter|图标字体的一个库 -fluttertoast|2.0.3|https://pub.dartlang.org/packages/fluttertoast|用于Android和ios的toast库。 -image_picker|0.4.5|https://pub.dartlang.org/packages/image_picker|用于从Android和iOS图像库中选择图像,并使用相机拍摄新照片。 -camera|0.2.9+1|https://pub.dartlang.org/packages/camera|谷歌官方的相机库。用于在Android和iOS上获取有关和控制相机的信息。支持预览相机馈送和捕捉图像,可以用来视频录制,新增对拍照的方向的处理。 - - -**图标有关的开源库 ↓** - -库名|版本号|链接|描述 --|-|-|- -cupertino_icons|0.1.2|https://pub.dartlang.org/packages/cupertino_icons|Cupertino的图标组件库 -flutter_launcher_icons |0.6.0|https://pub.dartlang.org/packages/flutter_launcher_icons 或者github地址https://github.com/fluttercommunity/flutter_launcher_icons|一个命令行工具,简化了更新Flutter应用程序启动图标的任务。 完全灵活,您可以选择要更新启动图标的平台,如果需要,可以选择保留旧的启动图标,以防将来某个时候还原旧图标。 - - -**富文本 ↓** - -库名|版本号|链接|描述 --|-|-|- -flutter_html_view|0.5.2|https://pub.dartlang.org/packages/flutter_html_view|Flutter没有默认的支持来显示html,所以需要三方的包来显示。这个包可以将html呈现给原生的Widget。(目前支持的标签比较少) -flutter_html_textview|0.2.6|https://pub.dartlang.org/packages/flutter_html_textview|将html呈现为一个Widget,在textview中呈现html。 - -**MarkDown ↓** - -库名|版本号|链接|描述 --|-|-|- -flutter_markdown|0.1.3|https://github.com/flutter/flutter_markdown|官方的MarkDown库,它支持原始MarkDown格式,但没有内联Html格式。 -markdown|2.0.0|https://pub.dartlang.org/packages/markdown|用Dart编写的便携式Markdown库。它可以在客户端和服务器上将Markdown解析为HTML。 -html2md|0.1.7|https://pub.dartlang.org/packages/html2md|将html转换为Dart中的MarkDown. - -**动画 ↓** - -库名|版本号|链接|描述 --|-|-|- -flutter_villains|1.0.1|https://pub.dartlang.org/packages/flutter_villains|页面切换动画的一个库,简化动画操作,你只需要管理好UI就可以了。 - -**针对Android和ios平台的UI适配库 ↓** - -库名|版本号|链接|描述 --|-|-|- -platform_aware|0.4.0|https://pub.dartlang.org/packages/platform_aware|为自动适应当前平台而包装的Flutter组件,不需要对iOS和Android进行代码更改。所有小部件都依赖于Theme.of(context).platform来确定当前活动平台的平台。你可以使用Flutter Inspector动态地更改平台。 -native_widgets |0.0.3| https://pub.dartlang.org/packages/native_widgets|为避免重复代码,只编写一次代码就可以支持两个平台并自动根据平台自动使用对应风格组件,Android将使用材料设计,iOS将使用Cupertino风格的小部件。 - -**日历库(主要是用于显示和操作日历)** - -库名|版本号|链接|描述 --|-|-|- -flutter_calendar |0.0.4|https://pub.dartlang.org/packages/flutter_calendar|适用于Flutter的日历小组件。 -calendarro| 0.0.1|https://pub.dartlang.org/packages/calendarro|Flutter的日历组件库。 这个库提供了多种自定义组件的方法。 - - - -**日期,时间,日期时间,icon,自定义数据的选择器(很全面) ↓** - -库名|版本号|链接|描述 --|-|-|- -flutter_picker |0.0.3 |https://pub.dartlang.org/packages/flutter_picker |一个日期,时间,日期时间,icon,自定义数据的选择器,可以居中弹窗,也可以在底部弹出。(目前来看是最全面的一个选择器控件。该插件支持ios和android平台,使用的是ios的风格的UI效果。) - -**图片选择的库 ↓** - -库名|版本号|链接|描述 --|-|-|- -image_picker |0.4.5 | https://pub.dartlang.org/packages/image_picker |适用于iOS和Android的Flutter插件,用于从图像库中拾取图像,并使用相机拍摄新照片。(功能正在完善中) -flutter_multiple_image_picker |0.0.1 | https://pub.dartlang.org/packages/flutter_multiple_image_picker|一个新的Flutter插件,用于从图库中选择多个图像。 - -**联系人选择的库 ↓** - -库名|版本号|链接|描述 --|-|-|- -contact_picker |0.0.2| https://pub.dartlang.org/packages/contact_picker|使用此插件,Flutter应用程序可以地址簿中选择联系人,并将联系人信息返回给应用程序,并且不需要用户的任何特殊权限。目前该插件仅支持选择电话号码。 - -**颜色选择的库 ↓** - -库名|版本号|链接|描述 --|-|-|- -flutter_color_picker |0.0.1 | https://pub.dartlang.org/packages/flutter_color_picker| 一个简单的颜色选择器,类似于安卓的selector的功能,可以在点击控件时,给控件设置选择器效果。 -material_color_picker| 0.0.1| https://pub.dartlang.org/packages/material_color_picker(这个是旧版本)|这个是Flutter的颜色选择器,基于Google Docs颜色选择器。这个用于选择颜色,你想用哪一个颜色,可以弹窗自由选择。 -material_pickers| 0.0.2| https://pub.dartlang.org/packages/material_pickers(这个是新版本)|这个是Flutter的颜色选择器,基于Google Docs颜色选择器。这个用于选择颜色,你想用哪一个颜色,可以弹窗自由选择。 -flutter_colorpicker| 0.0.5| https://pub.dartlang.org/packages/flutter_colorpicker|这是一个HSV的颜色选择器 - -**轮播图有关的库(以及Tab PagerView有关的库) ↓** - -库名|版本号|链接|描述 --|-|-|- -flutter_swiper |1.0.4|https://pub.dartlang.org/packages/flutter_swiper 对应的github地址https://github.com/best-flutter/flutter_swiper |Flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配. -infinity_page_view |1.0.0|https://pub.dartlang.org/packages/infinity_page_view|Flutter无限页面视图。 -carousel|0.1.0|https://pub.dartlang.org/packages/carousel|一个简单的轮播组件(待完善)。 -page_transformer |0.0.1|https://pub.dartlang.org/packages/page_transformer|用于在Flutter中创建漂亮的PageView视差效果的示例项目。 - - -**导航栏有关的库(库) ↓** - -库名|版本号|链接|描述 --|-|-|- -navigation_bar| 0.0.1|https://pub.dartlang.org/packages/navigation_bar|一个简易的底部导航栏。 - - - - -**列表有关的库 ↓** - -库名|版本号|链接|描述 --|-|-|- -flutter_pagewise |0.2.0|https://pub.dartlang.org/packages/flutter_pagewise|一次加载一页(或批处理)内容(也称为延迟加载) -lazy_load_scrollview |0.0.2|https://pub.dartlang.org/packages/lazy_load_scrollview|ScrollView的包装器,可以启用延迟加载,当到达页面底部时将触发回调。 - ----- - -> 路由: - -库名|版本号|链接|描述 --|-|-|- -fluro|1.3.1|https://pub.dartlang.org/packages/fluro|最好用的路由导航框架。功能:简单的路线导航;函数处理程序(映射到函数而不是路径);通配符参数匹配;查询字符串参数解析;内置常用转换;简单的定制转换创建。 - - ----- - -> 消息传递通信有关: - -库名|版本号|链接|描述 --|-|-|- -flutter_local_notifications|0.3.0|https://pub.dartlang.org/packages/flutter_local_notifications|一个跨平台的显示本地notifications的插件。 -local_notifications|0.0.6|https://pub.dartlang.org/packages/local_notifications|这个库能让你在Android和iOS上创建Notifications很简单。 -url_launcher|3.0.2|https://pub.dartlang.org/packages/url_launcher|用于在Android和iOS上启动URL。支持网络,电话,短信和电子邮件方案。 -firebase_messaging|1.0.2|https://pub.dartlang.org/packages/firebase_messaging|一款跨平台的消息传递解决方案,可让您在Android和iOS上可靠地传递消息。 -event_bus|0.4.1|https://pub.dartlang.org/packages/event_bus|一个使用Dart流进行解耦应用程序的简单事件总线的库。 - ----- - -> 视频 & 音频: - -库名|版本号|链接|描述 --|-|-|- -video_player|0.6.5|https://pub.dartlang.org/packages/video_player|Flutter官方的视频库(也可以用于直播),用于在Android和iOS上与其他Flutter窗口小部件一起显示内嵌视频。**支持主流直播流**。该库底层使用的ExoPlayer播放器。更多关于ExoPlayer播放器支持的视频格式资料请看官方文档[ExoPlayer播放器支持的视频格式](https://google.github.io/ExoPlayer/supported-formats.html) -video_launcher|0.3.0|https://pub.dartlang.org/packages/video_launcher|视频播放器 -flute_music_player|0.0.6|https://pub.dartlang.org/packages/flute_music_player|基于Flutter的材料设计音乐播放器与音频插件播放本地音乐文件. -audioplayer|0.5.0|https://pub.dartlang.org/packages/audioplayer|一个播放远程或本地音频文件Flutter音频插件 -audioplayers|0.5.2|https://pub.dartlang.org/packages/audioplayers|这是rxlabz的audioplayer的一个分支,不同之处在于它支持同时播放多个音频并显示音量控制。 - - ----- - -> rx系列: - -库名|版本号|链接|描述 --|-|-|- -rxdart|0.17.0|https://pub.dartlang.org/packages/rxdart|RxDart是一种基于ReactiveX的谷歌Dart反应性函数编程库。谷歌Dart自带了一个非常不错的流API;RxDart没有尝试提供这个API的替代方案,而是在它上面添加了一些功能。 -rx_widgets|1.0.3|https://pub.dartlang.org/packages/rx_widgets|rx_widgets是一个包含基于流的Flutter Widgets和Widget帮助程序/便利类的程序包,它们有助于反应式编程风格,特别是与RxDart和RxCommands结合使用。 -rx_command|2.0.0|https://pub.dartlang.org/packages/rx_command|RxCommand是针对事件处理程序的基于Reactive Extensions(Rx)的抽象。它基于ReactiveUI框架的ReactiveCommand。它大量使用了RxDart包。 - - ----- - -## 三方sdk有关的: - -**由于开发中会用到一些三方的sdk,但是国内的sdk目前还没有支持Flutter,我在pub上面收集了一些相关的三方库,也不知道效果如何,待检验,欢迎各位试用给出反馈。** - - -> 地图(地图显示、定位、经纬度等) - -库名|版本号|链接|描述 --|-|-|- -map_view|0.0.12|https://pub.dartlang.org/packages/map_view|一个用于在iOS和Android上显示谷歌地图的Flutter插件 -flutter_map|0.0.10|https://pub.dartlang.org/packages/flutter_map|基于leaflet的Flutter地图包 -location|1.3.4|https://pub.dartlang.org/packages/location|这个插件 处理Android和iOS上的位置。它还提供位置更改时的回调。 -latlong|0.5.3|https://pub.dartlang.org/packages/latlong|LatLong是一个计算通用的纬度和经度的轻量级库。 - - ----- - -> 二维码 - -库名|版本号|链接|描述 --|-|-|- -qr_flutter|1.1.5|https://pub.dartlang.org/packages/qr_flutter|QR.Flutter是一个Flutter库,基于QR-Dart,可通过Widget或自定义Paint进行简单快速的QR码渲染。可配置的输出大小、填充、背景和前景颜色。可以导出图像数据。不需要Internet连接。 -barcode_scan|0.0.8|https://pub.dartlang.org/packages/barcode_scan|用于扫描2D条形码和QRCodes的Flutter插件。 -qrcode_reader|0.4.4|https://pub.dartlang.org/packages/qrcode_reader|使用相机读取二维码的Flutter插件。 - ----- - -> WebView - -库名|版本号|链接|描述 --|-|-|- -flutter_webview_plugin|0.1.6|https://pub.dartlang.org/packages/flutter_webview_plugin|允许Flutter与原生Webview进行通信的插件。 - ----- - -> 图表库 - -库名|版本号|链接|描述 --|-|-|- -charts-common|0.3.0|https://pub.dartlang.org/packages/charts_flutter|Material Design风格的图表库 -charts-flutter|0.3.0|https://pub.dartlang.org/packages/charts_common|通用的图表库组件 -flutter_circular_chart|0.0.3|https://pub.dartlang.org/packages/flutter_circular_chart|一个让你使用flutter轻松创建的动画圆形图控件的库。 - - ----- - -> 权限库 - -库名|版本号|链接|描述 --|-|-|- -simple_permissions|0.1.5|https://pub.dartlang.org/packages/simple_permissions|用于android和ios的请求权限的库 -flutter_simple_permissions|0.0.1|https://pub.dartlang.org/packages/flutter_simple_permissions|权限申请的库 - - ----- - -> 分享 - -库名|版本号|链接|描述 --|-|-|- -share|0.5.1|https://pub.dartlang.org/packages/share|支持分享的flutter插件 - - ----- - -> 统计 - -库名|版本号|链接|描述 --|-|-|- -flutter_umeng_analytics|0.0.1|https://pub.dartlang.org/packages/flutter_umeng_analytics|这个库集成了友盟统计sdk - ----- - -> 登陆 - -库名|版本号|链接|描述 --|-|-|- -flutter_qq|0.0.1|https://pub.dartlang.org/packages/flutter_qq|这个库集成了QQ登录、QQ分享、QQ空间分享。 -flutter_wechat|0.1.2|https://pub.dartlang.org/packages/flutter_wechat|这个库集成了微信,支持微信登录、分享、支付。 - -> 支付 - -库名|版本号|链接|描述 --|-|-|- -flutter_alipay|0.1.0|https://pub.dartlang.org/packages/flutter_alipay|这个库继承了支付宝,兼容android和ios - - -> 视频播放(本地视频、网上视频、或者rtmp源格式) - -https://github.com/hyz1992/my_aliplayer 集成了阿里云播放器,可以用来播放视频,也可以播放rtmp格式。 - ----- - -**以下几个暂未找到相关的三方库** - -* 推送 - - ----- - -## 一个好玩的库: - -库名|版本号|链接|描述 --|-|-|- -pwa|0.1.10|https://pub.dartlang.org/packages/pwa|基于Dart的PWA应用程序的库 - diff --git "a/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/Common libraries for Flutter.md" "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/Common libraries for Flutter.md" new file mode 100644 index 0000000..cebe7e9 --- /dev/null +++ "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/Common libraries for Flutter.md" @@ -0,0 +1,54 @@ +# Common libraries for Flutter(Everything you want is here) + +**[Note] The following libraries have been updated all the time, please choose the latest stable version to download.** +**If you have any questions or you find other libraries, you can write your questions in the `issues`.** + +---- + +## Extended Library of Dart Language -- Quiver + +Quiver is a set of utility libraries for Dart .It's easier and more convenient to use Dart language. + +Github: https://github.com/google/quiver-dart + +Installation: + +```yaml +dependencies: + quiver: '>=2.0.0 <3.0.0' +``` + +---- + +## A script that automatically adds file records to the directory template set in pubspec. yaml `asset_generator` + + +**Features: Use `asset_generator'to generate `r.dart` file which is convenient to reference resources in code.** + +github地址: https://github.com/flutter-dev/asset_generator + +Usage: + + +* 1. Download `asset_generator.dart` file. + +* 2. Go to the Flutter installation directory and place the `asset_generator.dart` file in the Flutter installation directory. + +---- + +## :point_right: On-line monitoring tools for `pubspec.yaml` file,https://www.bejson.com/validators/yaml/ , copy your `.yaml` file and the website will find errors automatically. + +---- + +## Common libraies: + + +| README files | Introductions | +| ----------------- | ------------------------------------------------------------ | +| [Common libraies for Flutter](third_libs.md) | About native mobile devices.The details are as follows:
- **Map(Map display, location, longitude and latitude, etc.).**
- **QRCode.**
- **WebView(Interaction between Flutter and JS).**
- **Charts libraies.**
- **permissions libraies(requried).**
- **Statistics libraies(Statistics of App data: daily activity, users, downloads, online time, etc.).**
- **Sharing and loading(sharing and landing on platforms such as QQ, Weixin and Weibo).**
- **Push (necessary for pushing service-side messages to mobile devices).**
- **IM(Instant messaging (chat) and other usage scenarios.**
- **RTC(Use scenarios such as audio and video conference calls).**
- **Video Play (Local Video, Online Video or RTmp Source Format).**
- **Payment (using Alipay, WeChat payment, etc.).**
- **SMS(Short Message Verification Code).**
- **Web pages jump to App specific pages (linking of APP).**
- **A fun library: PWA (a Library Based on Dart's PWA)**. | +|[third-party Data libraies forFlutter](data_libs.md)|About data-processing.The details are as follows:
- **Network request (load network data, send data to server).**
- **Type codec libraries (character codec).**
- **Data serialization.**
- **Json parsing (json parsing into Map or object).**
- **Comparison of common Json libraies.**
- **Libraries Related to Coding and Decoding, Encryption and Decryption (AES, RSA, etc.).**
- **System platform-related libraries (device information, bluetooth, wifi, files, etc.).**
- **Internationalization and localization (multilingual version).**
- **Picture Loading and Caching.**
- **Data storage, cache-related Libraries.**
- **Routing (Navigation Switching).**
- **Message passing communication is concerned.**
- **Video & Audio Processing.**
- **Rx-related (asynchronous task flow operation, (Note: Rx is an idea, and it's use in all kinds of common languages , such as: RxJava, RxKotlin, RxJs, RxSwift, etc.)**.| +|[third-party UI libraies forFlutter](UI_libs.md)|Beautiful UI libraies, you can use it to create your personalized UI.The details are as follows:
- **Tooltips & help dialogs.**
- **About beautiful icons .**
- **Beautiful rich texts.**
- **MarkDown. **
- **Cool animation.**
- **Libraies for the matching of Android and iOS.**
- **Calendar libraies(for displaying and operation calendars).**
- **Date, time, date,&time, icon, selector for custom data (selectors all you want).**
- **Image pickers.**
- **Contacts pickers.**
- **Color pickers.**
- **carousel or slideshow(and about Tab or PagerView).**
- **About Navigation bars.**
- **Personalized views with scolls and lists.**| + +---- + +#### If you find any of these libraries unusable, or if you find more and better third-party libraries, you can write `issues`. Thank you. diff --git "a/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/UI_libs.md" "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/UI_libs.md" new file mode 100644 index 0000000..e66eb03 --- /dev/null +++ "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/UI_libs.md" @@ -0,0 +1,108 @@ +## UI有关的第三方库: + +**弹窗和提示窗有关的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| --------- | ------- | ---------- | ---------- | +| font_awesome_flutter | 7.0.0 | https://pub.dev/packages/font_awesome_flutter | 图标字体的一个库 | +| fluttertoast | 2.0.3 | https://pub.dev/packages/fluttertoast | 用于Android和ios的toast库。 | | +| camera | 0.2.9+1 | https://pub.dev/packages/camera | 谷歌官方的相机库。用于在Android和iOS上获取有关和控制相机的信息。支持预览相机馈送和捕捉图像,可以用来视频录制,新增对拍照的方向的处理。 | + +**图标有关的开源库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------- | ------ | ------- | ------- | +| cupertino_icons | 0.1.2 | https://pub.dev/packages/cupertino_icons | Cupertino的图标组件库 | +| flutter_launcher_icons | 0.6.0 | https://pub.dev/packages/flutter_launcher_icons 或者github地址https://github.com/fluttercommunity/flutter_launcher_icons | 一个命令行工具,简化了更新Flutter应用程序启动图标的任务。 完全灵活,您可以选择要更新启动图标的平台,如果需要,可以选择保留旧的启动图标,以防将来某个时候还原旧图标。 | + +**富文本 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| --------------------- | ------ | ------------------------------------------------------- | ------------------------------------------------------------ | +| flutter_html_view | 0.5.2 | https://pub.dev/packages/flutter_html_view | Flutter没有默认的支持来显示html,所以需要三方的包来显示。这个包可以将html呈现给原生的Widget。(目前支持的标签比较少) | +| flutter_html_textview | 0.2.6 | https://pub.dev/packages/flutter_html_textview | 将html呈现为一个Widget,在textview中呈现html。 | + +**MarkDown ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| ---------------- | ------ | ------------------------------------------- | ------------------------------------------------------------ | +| flutter_markdown | 0.1.3 | https://github.com/flutter/flutter_markdown | 官方的MarkDown库,它支持原始MarkDown格式,但没有内联Html格式。 | +| markdown | 2.0.0 | https://pub.dev/packages/markdown | 用Dart编写的便携式Markdown库。它可以在客户端和服务器上将Markdown解析为HTML。 | +| html2md | 0.1.7 | https://pub.dev/packages/html2md | 将html转换为Dart中的MarkDown. | + +**动画有关的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------------- | ------ | ----------------------------------------- | ------------------------------------------------------------ | +| flutter_villains | 1.0.1 | https://pub.dev/packages/flutter_villains | 页面切换动画的一个库,简化动画操作,你只需要管理好UI就可以了。 | +| flutter_spinkit | 4.0.0 | https://pub.dev/packages/flutter_spinkit | 加载数据时的各种渐变进度动画(比如:菊花进度、圆环进度、旋转进度等)。具体演示效果可以看github: | +| progress_indicators | 0.1.4 | https://pub.dev/packages/progress_indicators | 这里有一些很酷的动画进度指示器可以使用。具体演示效果可以看github:https://github.com/wal33d006/progress_indicators | + +**针对Android和ios平台的UI适配库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ------------------------------------------------------------ | +| platform_aware | 0.4.0 | https://pub.dev/packages/platform_aware | 为自动适应当前平台而包装的Flutter组件,不需要对iOS和Android进行代码更改。所有小部件都依赖于Theme.of(context).platform来确定当前活动平台的平台。你可以使用Flutter Inspector动态地更改平台。 | +| native_widgets | 0.0.3 | https://pub.dev/packages/native_widgets | 为避免重复代码,只编写一次代码就可以支持两个平台并自动根据平台自动使用对应风格组件,Android将使用材料设计,iOS将使用Cupertino风格的小部件。 | + +**日历库(主要是用于显示和操作日历)** + +| 库名 | 版本号 | 链接 | 描述 | +| ---------------- | ------ | -------------------------------------------------- | -------------------------------------------------------- | +| flutter_calendar | 0.0.4 | https://pub.dev/packages/flutter_calendar | 适用于Flutter的日历小组件。 | +| calendarro | 0.0.1 | https://pub.dev/packages/calendarro | Flutter的日历组件库。 这个库提供了多种自定义组件的方法。 | + + + +**日期,时间,日期时间,icon,自定义数据的选择器(很全面) ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ------------------------------------------------------------ | +| flutter_picker | 0.0.3 | https://pub.dev/packages/flutter_picker | 一个日期,时间,日期时间,icon,自定义数据的选择器,可以居中弹窗,也可以在底部弹出。(目前来看是最全面的一个选择器控件。该插件支持ios和android平台,使用的是ios的风格的UI效果。) | + +**图片选择的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------------------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| image_picker | 0.4.5 | https://pub.dev/packages/image_picker | 适用于iOS和Android的Flutter插件,用于从图像库中拾取图像,并使用相机拍摄新照片。(功能正在完善中) | +| flutter_multiple_image_picker | 0.0.1 | https://pub.dev/packages/flutter_multiple_image_picker | 一个新的Flutter插件,用于从图库中选择多个图像。 | + +**联系人选择的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ------------------------------------------------------------ | +| contact_picker | 0.0.2 | https://pub.dev/packages/contact_picker | 使用此插件,Flutter应用程序可以地址簿中选择联系人,并将联系人信息返回给应用程序,并且不需要用户的任何特殊权限。目前该插件仅支持选择电话号码。 | + +**颜色选择的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| --------------------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| flutter_color_picker | 0.0.1 | https://pub.dev/packages/flutter_color_picker | 一个简单的颜色选择器,类似于安卓的selector的功能,可以在点击控件时,给控件设置选择器效果。 | +| material_color_picker | 0.0.1 | https://pub.dev/packages/material_color_picker(这个是旧版本) | 这个是Flutter的颜色选择器,基于Google Docs颜色选择器。这个用于选择颜色,你想用哪一个颜色,可以弹窗自由选择。 | +| material_pickers | 0.0.2 | https://pub.dev/packages/material_pickers(这个是新版本) | 这个是Flutter的颜色选择器,基于Google Docs颜色选择器。这个用于选择颜色,你想用哪一个颜色,可以弹窗自由选择。 | +| flutter_colorpicker | 0.0.5 | https://pub.dev/packages/flutter_colorpicker | 这是一个HSV的颜色选择器 | + +**轮播图有关的库(以及Tab PagerView有关的库) ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| ------------------ | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| flutter_swiper | 1.0.4 | https://pub.dev/packages/flutter_swiper 对应的github地址https://github.com/best-flutter/flutter_swiper | Flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配. | +| infinity_page_view | 1.0.0 | https://pub.dev/packages/infinity_page_view | Flutter无限页面视图。 | +| carousel | 0.1.0 | https://pub.dev/packages/carousel | 一个简单的轮播组件(待完善)。 | +| page_transformer | 0.0.1 | https://pub.dev/packages/page_transformer | 用于在Flutter中创建漂亮的PageView视差效果的示例项目。 | + +**导航栏有关的库(库) ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ---------------------- | +| navigation_bar | 0.0.1 | https://pub.dev/packages/navigation_bar | 一个简易的底部导航栏。 | + + + +**列表有关的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------------------- | ------ | ------------------------------------------------------ | ------------------------------------------------------------ | +| flutter_pagewise | 0.2.0 | https://pub.dev/packages/flutter_pagewise | 一次加载一页(或批处理)内容(也称为延迟加载) | +| lazy_load_scrollview | 0.0.2 | https://pub.dev/packages/lazy_load_scrollview | ScrollView的包装器,可以启用延迟加载,当到达页面底部时将触发回调。 | + diff --git "a/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/data_libs.md" "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/data_libs.md" new file mode 100644 index 0000000..258bcc9 --- /dev/null +++ "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/data_libs.md" @@ -0,0 +1,169 @@ +## 常用开源包: + + +> 网络请求(加载网络数据,发送数据到服务端) + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------- | --------- | --------------------------------------------------- | ------------------------------------------------------------ | +| http | 0.11.3+16 | https://pub.dartlang.org/packages/http | 该软件包包含一组高级函数和类,可以轻松使用HTTP资源。它与平台无关,可以在命令行和浏览器上使用。 | +| dio | 0.0.14 | https://pub.dartlang.org/packages/dio | Dart的一个强大的Http客户端,支持拦截器、全局配置、FormData、请求取消、文件下载、超时等。 | +| http_multi_server | 2.0.5 | https://pub.dartlang.org/packages/http_multi_server | dart:io HttpServer包装器,用于处理来自多个服务器的请求 | +| jaguar_retrofit | 2.8.6 | https://pub.dartlang.org/packages/jaguar_retrofit | Dart版本的Retrofit库,用于实现一个HTTP客户端API生成器。(我给它点评:666!思想都是相通的。) | + +---- + +> 类型编解码的库(字符编解码): + +| 库名 | 版本号 | 链接 | 描述 | +| ------------- | ------ | ----------------------------------------------- | ------------------------------------------------------------ | +| html_unescape | 1.0.0 | https://pub.dartlang.org/packages/html_unescape | 用于解决HTML编码字符串的Dart库。支持所有命名字符引用(如` `),小数字符引用(如`á`)和十六进制字符引用(如`ã`)。 | +| gbk2utf8 | | https://github.com/jzoom/gbk2utf8 | 官方的http还不能支持中文gbk的解析,这个项目就是为了解决gbk转成utf-8编码的。 | + +---- + +> 序列化 + +* 手动序列化: + +使用 `dart:convert` 的内置解码器。包括传入 JSON 原始字符串给 JSON.decode() 方法,然后从 Map 中查询你需要的数据。 + +* 自动序列化: + +| 库名 | 版本号 | 链接 | 描述 | +| --------------------- | ------ | ------------------------------------------------------- | ------------- | +| json_serializable | 0.5.7 | https://pub.dartlang.org/packages/json_serializable | | +| built_value | 5.5.1 | https://pub.dartlang.org/packages/built_value | runtime依赖项 | +| built_value_generator | 5.5.1 | https://pub.dartlang.org/packages/built_value_generator | dev依赖项 | +| built_value_test | 5.5.1 | https://pub.dartlang.org/packages/built_value_test | test依赖项 | + +---- + +> Json解析(json解析成Map或对象) + +| 库名 | 版本号 | 链接 | 描述 | +| ------- | ------------ | ----------------------------------------- | ------------------------------------------------------ | +| codable | 1.0.0-beta.2 | https://pub.dartlang.org/packages/codable | 用于将动态结构化数据(JSON,YAML)转换为Dart类型的库。 | + +* https://github.com/javiercbk/json_to_dart 根据json生成Dart实体类 +* https://github.com/debuggerx01/JSONFormat4Flutter 这是一个AS的辅助插件,将JSONObject格式的String解析成Dart的实体类 + + + +* Dson 0.13.2 下载地址 https://pub.dartlang.org/packages/dson + 描述:Dson的github地址 https://github.com/drails-dart/dson + DSON是一个将Dart对象转换为JSON的库。(用于web)这个库是Dartson的一个分支,但又有不同。 +* Dartson是一个Dart库,可用于将Dart对象转换为JSON字符串。 + https://github.com/eredo/dartson (用于web) + +> **几个Json库的比较:[https://github.com/drails-dart/dart-serialise](https://github.com/drails-dart/dart-serialise)** + +| 方式 | 大小 (js) | 序列化 (dart) | 反序列化 (dart) | 序列化 (js) | 反序列化 (js) | +| ----------------- | --------- | ------------- | --------------- | ----------- | ------------- | +| json_serializable | 80 KB | 9.09 ms | 6.61 ms | 8.23 ms | 8.12 ms | +| Serializable | 79 KB | 6.1 ms | 6.92 ms | 4.37 ms | | +| DSON | 94 KB | 12.72 ms | 11.15 ms | 16.64 ms | 17.94 ms | +| Dartson | 86 KB | 9.61 ms | 6.81 ms | 8.58 ms | 7.01 ms | +| Manual | 86 KB | 8.29 ms | 5.78 ms | 10.7 ms | 7.9 ms | +| Interop | 70 KB | 61.55 ms | 14.96 ms | 2.49 ms | 2.93 ms | +| Jaguar_serializer | 88 KB | 8.57 ms | 6.58 ms | 10.31 ms | 8.59 ms | +| Jackson (Groovy) | | 496 ms | 252 ms | n/a | n/a | + +---- + +**编解码、加密解密(AES、RSA等)有关的库** + +| 库名 | 版本号 | 链接 | 描述 | +| ------- | ------ | ----------------------------------------- | ------------------------------------------------------------ | +| ninja | 1.0.0 | https://pub.dartlang.org/packages/ninja | 在Dart的Converter和Codec接口上完善的AES以及RSA加密解密算法的库。 | +| archive | 2.0.0 | https://pub.dartlang.org/packages/archive | 为各种存档和压缩格式提供编码器和解码器,如zip,tar,bzip2,gzip和zlib。(不知道移动端能否用得到,文档说服务端和web端可以用。) | + +---- + +> 系统平台有关的库(设备信息、蓝牙、wifi、文件等): + +| 库名 | 版本号 | 链接 | 描述 | +| -------------------- | ------ | ---------------------------------------------------- | ------------------------------------------------------------ | +| **分享(官方的库)** | | | | +| share | 0.5.2 | https://pub.dartlang.org/packages/share | 用于通过平台共享UI共享内容,使用Android上的ACTION_SEND意图和iOS上的UIActivityViewController。 | +| **获取本地文件** | | | | +| path_provider | 0.4.1 | https://pub.dartlang.org/packages/path_provider | 用于获取Android和iOS文件系统上的常用位置,例如temp和app数据目录。 | +| **读写sp文件** | | | | +| shared_preferences | 0.4.2 | https://pub.dartlang.org/packages/shared_preferences | 用于读写简单键值对的Flutter插件。包装iOS上的NSUserDefaults和Android上的SharedPreferences。 | +| **网络状态有关** | | | | +| connectivity | 0.3.1 | https://pub.dartlang.org/packages/connectivity | 用于发现Android和iOS上的网络状态(WiFi和移动/蜂窝)连接。 | +| **设备信息** | | | | +| device_info | 0.2.1 | https://pub.dartlang.org/packages/device_info | 提供有关设备(品牌,型号等)的详细信息,以及应用程序正在运行的Android或iOS版本。 | +| **蓝牙** | | | | +| flutter_blue | 0.3.3 | https://pub.dartlang.org/packages/flutter_blue | 这是跨平台的蓝牙sdk. | +| flutter_ble_lib | 1.0.0 | https://pub.dartlang.org/packages/flutter_ble_lib | 这是一个支持蓝牙连接的flutter库。它里面使用RxAndroidBle和RxBluetoothKit作为本地库。 | + +---- + +> 国际化和本地化(多国语言版本): + +| 库名 | 版本号 | 链接 | 描述 | +| ---- | ------ | -------------------------------------- | ------------------------------------------------------------ | +| intl | 0.15.6 | https://pub.dartlang.org/packages/intl | 这个包提供国际化和本地化功能,包括消息翻译、复数和性别、日期/数字格式和解析以及双向文本。 | + +---- + +> 图片加载和缓存 + +使用`Image.network`,或者使用下面这个库: + +| 库名 | 版本号 | 链接 | 描述 | +| -------------------- | ------- | ------------------------------------------------------ | ------------------------------------------------------------ | +| cached_network_image | 0.4.1+1 | https://pub.dartlang.org/packages/cached_network_image | Flutter库来加载和缓存网络图像。也可以与占位符和错误小部件一起使用。 | + +---- + +> 数据存储、缓存有关的库 + + +| 库名 | 版本号 | 链接 | 描述 | +| ---------- | ------------- | -------------------------------------------- | ------------------------------------------------------------ | +| sqflite | sqflite0.10.0 | https://pub.dartlang.org/packages/sqflite | SQLite的Flutter插件,一个自包含的高可靠性嵌入式SQL数据库引擎。 | +| file_cache | 0.0.1 | https://pub.dartlang.org/packages/file_cache | 为flutter package项目缓存Json,Buffer,FileCacheImage。 | + +---- + +> 路由(导航切换): + +| 库名 | 版本号 | 链接 | 描述 | +| ----- | ------ | --------------------------------------- | ------------------------------------------------------------ | +| fluro | 1.3.1 | https://pub.dartlang.org/packages/fluro | 最好用的路由导航框架。功能:简单的路线导航;函数处理程序(映射到函数而不是路径);通配符参数匹配;查询字符串参数解析;内置常用转换;简单的定制转换创建。 | + +---- + +> 消息传递通信有关: + +| 库名 | 版本号 | 链接 | 描述 | +| --------------------------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| flutter_local_notifications | 0.3.0 | https://pub.dartlang.org/packages/flutter_local_notifications | 一个跨平台的显示本地notifications的插件。 | +| local_notifications | 0.0.6 | https://pub.dartlang.org/packages/local_notifications | 这个库能让你在Android和iOS上创建Notifications很简单。 | +| url_launcher | 3.0.2 | https://pub.dartlang.org/packages/url_launcher | 用于在Android和iOS上启动URL。支持网络,电话,短信和电子邮件方案。 | +| firebase_messaging | 1.0.2 | https://pub.dartlang.org/packages/firebase_messaging | 一款跨平台的消息传递解决方案,可让您在Android和iOS上可靠地传递消息。 | +| event_bus | 0.4.1 | https://pub.dartlang.org/packages/event_bus | 一个使用Dart流进行解耦应用程序的简单事件总线的库。 | + +---- + +> 视频 & 音频处理: + +| 库名 | 版本号 | 链接 | 描述 | +| ------------------ | ------ | ---------------------------------------------------- | ------------------------------------------------------------ | +| video_player | 0.6.5 | https://pub.dartlang.org/packages/video_player | Flutter官方的视频库(也可以用于直播),用于在Android和iOS上与其他Flutter窗口小部件一起显示内嵌视频。**支持主流直播流**。该库底层使用的ExoPlayer播放器。更多关于ExoPlayer播放器支持的视频格式资料请看官方文档[ExoPlayer播放器支持的视频格式](https://google.github.io/ExoPlayer/supported-formats.html) | +| video_launcher | 0.3.0 | https://pub.dartlang.org/packages/video_launcher | 视频播放器 | +| flute_music_player | 0.0.6 | https://pub.dartlang.org/packages/flute_music_player | 基于Flutter的材料设计音乐播放器与音频插件播放本地音乐文件. | +| audioplayer | 0.5.0 | https://pub.dartlang.org/packages/audioplayer | 一个播放远程或本地音频文件Flutter音频插件 | +| audioplayers | 0.5.2 | https://pub.dartlang.org/packages/audioplayers | 这是rxlabz的audioplayer的一个分支,不同之处在于它支持同时播放多个音频并显示音量控制。 | + +---- + +> Rx系列(异步任务流的操作、(注:Rx是一种思想,各类常用语言都有这个技术,如:RxJava、RxKotlin、RxJs、RxSwift等)): + +| 库名 | 版本号 | 链接 | 描述 | +| ---------- | ------ | -------------------------------------------- | ------------------------------------------------------------ | +| rxdart | 0.17.0 | https://pub.dartlang.org/packages/rxdart | RxDart是一种基于ReactiveX的谷歌Dart反应性函数编程库。谷歌Dart自带了一个非常不错的流API;RxDart没有尝试提供这个API的替代方案,而是在它上面添加了一些功能。 | +| rx_widgets | 1.0.3 | https://pub.dartlang.org/packages/rx_widgets | rx_widgets是一个包含基于流的Flutter Widgets和Widget帮助程序/便利类的程序包,它们有助于反应式编程风格,特别是与RxDart和RxCommands结合使用。 | +| rx_command | 2.0.0 | https://pub.dartlang.org/packages/rx_command | RxCommand是针对事件处理程序的基于Reactive Extensions(Rx)的抽象。它基于ReactiveUI框架的ReactiveCommand。它大量使用了RxDart包。 | + diff --git "a/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/third_libs.md" "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/third_libs.md" new file mode 100644 index 0000000..72b71c2 --- /dev/null +++ "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/English_docs/third_libs.md" @@ -0,0 +1,139 @@ +## 第三方sdk有关的: + +**由于开发中会用到一些三方的sdk,但是国内的sdk目前还没有支持Flutter,我在pub上面收集了一些相关的三方库,也不知道效果如何,待检验,欢迎各位试用给出反馈。** + + +> 地图(地图显示、定位、经纬度等) + +| 库名 | 版本号 | 链接 | 描述 | +| ----------- | ------ | --------------------------------------------- | ------------------------------------------------------------ | +| map_view | 0.0.12 | https://pub.dartlang.org/packages/map_view | 一个用于在iOS和Android上显示谷歌地图的Flutter插件 | +| flutter_map | 0.0.10 | https://pub.dartlang.org/packages/flutter_map | 基于leaflet的Flutter地图包 | +| location | 1.3.4 | https://pub.dartlang.org/packages/location | 这个插件 处理Android和iOS上的位置。它还提供位置更改时的回调。 | +| latlong | 0.5.3 | https://pub.dartlang.org/packages/latlong | LatLong是一个计算通用的纬度和经度的轻量级库。 | + +---- + +> 二维码 + +| 库名 | 版本号 | 链接 | 描述 | +| ------------- | ------ | ----------------------------------------------- | ------------------------------------------------------------ | +| qr_flutter | 1.1.5 | https://pub.dartlang.org/packages/qr_flutter | QR.Flutter是一个Flutter库,基于QR-Dart,可通过Widget或自定义Paint进行简单快速的QR码渲染。可配置的输出大小、填充、背景和前景颜色。可以导出图像数据。不需要Internet连接。 | +| barcode_scan | 0.0.8 | https://pub.dartlang.org/packages/barcode_scan | 用于扫描2D条形码和QRCodes的Flutter插件。 | +| qrcode_reader | 0.4.4 | https://pub.dartlang.org/packages/qrcode_reader | 使用相机读取二维码的Flutter插件。 | + +---- + +> WebView(Flutter和JavaScript交互) + +| 库名 | 版本号 | 链接 | 描述 | +| ---------------------- | ------ | -------------------------------------------------------- | ---------------------------------------- | +| flutter_webview_plugin | 0.1.6 | https://pub.dartlang.org/packages/flutter_webview_plugin | 允许Flutter与原生Webview进行通信的插件。 | + +---- + +> 图表库 + +| 库名 | 版本号 | 链接 | 描述 | +| ---------------------- | ------ | -------------------------------------------------------- | ------------------------------------------------- | +| charts-common | 0.3.0 | https://pub.dartlang.org/packages/charts_flutter | Material Design风格的图表库 | +| charts-flutter | 0.3.0 | https://pub.dartlang.org/packages/charts_common | 通用的图表库组件 | +| flutter_circular_chart | 0.0.3 | https://pub.dartlang.org/packages/flutter_circular_chart | 一个让你使用flutter轻松创建的动画圆形图控件的库。 | + +---- + +> 权限库(移动端App需要申请权限,必备) + +| 库名 | 版本号 | 链接 | 描述 | +| -------------------------- | ------ | ------------------------------------------------------------ | ------------------------------ | +| simple_permissions | 0.1.5 | https://pub.dartlang.org/packages/simple_permissions | 用于android和ios的请求权限的库 | +| flutter_simple_permissions | 0.0.1 | https://pub.dartlang.org/packages/flutter_simple_permissions | 权限申请的库 | + +---- + +> 统计(统计App的有关数据,比如日活跃量、用户量、下载量、在线时长等) + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------------- | ------ | --------------------------------------------------------- | ----------------------- | +| flutter_umeng_analytics | 0.0.1 | https://pub.dartlang.org/packages/flutter_umeng_analytics | 这个库集成了友盟统计sdk(网友写的,并非官方的。) | +|-|-|-|极光针对Android和iOS各自都有SDK,只是目前极光还没有把统计集成到Flutter里。| + +---- + +> 分享和登陆(QQ、微信、微博等平台的分享和登陆) + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ------------------------------------------------------------ | +| sharesdk | 1.0.9 | https://pub.dartlang.org/packages/sharesdk | ShareSDK官方推出的功能的Flutter插件,用于分享、登陆等社交功能。 | +| share | 0.5.1 | https://pub.dartlang.org/packages/share | 支持分享的flutter插件 | +| flutter_qq | 0.0.1 | https://pub.dartlang.org/packages/flutter_qq | 这个库集成了QQ登录、QQ分享、QQ空间分享。 | +| flutter_wechat | 0.1.2 | https://pub.dartlang.org/packages/flutter_wechat | 这个库集成了微信,支持微信登录、分享、支付。 | +|-|-|-|极光针对Android和iOS各自都有SDK,只是目前极光还没有把分享和登陆集成到Flutter里。| +|-|-|-|目前友盟的U-Share社会化分享还没有推出Flutter版本的插件库。| + +---- + +> 推送(把服务端的消息推送到移动设备上必备的) + +| 库名 | 版本号 | 链接 | 描述 | +| -------------------- | ------ | --------------------------------------------- | -------------------- | +| jpush-flutter-plugin | 0.0.11 | https://github.com/jpush/jpush-flutter-plugin | 极光推送官方的插件库 | +|mobpush|0.0.5|https://pub.dartlang.org/packages/mobpush|Mob官方的推送插件。使用此插件能够帮助您在使用 Flutter 开发应用时,快速地实现推送功能。Demo例子:https://github.com/MobClub/MobPush-for-Flutter| +|-|-|-|目前友盟的U-push推送还没有推出Flutter版本的插件库。| + +---- + +> IM(即时通讯(聊天)等使用场景) + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------------- | ------ | ------------------------------------------------ | -------------------------------------- | +| jmessage-flutter-plugin | 0.0.15 | https://github.com/jpush/jmessage-flutter-plugin | 极光官方推出的IM聊天、社交功能的插件。 | + +---- + +> RTC(音视频会议通话等使用场景) + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------------- | ------ | ------------------------------------------------ | -------------------------------------- | +|-|-|-|1.目前极光的JMRTC还没有推出Flutter版本的插件库。(极光针对Android和iOS各自都有SDK,只是目前极光还没有把JMRTC集成到Flutter里面)。| +|Agora-Flutter-Quickstart|-|https://github.com/AgoraIO-Community/Agora-Flutter-Quickstart|声网官方集成的RTC SDK示例| + +---- + +> 视频播放(本地视频、网上视频、或者rtmp源格式) + +https://github.com/hyz1992/my_aliplayer 集成了阿里云播放器,可以用来播放视频,也可以播放rtmp格式。 + +---- + +> 支付(使用支付宝、微信支付等支付方式) + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ------------------------------------ | +||||目前的做法是:自己去把支付宝和微信分别集成。| +| flutter_alipay | 0.1.0 | https://pub.dartlang.org/packages/flutter_alipay | 这个库继承了支付宝,兼容android和ios | + +---- + +> SMS(短信验证码) + +库名|版本号|链接|描述 +-|-|-|- +|mobsms|1.0.1|https://pub.dartlang.org/packages/mobsms|为开发者提供全球通用的短信验证码工具。使用此插件能够帮助您在使用Flutter开发应用时,快速地实现获取验证码功能。| +|-|-|-|极光针对Android和iOS各自都有SDK,只是目前极光还没有把短信验证码集成到Flutter里。| + +---- + +> 网页页面跳转到App具体页面(APP的链接化) + +|库名|版本号|链接|描述| +|-|-|-|-| +|moblink|3.1.0|https://pub.dartlang.org/packages/moblink|MobLink提供Web与APP直接跳转的完全免费产品服务,实现网页间直接跳转升级为APP间直接跳转。| + +---- + +## 一个好玩的库: + +| 库名 | 版本号 | 链接 | 描述 | +| ---- | ------ | ------------------------------------- | ------------------------- | +| pwa | 0.1.10 | https://pub.dartlang.org/packages/pwa | 基于Dart的PWA应用程序的库 | \ No newline at end of file diff --git "a/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223.md" "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223.md" new file mode 100644 index 0000000..bfd9614 --- /dev/null +++ "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223.md" @@ -0,0 +1,53 @@ +# Flutter的需要与原生交互的一些常用库 + +**【说明】由于这些库一直在更新,请自己选择合适的稳定版本下载。** +**另外如果发现有问题或者你有更好的库,欢迎留言告诉我。** + +---- + +## 谷歌官方的针对Dart语言的一些实用性的功能以及扩展的库 -- Quiver + +Quiver是一组针对Dart的实用程序库,它使使用许多Dart库变得更容易、更方便,或者增加了额外的功能。 + +github地址 https://github.com/google/quiver-dart + +使用方式: + +```yaml +dependencies: + quiver: '>=2.0.0 <3.0.0' +``` + +---- + +## 根据pubspec.yaml中设置的目录模板自动向其中添加文件记录的脚本 `asset_generator` + +好多人都说Flutter中的资源引用很头疼,手写很麻烦,最近找到了一个脚本刚好卡呀解决这个问题。 + + **这个脚本的作用:利用`asset_generator`脚本生成r.dart 资源文件,方便在代码中引用资源。** + +github地址: https://github.com/flutter-dev/asset_generator + +使用方式: + +``` +1.下载 asset_generator.dart 脚本文件。 +2.找到自己Flutter的安装目录,将脚本放在Flutter的根目录下。 +``` + +#### :point_right: 另外关于pubspec.yaml文件,它很严格,很多人会写错,多一个或者少一个空格都会报错。刚好我找到了一个在线监测工具https://www.bejson.com/validators/yaml/ 把你的yaml文件复制进去 就可以自动帮你找出错误了。 + +---- + +常用开源包: + + +| 文档地址 | 文档内容描述 | +| ----------------- | ------------------------------------------------------------ | +| [原生平台有关的第三方库](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E7%9A%84%E9%9C%80%E8%A6%81%E4%B8%8E%E5%8E%9F%E7%94%9F%E4%BA%A4%E4%BA%92%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%BA%93/third_libs.md) | 原生平台有关的第三方库。包括以下内容:
- **地图(地图显示、定位、经纬度等)**。
- **二维码**。
- **WebView(Flutter和JavaScript交互)**。
- **图表库**。
- **权限库(移动端App需要申请权限,必备)**。
- **统计(统计App的有关数据:比如日活跃量、用户量、下载量、在线时长等)**。
- **分享和登陆(QQ、微信、微博等平台的分享和登陆)**。
- **推送(把服务端的消息推送到移动设备上必备的)**。
- **IM(即时通讯(聊天)等使用场景)**。
- **RTC(音视频会议通话等使用场景)**。
- **视频播放(本地视频、网上视频或者rtmp源格式)**。
- **支付(使用支付宝、微信支付等支付方式)**。
- **SMS(短信验证码)**。
- **网页页面跳转到App具体页面(APP的链接化)**。
- **一个好玩的可库:PWA(基于Dart的PWA的一个库)**。 | +|[数据有关的第三方库](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E7%9A%84%E9%9C%80%E8%A6%81%E4%B8%8E%E5%8E%9F%E7%94%9F%E4%BA%A4%E4%BA%92%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%BA%93/data_libs.md)|数据有关的第三方库。包括以下内容:
- **网络请求(加载网络数据,发送数据到服务端)**。
- **类型编解码的库(字符编解码)**。
- **序列化**。
- **Json解析(json解析成Map或对象)**。
- **几个常用Json库的比较**。
- **编解码、加密解密(AES、RSA等)有关的库**。
- **系统平台有关的库(设备信息、蓝牙、wifi、文件等)**。
- **国际化和本地化(多国语言版本)**。
- **图片加载和缓存**。
- **数据存储、缓存有关的库**。
- **路由(导航切换)**。
- **消息传递通信有关**。
- **视频 & 音频处理**。
- **Rx系列(异步任务流的操作、(注:Rx是一种思想,各类常用语言都有这个技术,如:RxJava、RxKotlin、RxJs、RxSwift等))**。| +|[UI界面展示有关的第三方库](https://github.com/AweiLoveAndroid/Flutter-learning/blob/master/readme/Flutter%E7%9A%84%E9%9C%80%E8%A6%81%E4%B8%8E%E5%8E%9F%E7%94%9F%E4%BA%A4%E4%BA%92%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E5%BA%93/UI_libs.md)|动画有关的第三方库。包括以下内容:
- **弹窗和提示窗有关的库**。
- **图标有关的开源库**。
- **富文本**。
- **MarkDown**。
- **动画有关的库**。
- **针对Android和iOS平台适配的库**。
- **日历库(主要用于显示和操作日历)**。
- **日期,时间,日期时间,icon,自定义数据的选择器(很全面)**。
- **图片选择的库**。
- **联系人选择的库**。
- **颜色选择的库**。
- **轮播图有关的库(以及Tab PagerView有关的库)**。
- **导航栏有关的库(库)**。
- **列表有关的库**。| + +---- + +#### 如果你对以上这些有觉得不好用的,或者你发现了有更多更好用的第三方库,欢迎提issues,期待你的积极参与。 diff --git "a/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/UI_libs.md" "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/UI_libs.md" new file mode 100644 index 0000000..3f46e11 --- /dev/null +++ "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/UI_libs.md" @@ -0,0 +1,108 @@ +## UI有关的第三方库: + +**弹窗和提示窗有关的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| --------- | ------- | ---------- | ---------- | +| font_awesome_flutter | 7.0.0 | https://pub.dev/packages/font_awesome_flutter | 图标字体的一个库 | +| fluttertoast | 2.0.3 | https://pub.dev/packages/fluttertoast | 用于Android和ios的toast库。 | | +| camera | 0.2.9+1 | https://pub.dev/packages/camera | 谷歌官方的相机库。用于在Android和iOS上获取有关和控制相机的信息。支持预览相机馈送和捕捉图像,可以用来视频录制,新增对拍照的方向的处理。 | + +**图标有关的开源库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------- | ------ | ------- | ------- | +| cupertino_icons | 0.1.2 | https://pub.dev/packages/cupertino_icons | Cupertino的图标组件库 | +| flutter_launcher_icons | 0.6.0 | https://pub.dev/packages/flutter_launcher_icons 或者github地址https://github.com/fluttercommunity/flutter_launcher_icons | 一个命令行工具,简化了更新Flutter应用程序启动图标的任务。 完全灵活,您可以选择要更新启动图标的平台,如果需要,可以选择保留旧的启动图标,以防将来某个时候还原旧图标。 | + +**富文本 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| --------------------- | ------ | ------------------------------------------------------- | ------------------------------------------------------------ | +| flutter_html_view | 0.5.2 | https://pub.dev/packages/flutter_html_view | Flutter没有默认的支持来显示html,所以需要三方的包来显示。这个包可以将html呈现给原生的Widget。(目前支持的标签比较少) | +| flutter_html_textview | 0.2.6 | https://pub.dev/packages/flutter_html_textview | 将html呈现为一个Widget,在textview中呈现html。 | + +**MarkDown ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| ---------------- | ------ | ------------------------------------------- | ------------------------------------------------------------ | +| flutter_markdown | 0.1.3 | https://github.com/flutter/flutter_markdown | 官方的MarkDown库,它支持原始MarkDown格式,但没有内联Html格式。 | +| markdown | 2.0.0 | https://pub.dev/packages/markdown | 用Dart编写的便携式Markdown库。它可以在客户端和服务器上将Markdown解析为HTML。 | +| html2md | 0.1.7 | https://pub.dev/packages/html2md | 将html转换为Dart中的MarkDown. | + +**动画有关的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------------- | ------ | ----------------------------------------- | ------------------------------------------------------------ | +| flutter_villains | 1.0.1 | https://pub.dev/packages/flutter_villains | 页面切换动画的一个库,简化动画操作,你只需要管理好UI就可以了。 | +| flutter_spinkit | 4.0.0 | https://pub.dev/packages/flutter_spinkit | 加载数据时的各种渐变进度动画(比如:菊花进度、圆环进度、旋转进度等)。具体演示效果可以看github: | +| progress_indicators | 0.1.4 | https://pub.dev/packages/progress_indicators | 这里有一些很酷的动画进度指示器可以使用。具体演示效果可以看github:https://github.com/wal33d006/progress_indicators | + +**针对Android和ios平台的UI适配库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ------------------------------------------------------------ | +| platform_aware | 0.4.0 | https://pub.dev/packages/platform_aware | 为自动适应当前平台而包装的Flutter组件,不需要对iOS和Android进行代码更改。所有小部件都依赖于Theme.of(context).platform来确定当前活动平台的平台。你可以使用Flutter Inspector动态地更改平台。 | +| native_widgets | 0.0.3 | https://pub.dev/packages/native_widgets | 为避免重复代码,只编写一次代码就可以支持两个平台并自动根据平台自动使用对应风格组件,Android将使用材料设计,iOS将使用Cupertino风格的小部件。 | + +**日历库(主要是用于显示和操作日历)** + +| 库名 | 版本号 | 链接 | 描述 | +| ---------------- | ------ | -------------------------------------------------- | -------------------------------------------------------- | +| flutter_calendar | 0.0.4 | https://pub.dev/packages/flutter_calendar | 适用于Flutter的日历小组件。 | +| calendarro | 0.0.1 | https://pub.dev/packages/calendarro | Flutter的日历组件库。 这个库提供了多种自定义组件的方法。 | + + + +**日期,时间,日期时间,icon,自定义数据的选择器(很全面) ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ------------------------------------------------------------ | +| flutter_picker | 0.0.3 | https://pub.dev/packages/flutter_picker | 一个日期,时间,日期时间,icon,自定义数据的选择器,可以居中弹窗,也可以在底部弹出。(目前来看是最全面的一个选择器控件。该插件支持ios和android平台,使用的是ios的风格的UI效果。) | + +**图片选择的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------------------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| image_picker | 0.4.5 | https://pub.dev/packages/image_picker | 适用于iOS和Android的Flutter插件,用于从图像库中拾取图像,并使用相机拍摄新照片。(功能正在完善中) | +| flutter_multiple_image_picker | 0.0.1 | https://pub.dev/packages/flutter_multiple_image_picker | 一个新的Flutter插件,用于从图库中选择多个图像。 | + +**联系人选择的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ------------------------------------------------------------ | +| contact_picker | 0.0.2 | https://pub.dev/packages/contact_picker | 使用此插件,Flutter应用程序可以地址簿中选择联系人,并将联系人信息返回给应用程序,并且不需要用户的任何特殊权限。目前该插件仅支持选择电话号码。 | + +**颜色选择的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| --------------------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| flutter_color_picker | 0.0.1 | https://pub.dev/packages/flutter_color_picker | 一个简单的颜色选择器,类似于安卓的selector的功能,可以在点击控件时,给控件设置选择器效果。 | +| material_color_picker | 0.0.1 | https://pub.dev/packages/material_color_picker(这个是旧版本) | 这个是Flutter的颜色选择器,基于Google Docs颜色选择器。这个用于选择颜色,你想用哪一个颜色,可以弹窗自由选择。 | +| material_pickers | 0.0.2 | https://pub.dev/packages/material_pickers(这个是新版本) | 这个是Flutter的颜色选择器,基于Google Docs颜色选择器。这个用于选择颜色,你想用哪一个颜色,可以弹窗自由选择。 | +| flutter_colorpicker | 0.0.5 | https://pub.dev/packages/flutter_colorpicker | 这是一个HSV的颜色选择器 | + +**轮播图有关的库(以及Tab PagerView有关的库) ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| ------------------ | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| flutter_swiper | 1.0.4 | https://pub.dev/packages/flutter_swiper 对应的github地址https://github.com/best-flutter/flutter_swiper | Flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配. | +| infinity_page_view | 1.0.0 | https://pub.dev/packages/infinity_page_view | Flutter无限页面视图。 | +| carousel | 0.1.0 | https://pub.dev/packages/carousel | 一个简单的轮播组件(待完善)。 | +| page_transformer | 0.0.1 | https://pub.dev/packages/page_transformer | 用于在Flutter中创建漂亮的PageView视差效果的示例项目。 | + +**导航栏有关的库(库) ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ---------------------- | +| navigation_bar | 0.0.1 | https://pub.dev/packages/navigation_bar | 一个简易的底部导航栏。 | + + + +**列表有关的库 ↓** + +| 库名 | 版本号 | 链接 | 描述 | +| -------------------- | ------ | ------------------------------------------------------ | ------------------------------------------------------------ | +| flutter_pagewise | 0.2.0 | https://pub.dev/packages/flutter_pagewise | 一次加载一页(或批处理)内容(也称为延迟加载) | +| lazy_load_scrollview | 0.0.2 | https://pub.dev/packages/lazy_load_scrollview | ScrollView的包装器,可以启用延迟加载,当到达页面底部时将触发回调。 | + diff --git "a/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/data_libs.md" "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/data_libs.md" new file mode 100644 index 0000000..4729a0d --- /dev/null +++ "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/data_libs.md" @@ -0,0 +1,178 @@ +## 常用开源包: + + +> 网络请求(加载网络数据,发送数据到服务端) + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------- | --------- | --------------------------------------------------- | ------------------------------------------------------------ | +| http | 0.11.3+16 | https://pub.dartlang.org/packages/http | 该软件包包含一组高级函数和类,可以轻松使用HTTP资源。它与平台无关,可以在命令行和浏览器上使用。 | +| dio | 0.0.14 | https://pub.dartlang.org/packages/dio | Dart的一个强大的Http客户端,支持拦截器、全局配置、FormData、请求取消、文件下载、超时等。 | +| http_multi_server | 2.0.5 | https://pub.dartlang.org/packages/http_multi_server | dart:io HttpServer包装器,用于处理来自多个服务器的请求 | +| jaguar_retrofit | 2.8.6 | https://pub.dartlang.org/packages/jaguar_retrofit | Dart版本的Retrofit库,用于实现一个HTTP客户端API生成器。(我给它点评:666!思想都是相通的。) | + +---- + +> 类型编解码的库(字符编解码): + +| 库名 | 版本号 | 链接 | 描述 | +| ------------- | ------ | ----------------------------------------------- | ------------------------------------------------------------ | +| html_unescape | 1.0.0 | https://pub.dartlang.org/packages/html_unescape | 用于解决HTML编码字符串的Dart库。支持所有命名字符引用(如` `),小数字符引用(如`á`)和十六进制字符引用(如`ã`)。 | +| gbk2utf8 | | https://github.com/jzoom/gbk2utf8 | 官方的http还不能支持中文gbk的解析,这个项目就是为了解决gbk转成utf-8编码的。 | + +---- + +> 序列化 + +* 手动序列化: + +使用 `dart:convert` 的内置解码器。包括传入 JSON 原始字符串给 JSON.decode() 方法,然后从 Map 中查询你需要的数据。 + +* 自动序列化: + +| 库名 | 版本号 | 链接 | 描述 | +| --------------------- | ------ | ------------------------------------------------------- | ------------- | +| json_serializable | 0.5.7 | https://pub.dartlang.org/packages/json_serializable | | +| built_value | 5.5.1 | https://pub.dartlang.org/packages/built_value | runtime依赖项 | +| built_value_generator | 5.5.1 | https://pub.dartlang.org/packages/built_value_generator | dev依赖项 | +| built_value_test | 5.5.1 | https://pub.dartlang.org/packages/built_value_test | test依赖项 | + +---- + +> Json解析(json解析成Map或对象) + +| 库名 | 版本号 | 链接 | 描述 | +| ------- | ------------ | ----------------------------------------- | ------------------------------------------------------ | +| codable | 1.0.0-beta.2 | https://pub.dartlang.org/packages/codable | 用于将动态结构化数据(JSON,YAML)转换为Dart类型的库。 | +|Dson|0.16.0|https://pub.dartlang.org/packages/dson|描述:Dson的github地址: [https://github.com/drails-dart/dson](https://github.com/drails-dart/dson),DSON是一个将Dart对象转换为JSON的库。(用于web)这个库是Dartson的一个分支,但又有不同。| + +> Github上面的库或者IDE插件: + +* https://github.com/javiercbk/json_to_dart 根据json生成Dart实体类 +* https://github.com/debuggerx01/JSONFormat4Flutter 这是一个AS的辅助插件,将JSONObject格式的String解析成Dart的实体类 + +* JsonToDartWeb是一个全平台的json转Dart的工具,支持包括:Windows,Mac,Web以及Linux(linux待测试)。Github地址:https://github.com/fluttercandies/JsonToDartWeb + +> **几个Json库的比较:[https://github.com/drails-dart/dart-serialise](https://github.com/drails-dart/dart-serialise)** + +| 方式 | 大小 (js) | 序列化 (dart) | 反序列化 (dart) | 序列化 (js) | 反序列化 (js) | +| ----------------- | --------- | ------------- | --------------- | ----------- | ------------- | +| json_serializable | 80 KB | 9.09 ms | 6.61 ms | 8.23 ms | 8.12 ms | +| Serializable | 79 KB | 6.1 ms | 6.92 ms | 4.37 ms | | +| DSON | 94 KB | 12.72 ms | 11.15 ms | 16.64 ms | 17.94 ms | +| Dartson | 86 KB | 9.61 ms | 6.81 ms | 8.58 ms | 7.01 ms | +| Manual | 86 KB | 8.29 ms | 5.78 ms | 10.7 ms | 7.9 ms | +| Interop | 70 KB | 61.55 ms | 14.96 ms | 2.49 ms | 2.93 ms | +| Jaguar_serializer | 88 KB | 8.57 ms | 6.58 ms | 10.31 ms | 8.59 ms | +| Jackson (Groovy) | | 496 ms | 252 ms | n/a | n/a | + +> 反序列化(将Dart文件转换成json字符串) + +* Dartson是一个Dart库,可用于将Dart对象转换为JSON字符串。github地址:https://github.com/eredo/dartson (用于web) + +> 让Json在手机上可视化的插件(可以体验一下) + +|库名|版本号|链接|描述| +|----|----|----|----| +|json_table|1.3.2|[https://pub.dev/packages/json_table](https://pub.dev/packages/json_table)|这个Flutter软件包提供了一个Json Table小部件,用于直接显示json(Map)中的表。还支持列切换。| +|flutter_json_widget|1.0.2|[https://pub.dev/packages/flutter_json_widget](https://pub.dev/packages/flutter_json_widget)|这是一个用于显示Json对象的组件,可以查看Json的内容(相当于Flutter版的JsonViewer的工具)| + + +---- + +**编解码、加密解密(AES、RSA等)有关的库** + +| 库名 | 版本号 | 链接 | 描述 | +| ------- | ------ | ----------------------------------------- | ------------------------------------------------------------ | +| ninja | 1.0.0 | https://pub.dartlang.org/packages/ninja | 在Dart的Converter和Codec接口上完善的AES以及RSA加密解密算法的库。 | +| archive | 2.0.0 | https://pub.dartlang.org/packages/archive | 为各种存档和压缩格式提供编码器和解码器,如zip,tar,bzip2,gzip和zlib。(不知道移动端能否用得到,文档说服务端和web端可以用。) | + +---- + +> 系统平台有关的库(设备信息、蓝牙、wifi、文件等): + +| 库名 | 版本号 | 链接 | 描述 | +| -------------------- | ------ | ---------------------------------------------------- | ------------------------------------------------------------ | +| **分享(官方的库)** | | | | +| share | 0.5.2 | https://pub.dartlang.org/packages/share | 用于通过平台共享UI共享内容,使用Android上的ACTION_SEND意图和iOS上的UIActivityViewController。 | +| **获取本地文件** | | | | +| path_provider | 0.4.1 | https://pub.dartlang.org/packages/path_provider | 用于获取Android和iOS文件系统上的常用位置,例如temp和app数据目录。 | +| **读写sp文件** | | | | +| shared_preferences | 0.4.2 | https://pub.dartlang.org/packages/shared_preferences | 用于读写简单键值对的Flutter插件。包装iOS上的NSUserDefaults和Android上的SharedPreferences。 | +| **网络状态有关** | | | | +| connectivity | 0.3.1 | https://pub.dartlang.org/packages/connectivity | 用于发现Android和iOS上的网络状态(WiFi和移动/蜂窝)连接。 | +| **设备信息** | | | | +| device_info | 0.2.1 | https://pub.dartlang.org/packages/device_info | 提供有关设备(品牌,型号等)的详细信息,以及应用程序正在运行的Android或iOS版本。 | +| **蓝牙** | | | | +| flutter_blue | 0.3.3 | https://pub.dartlang.org/packages/flutter_blue | 这是跨平台的蓝牙sdk. | +| flutter_ble_lib | 1.0.0 | https://pub.dartlang.org/packages/flutter_ble_lib | 这是一个支持蓝牙连接的flutter库。它里面使用RxAndroidBle和RxBluetoothKit作为本地库。 | + +---- + +> 国际化和本地化(多国语言版本): + +| 库名 | 版本号 | 链接 | 描述 | +| ---- | ------ | -------------------------------------- | ------------------------------------------------------------ | +| intl | 0.15.6 | https://pub.dartlang.org/packages/intl | 这个包提供国际化和本地化功能,包括消息翻译、复数和性别、日期/数字格式和解析以及双向文本。 | + +---- + +> 图片加载和缓存 + +使用`Image.network`,或者使用下面这个库: + +| 库名 | 版本号 | 链接 | 描述 | +| -------------------- | ------- | ------------------------------------------------------ | ------------------------------------------------------------ | +| cached_network_image | 0.4.1+1 | https://pub.dartlang.org/packages/cached_network_image | Flutter库来加载和缓存网络图像。也可以与占位符和错误小部件一起使用。 | + +---- + +> 数据存储、缓存有关的库 + + +| 库名 | 版本号 | 链接 | 描述 | +| ---------- | ------------- | -------------------------------------------- | ------------------------------------------------------------ | +| sqflite | sqflite0.10.0 | https://pub.dartlang.org/packages/sqflite | SQLite的Flutter插件,一个自包含的高可靠性嵌入式SQL数据库引擎。 | +| file_cache | 0.0.1 | https://pub.dartlang.org/packages/file_cache | 为flutter package项目缓存Json,Buffer,FileCacheImage。 | + +---- + +> 路由(导航切换): + +| 库名 | 版本号 | 链接 | 描述 | +| ----- | ------ | --------------------------------------- | ------------------------------------------------------------ | +| fluro | 1.3.1 | https://pub.dartlang.org/packages/fluro | 最好用的路由导航框架。功能:简单的路线导航;函数处理程序(映射到函数而不是路径);通配符参数匹配;查询字符串参数解析;内置常用转换;简单的定制转换创建。 | + +---- + +> 消息传递通信有关: + +| 库名 | 版本号 | 链接 | 描述 | +| --------------------------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| flutter_local_notifications | 0.3.0 | https://pub.dartlang.org/packages/flutter_local_notifications | 一个跨平台的显示本地notifications的插件。 | +| local_notifications | 0.0.6 | https://pub.dartlang.org/packages/local_notifications | 这个库能让你在Android和iOS上创建Notifications很简单。 | +| url_launcher | 3.0.2 | https://pub.dartlang.org/packages/url_launcher | 用于在Android和iOS上启动URL。支持网络,电话,短信和电子邮件方案。 | +| firebase_messaging | 1.0.2 | https://pub.dartlang.org/packages/firebase_messaging | 一款跨平台的消息传递解决方案,可让您在Android和iOS上可靠地传递消息。 | +| event_bus | 0.4.1 | https://pub.dartlang.org/packages/event_bus | 一个使用Dart流进行解耦应用程序的简单事件总线的库。 | + +---- + +> 视频 & 音频处理: + +| 库名 | 版本号 | 链接 | 描述 | +| ------------------ | ------ | ---------------------------------------------------- | ------------------------------------------------------------ | +| video_player | 0.6.5 | https://pub.dartlang.org/packages/video_player | Flutter官方的视频库(也可以用于直播),用于在Android和iOS上与其他Flutter窗口小部件一起显示内嵌视频。**支持主流直播流**。该库底层使用的ExoPlayer播放器。更多关于ExoPlayer播放器支持的视频格式资料请看官方文档[ExoPlayer播放器支持的视频格式](https://google.github.io/ExoPlayer/supported-formats.html) | +| video_launcher | 0.3.0 | https://pub.dartlang.org/packages/video_launcher | 视频播放器 | +| flute_music_player | 0.0.6 | https://pub.dartlang.org/packages/flute_music_player | 基于Flutter的材料设计音乐播放器与音频插件播放本地音乐文件. | +| audioplayer | 0.5.0 | https://pub.dartlang.org/packages/audioplayer | 一个播放远程或本地音频文件Flutter音频插件 | +| audioplayers | 0.5.2 | https://pub.dartlang.org/packages/audioplayers | 这是rxlabz的audioplayer的一个分支,不同之处在于它支持同时播放多个音频并显示音量控制。 | + +---- + +> Rx系列(异步任务流的操作、(注:Rx是一种思想,各类常用语言都有这个技术,如:RxJava、RxKotlin、RxJs、RxSwift等)): + +| 库名 | 版本号 | 链接 | 描述 | +| ---------- | ------ | -------------------------------------------- | ------------------------------------------------------------ | +| rxdart | 0.17.0 | https://pub.dartlang.org/packages/rxdart | RxDart是一种基于ReactiveX的谷歌Dart反应性函数编程库。谷歌Dart自带了一个非常不错的流API;RxDart没有尝试提供这个API的替代方案,而是在它上面添加了一些功能。 | +| rx_widgets | 1.0.3 | https://pub.dartlang.org/packages/rx_widgets | rx_widgets是一个包含基于流的Flutter Widgets和Widget帮助程序/便利类的程序包,它们有助于反应式编程风格,特别是与RxDart和RxCommands结合使用。 | +| rx_command | 2.0.0 | https://pub.dartlang.org/packages/rx_command | RxCommand是针对事件处理程序的基于Reactive Extensions(Rx)的抽象。它基于ReactiveUI框架的ReactiveCommand。它大量使用了RxDart包。 | + diff --git "a/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/third_libs.md" "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/third_libs.md" new file mode 100644 index 0000000..8b2e189 --- /dev/null +++ "b/readme/Flutter\347\232\204\351\234\200\350\246\201\344\270\216\345\216\237\347\224\237\344\272\244\344\272\222\347\232\204\344\270\200\344\272\233\345\270\270\347\224\250\345\272\223/third_libs.md" @@ -0,0 +1,143 @@ +## 第三方sdk有关的: + +**由于开发中会用到一些三方的sdk,但是国内的sdk目前还没有支持Flutter,我在pub上面收集了一些相关的三方库,也不知道效果如何,待检验,欢迎各位试用给出反馈。** + + +> 地图(地图显示、定位、经纬度等) + +| 库名 | 版本号 | 链接 | 描述 | +| ----------- | ------ | --------------------------------------------- | ------------------------------------------------------------ | +| map_view | 0.0.12 | https://pub.dartlang.org/packages/map_view | 一个用于在iOS和Android上显示谷歌地图的Flutter插件 | +| flutter_map | 0.0.10 | https://pub.dartlang.org/packages/flutter_map | 基于leaflet的Flutter地图包 | +| location | 1.3.4 | https://pub.dartlang.org/packages/location | 这个插件 处理Android和iOS上的位置。它还提供位置更改时的回调。 | +| latlong | 0.5.3 | https://pub.dartlang.org/packages/latlong | LatLong是一个计算通用的纬度和经度的轻量级库。 | + +---- + +> 二维码 + +| 库名 | 版本号 | 链接 | 描述 | +| ------------- | ------ | ----------------------------------------------- | ------------------------------------------------------------ | +| qr_flutter | 1.1.5 | https://pub.dartlang.org/packages/qr_flutter | QR.Flutter是一个Flutter库,基于QR-Dart,可通过Widget或自定义Paint进行简单快速的QR码渲染。可配置的输出大小、填充、背景和前景颜色。可以导出图像数据。不需要Internet连接。 | +| barcode_scan | 0.0.8 | https://pub.dartlang.org/packages/barcode_scan | 用于扫描2D条形码和QRCodes的Flutter插件。 | +| qrcode_reader | 0.4.4 | https://pub.dartlang.org/packages/qrcode_reader | 使用相机读取二维码的Flutter插件。 | + +---- + +> WebView(Flutter和JavaScript交互) + +| 库名 | 版本号 | 链接 | 描述 | +| ---------------------- | ------ | -------------------------------------------------------- | ---------------------------------------- | +| flutter_webview_plugin | 0.1.6 | https://pub.dartlang.org/packages/flutter_webview_plugin | 允许Flutter与原生Webview进行通信的插件。 | + +---- + +> 图表库 + +| 库名 | 版本号 | 链接 | 描述 | +| ---------------------- | ------ | -------------------------------------------------------- | ------------------------------------------------- | +| charts-common | 0.3.0 | https://pub.dartlang.org/packages/charts_flutter | Material Design风格的图表库 | +| charts-flutter | 0.3.0 | https://pub.dartlang.org/packages/charts_common | 通用的图表库组件 | +| flutter_circular_chart | 0.0.3 | https://pub.dartlang.org/packages/flutter_circular_chart | 一个让你使用flutter轻松创建的动画圆形图控件的库。 | + +---- + +> 权限库(移动端App需要申请权限,必备) + +| 库名 | 版本号 | 链接 | 描述 | +| -------------------------- | ------ | ------------------------------------------------------------ | ------------------------------ | +| simple_permissions | 0.1.5 | https://pub.dartlang.org/packages/simple_permissions | 用于android和ios的请求权限的库 | +| flutter_simple_permissions | 0.0.1 | https://pub.dartlang.org/packages/flutter_simple_permissions | 权限申请的库 | + +---- + +> 统计(统计App的有关数据,比如日活跃量、用户量、下载量、在线时长等) + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------------- | ------ | --------------------------------------------------------- | ----------------------- | +| flutter_umeng_analytics | 0.0.1 | https://pub.dartlang.org/packages/flutter_umeng_analytics | 这个库集成了友盟统计sdk(网友写的,并非官方的。) | +|janalytics|0.0.3|https://github.com/jpush/janalytics-flutter-plugin|极光统计SDK的Flutter官方版本。| +|-|-|-|目前友盟的U-App移动统计还没有推出Flutter版本的插件库。| + +---- + +> 分享和登陆(QQ、微信、微博等平台的分享和登陆) + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ------------------------------------------------------------ | +| sharesdk | 1.0.9 | https://pub.dartlang.org/packages/sharesdk | ShareSDK官方推出的功能的Flutter插件,用于分享、登陆等社交功能。 | +| share | 0.5.1 | https://pub.dartlang.org/packages/share | 支持分享的flutter插件 | +| flutter_qq | 0.0.1 | https://pub.dartlang.org/packages/flutter_qq | 这个库集成了QQ登录、QQ分享、QQ空间分享。 | +| flutter_wechat | 0.1.2 | https://pub.dartlang.org/packages/flutter_wechat | 这个库集成了微信,支持微信登录、分享、支付。 | +|-|-|-|极光针对Android和iOS各自都有SDK,只是目前极光还没有把分享和登陆集成到Flutter里。| +|-|-|-|目前友盟的U-Share社会化分享还没有推出Flutter版本的插件库。| + +---- + +> 推送(把服务端的消息推送到移动设备上必备的) + +| 库名 | 版本号 | 链接 | 描述 | +| -------------------- | ------ | --------------------------------------------- | -------------------- | +| jpush-flutter | 0.2.0 | https://github.com/jpush/jpush-flutter-plugin | 极光推送官方的插件库 | +|mobpush|0.0.5|https://pub.dartlang.org/packages/mobpush|Mob官方的推送插件。使用此插件能够帮助您在使用 Flutter 开发应用时,快速地实现推送功能。Demo例子:https://github.com/MobClub/MobPush-for-Flutter| +|-|-|-|目前友盟的U-push推送还没有推出Flutter版本的插件库。| + +---- + +> IM(即时通讯(聊天)等使用场景) + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------------- | ------ | ------------------------------------------------ | -------------------------------------- | +|rongcloud_im_plugin|0.9.9|https://github.com/rongcloud/rongcloud-im-flutter-sdk|基于融云 iOS/Android 平台的 IMLib SDK。配套的示例项目请点击:https://github.com/rongcloud/imkit-flutter-quickstart| +| jmessage-flutter | 0.4.0 | https://github.com/jpush/jmessage-flutter-plugin | 极光官方推出的IM聊天、社交功能的插件。 | + +---- + +> RTC(音视频会议通话等使用场景) + +| 库名 | 版本号 | 链接 | 描述 | +| ----------------------- | ------ | ------------------------------------------------ | -------------------------------------- | +|-|-|-|目前极光的JMRTC还没有推出Flutter版本的插件库。(极光针对Android和iOS各自都有SDK,只是目前极光还没有把JMRTC集成到Flutter里面)。| +|rongcloud_rtc_plugin|0.9.9|https://github.com/rongcloud/rongcloud-rtc-flutter-sdk|基于 融云 iOS/Android 平台的 RTCLib SDK| +|Agora-Flutter-Quickstart|-|https://github.com/AgoraIO-Community/Agora-Flutter-Quickstart|声网官方集成的RTC SDK示例| + +---- + +> 视频播放(本地视频、网上视频、或者rtmp源格式) + +https://github.com/hyz1992/my_aliplayer 集成了阿里云播放器,可以用来播放视频,也可以播放rtmp格式。 + +---- + +> 支付(使用支付宝、微信支付等支付方式) + +| 库名 | 版本号 | 链接 | 描述 | +| -------------- | ------ | ------------------------------------------------ | ------------------------------------ | +||||目前的做法是:自己去把支付宝和微信分别集成。| +| flutter_alipay | 0.1.0 | https://pub.dartlang.org/packages/flutter_alipay | 这个库继承了支付宝,兼容android和ios | + +---- + +> SMS(短信验证码) + +库名|版本号|链接|描述 +-|-|-|- +|mobsms|1.0.1|https://pub.dartlang.org/packages/mobsms|为开发者提供全球通用的短信验证码工具。使用此插件能够帮助您在使用Flutter开发应用时,快速地实现获取验证码功能。| +|jverify|0.5.2|https://github.com/jpush/jverify-flutter-plugin|极光认证整合了三大运营商的网关认证能力,为开发者提供了一键登录和号码认证功能,目前极光把这些集成到Flutter里。| + +---- + +> 网页页面跳转到App具体页面(APP的链接化) + +|库名|版本号|链接|描述| +|-|-|-|-| +|moblink|3.1.0|https://pub.dartlang.org/packages/moblink|MobLink提供Web与APP直接跳转的完全免费产品服务,实现网页间直接跳转升级为APP间直接跳转。| +|-|-|-|极光有一个JMLink SDK,目前有Android和iOS版,还没有Flutter版本,坐等完善。| + +---- + +## 一个好玩的库: + +| 库名 | 版本号 | 链接 | 描述 | +| ---- | ------ | ------------------------------------- | ------------------------- | +| pwa | 0.1.10 | https://pub.dartlang.org/packages/pwa | 基于Dart的PWA应用程序的库 |