{"id":20466112,"url":"https://github.com/xfhy/wanandroid-flutter","last_synced_at":"2025-04-13T09:05:49.386Z","repository":{"id":127029387,"uuid":"247834387","full_name":"xfhy/WanAndroid-Flutter","owner":"xfhy","description":"Flutter版本 WanAndroid客户端 适合Flutter入门学习 ","archived":false,"fork":false,"pushed_at":"2020-04-13T12:02:45.000Z","size":14672,"stargazers_count":53,"open_issues_count":0,"forks_count":12,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-13T09:05:44.304Z","etag":null,"topics":["android","dart","flutter","ios"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xfhy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-16T23:11:24.000Z","updated_at":"2025-04-06T06:43:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"7f55593f-f784-4520-9aad-cc525544a0f7","html_url":"https://github.com/xfhy/WanAndroid-Flutter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfhy%2FWanAndroid-Flutter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfhy%2FWanAndroid-Flutter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfhy%2FWanAndroid-Flutter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfhy%2FWanAndroid-Flutter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xfhy","download_url":"https://codeload.github.com/xfhy/WanAndroid-Flutter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248688573,"owners_count":21145766,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","dart","flutter","ios"],"created_at":"2024-11-15T13:21:47.820Z","updated_at":"2025-04-13T09:05:49.380Z","avatar_url":"https://github.com/xfhy.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"![image](https://img.shields.io/badge/api-%2B16-blue.svg)\n![image](https://img.shields.io/badge/license-Apache2.0-blue.svg)\n[![image](https://img.shields.io/badge/author-xfhy-orange.svg)](https://github.com/xfhy)\n[![image](https://img.shields.io/badge/CSDN-潇风寒月-orange.svg)](https://blog.csdn.net/xfhy_)\n\n## 1. WanAndroid-Flutter\n\nFlutter版本 WanAndroid客户端,适合Flutter入门学习.该项目是我在学习Flutter过程中写的.\n\n## 2. 技术点\n\n- 封装 上拉加载,下拉刷新\n- dio进行网络请求,统一封装get,post\n- 封装banner\n- Future\n- 路由,跳转界面\n- 事件总线 event_bus\n- toast\n- SharedPreference\n- ....\n\n## 3. 项目截图\n\n\u003cp\u003e\n\u003cimg src=\"./pic/image1.png\" width=\"225\" height=\"400\"/\u003e\n\u003cimg src=\"./pic/image2.png\" width=\"225\" height=\"400\"/\u003e\n\u003cimg src=\"./pic/image3.png\" width=\"225\" height=\"400\"/\u003e\n\u003cimg src=\"./pic/image4.png\" width=\"225\" height=\"400\"/\u003e\n\u003cimg src=\"./pic/image5.png\" width=\"225\" height=\"400\"/\u003e\n\u003cimg src=\"./pic/image6.png\" width=\"225\" height=\"400\"/\u003e\n\u003c/p\u003e\n\nrelease 版本[试玩地址](http://d.alphaqr.com/3s7z)\n\n![](https://s1.ax1x.com/2020/04/05/Gr1I0I.png)\n\n## 4. 遇到的一些问题\n\n### 4.1 引入第三方库\n\n1. 首先去[官网package](https://pub.dev/packages)搜索.\n2. 找到相应插件,点进详情,切换到Installing tab,然后在pubspec.yaml中引入该插件.\n3. 在本项目控制台,输入flutter pub get. 即引入三方库完成.\n\n### 4.2 loading\n\n当页面正在loading时,需要一个Widget来占位,不然Widget为空要报错.\n\n### 4.3 运行在iOS上\n\n1. 首先得安装Xcode(7.8G)\n2. 然后安装 cocoapods `sudo gem install cocoapods`\n3. 然后在ios工程下,执行`pod install`,引入那些依赖\n4. 然后用AS打开ios项目里面的Info.plist,点击右上角的用Xcode打开.\n5. 编辑Podfile,将顶部的`platform :ios, '9.0'` 注释放开\n6. 运行到模拟器上.\n\n### 4.4 如何快速解析json\n\n\u003e Flutter不支持运行时反射,所以没有像Gson这样自动解析JSON的库来降低解析成本.在Flutter中解析JSON需要完全手动进行操作,麻烦.\n\n可以在AS上装FlutterJsonBeanFactory这个插件,然后右键New-\u003eJsonToDartBeanAction,输入文件名和json数据.即可自动生成bean对象,和它所对应的解析代码.\n\n原理是它生成了一个JsonConvert,然后这里面可以根据运行时type去选择应该解析哪一个类对象.\n然后bean类在声明的时候是混入了JsonConvert的,可以直接使用JsonConvert里面的方法,完美.\n\n### 4.5 Flutter ScrollView (滚动视图)\n\nScrollView是一个带有滚动的视图组件,它本身由三部分组成\n\n- Scrollable - 它监听各种用户手势并实现滚动的交互设计。\n- Viewport - 它通过在滚动视图内仅显示一部分小部件来实现滚动的可视化设计。\n- Slider - 它们是可以组合以创建各种滚动效果的小部件，如列表，网格和扩展标题。\n\nScroll是一个抽象类,通常使用CustomScrollView\n\n```\nCustomScrollView(\n    shrinkWrap: true,\n    // 内容\n    slivers: \u003cWidget\u003e[\n        new SliverPadding(\n            padding: const EdgeInsets.all(20.0),\n            sliver: new SliverList(\n                delegate: new SliverChildListDelegate(\n                    \u003cWidget\u003e[\n                        const Text('A'),\n                        const Text('B'),\n                        const Text('C'),\n                        const Text('D'),\n                    ],\n                ),\n            ),\n        ),\n    ],\n)\n```\n\n### 4.6 处理Text超出问题\n\n可以放Row或Column中,用Expanded包起来,然后用maxLines控制行数,用`overflow:\nTextOverflow.ellipsis,`控制超出部分的展示.\n\n### 4.7 让一个ListView支持下拉刷新\n\n非常简单,\n使用官方自带的RefreshIndicator即可,将listview放child,然后实现一个_pullToRefresh下拉刷新时调用的方法(做下拉刷新的逻辑).\n\n```\nRefreshIndicator(\n      child: listView,\n      onRefresh: _pullToRefresh,\n    );\n\nFuture\u003cvoid\u003e _pullToRefresh() {\n    loadData();\n    //这里Feature不能返回 null\n    return Future(() =\u003e LogUtil.d(\"lalala\"));\n  }\n```\n\n### 4.8 获取屏幕宽度,高度\n\n```\nMediaQuery.of(context).size.width,\nMediaQuery.of(context).size.height\n```\n\n### 4.9 封装通用标题栏\n\n标题栏,每个界面都需要,所以封装一个,取需.\n\n```dart\n///get通用状态栏\nstatic AppBar getCommonAppBar(BuildContext context, String title, {double fontSize, List\u003cWidget\u003e actions}) {\nif (title == null) {\n  title = \"\";\n}\nreturn AppBar(\n  leading: IconButton(\n    icon: Icon(\n      Icons.arrow_back,\n      color: Colors.white,\n    ),\n    //点击返回\n    onPressed: () {\n      if (context != null) {\n        Navigator.pop(context);\n      }\n    },\n  ),\n  title: Text(\n    title,\n    style: TextStyle(\n      color: Colors.white,\n      fontSize: fontSize == null ? 18.0 : fontSize,\n    ),\n  ),\n  //标题栏居中\n  centerTitle: true,\n  //右边的action 按钮\n  actions: actions == null ? \u003cWidget\u003e[] : actions,\n);\n}\n```\n\n### 4.10 格式化String\n\ndart中格式化String,需要引入三方库`sprintf`,使用方式如下:\n\n```dart\nsprintf(\"lg/collect/%s/json\", [15615]);\n```\n\n### 4.11 获取Android/iOS本地目录\n\n需要引入三方库`path_provider`,用于查找文件系统上的常用位置,支持Android和iOS.免得去写一原生代码,这个三方库帮我们封装好了.\n\n```dart\nDirectory tempDir = await getTemporaryDirectory();\nString tempPath = tempDir.path;\n\nDirectory appDocDir = await getApplicationDocumentsDirectory();\nString appDocPath = appDocDir.path;\n```\n\n### 4.12 展示一个Dialog\n\n以下方法是dart的material包下面的方法.\n\n```dart\n//展示对话框\nshowDialog(\n        context: context,\n        barrierDismissible: false,\n        builder: (_) {\n          return SpinKitFadingCircle(\n            color: AppColors.colorPrimary,\n          );\n        });\n\n//取消对话框\nNavigator.of(context).pop();\n```\n\n### 4.13 间距的简单方式\n\n可以用Padding和margin来实现.其实还有一种方式,可以在Column和Row中快速增加一段间距,利用SizedBox,类似Android中的Space\n\n```dart\nSizedBox(width: 10.0),\n```\n\n### 4.14 收起软键盘\n\n有时候需要在点击某些按钮时收起软键盘\n```dart\nFocusScope.of(context).requestFocus(FocusNode());\n```\n\n### 4.15 让ListView的item点击时有水波纹效果\n\n用InkWell把Item包起来\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxfhy%2Fwanandroid-flutter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxfhy%2Fwanandroid-flutter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxfhy%2Fwanandroid-flutter/lists"}