创建组件“ovalshape”失败_Flutter实战 | 从 0 搭建网易云音乐APP(一、创建项目、添加插件、通用代码)...

本系列可能会伴随大家很长时间,这里我会从0开始搭建一个「网易云音乐」的APP出来。

下面是该APP 功能的思维导图:

c5a3dffc7f53217102ac395d2d1f90fa.png

因为工作的原因,一星期有可能只更新一篇该系列的文章,不过一星期最少一篇。

本章节为第一节,从创建项目说起。

创建「网易云音乐」项目

首先看一下本地 Flutter 环境:

6559866a09ca7bd8ad1982f1a0d34699.png

创建命令就都知道了,不用命令的话,用 AS 或者 VS 更简单。

81af2bc56e1bbfd4584e11d5f64ddd13.png

项目创建好后,删除无用代码,然后开始创建文件夹:

95f4d05602125246329c1c81324f9883.png

一共分为六个文件夹:

•model:存放所有数据类•pages:存放所有的页面•provider:存放所有的 Provider•route:存放路由相关•utils:存放所有的工具类•widgets:存放所有封装好的组件

下面我们开始添加依赖。

添加插件

首先对我们一些大概的功能有一个了解,

例如 网络请求肯定有,那我会选择 Dio 来当做网络请求的插件,

下面是目前所想到的插件:

插件作用
Provider[1]状态管理,UI、数据 分离
shared_preferences[2]本地存储数据,持久化
dio[3]网络请求
flutter_screenutil[4]屏幕适配
fluro[5]路由管理
common_utils[6]Dart 常用工具类
dio_cookie_manager[7]dio cookie 工具
cookie_jar[8]Cookie 管理
permission_handler[9]权限处理
path_provider[10]沙盒路径
extended_image[11]屌炸天的 Image 扩展

通用代码

a6b3f315bfcd481b0eb2acc49e607bf2.png

功能如下:

插件作用
routes.dartfluro 的路由管理
net_utils.dart网络请求管理
common_text_style.dart一些通用的 text 样式
h_empty_view.dart横向空组件(用于占位)
v_empty_view.dart纵向空组件(用于占位)
loading.dart加载组件
widget_future_builder.dart网络请求组件
widget_net_error.dart网络请求失败组件

其中 widget_future_builder.dart 在我上一篇文章:Flutter | 定义一个通用的多功能网络请求 Widget 中已经说过了,这里就不多说了。

挑几个没说过的说一下。

loading.dart

用于显示加载中的组件。

开始的时候考虑用 showDialog 来做,但是它默认会把背景变成半透明的黑色。

然后查看源码,发现他是调用 showGeneralDialog 来创建的对话框,传入了一个 barrierColor: Colors.black54 来控制的半透明背景。

那我可以自己来使用 showGeneralDialog,关于该控件的介绍及使用,我这里就不多赘述了,可以查看caijinglong的博客 - Flutter dialog (2) - showGeneralDialog的使用。[12]

最后我这里的代码就是这样(截取一部分):

class Loading {  static bool isLoading = false;  static void showLoading(BuildContext context) {    if (!isLoading) {      isLoading = true;      showGeneralDialog(          context: context,          pageBuilder: (BuildContext context, Animation animation,              Animation secondaryAnimation) {            return xxx;          }).then((v) {            // 消失的时候把状态置为 false        isLoading = false;      });    }  }  static void hideLoading(BuildContext context) {    if (isLoading) {      Navigator.of(context).pop();    }  }}

只提供了两个静态方法:showLoading()hideLoading()

showLoading 逻辑如下:

1.首先判断 isLoading 是否为 true,如果正在显示 loading,那么则不作操作2.如果不为 true,则显示 loading,并把状态置为 true3.调用 then 方法,在 dialog 消失的时候把状态置为 false

net_utils.dart

网络请求的管理&工具类。

在这个文件中,我们要进行 Dio 的初始化和网络请求的封装。

在查看 API 文档的时候,发现登录状态是由 Cookie 来管理的。 所以我要使用 cookie 的插件来满足需求。

写一个初始化的方法,在 runApp 时调用:

static Dio _dio;static void init() async {   // 获取沙盒路径,用于存储 cookie  Directory tempDir = await getTemporaryDirectory();  String tempPath = tempDir.path;  CookieJar cj = PersistCookieJar(dir: tempPath);  _dio = Dio(BaseOptions(baseUrl: 'http://127.0.0.1:3000'))    ..interceptors.add(CookieManager(cj))    ..interceptors.add(LogInterceptor(responseBody: true, requestBody: true));}

然后再写一个通用的 _get() 方法,所有的网络请求最终都经过它:

static Future _get(BuildContext context, String url,                             {Map params}) async {  Loading.showLoading(context);  try {    return await _dio.get(url, queryParameters: params);  } on DioError catch (e) {    if (e.response is Map) {      return Future.value(e.response);    } else {      return Future.error(0);    }  } finally {    Loading.hideLoading(context);  }}

这个逻辑我在上一篇文章中也提到过,如果返回状态不是 2xx,那就会抛出 DioError,然后我们在这里处理逻辑即可。

common_text_style.dart

一些通用的 text 样式。

我们在这里创建一些 顶级变量 :

final commonTextStyle = TextStyle(fontSize: 16, color: Colors.black87);final smallCommonTextStyle = TextStyle(fontSize: 12, color: Colors.black87);final smallGrayTextStyle = TextStyle(fontSize: 12, color: Colors.grey);

这样其他类使用起来就很方便,万一以后要改文字样式也很方便。

总结

该篇文章是当前系列的第一篇,主要提供了一些搭建项目的思路。

该系列文章代码会传至 GitHub:https://github.com/wanglu1209/NeteaseClouldMusic

并且每次提交都会对应一个分支。

本文中的代码请在 NeteaseClouldMusic-Day1 分支中查看代码。

另我个人创建了一个「Flutter 交流群」,可以添加我个人微信 「17610912320」来入群。

a5708a78ec5dfa7da7010e7b2614ca8b.png

References

[1] Provider: https://pub.dev/packages/provider[2] shared_preferences: https://pub.dev/packages/shared_preferences[3] dio: https://pub.dev/packages/dio[4] flutter_screenutil: https://pub.dev/packages/flutter_screenutil[5] fluro: https://pub.dev/packages/fluro[6] common_utils: https://pub.dev/packages/common_utils[7] dio_cookie_manager: https://pub.dev/packages/dio_cookie_manager[8] cookie_jar: https://pub.dev/packages/cookie_jar[9] permission_handler: https://pub.dev/packages/permission_handler[10] path_provider: https://pub.dev/packages/path_provider[11] extended_image: https://pub.dev/packages/extended_image[12] caijinglong的博客 - Flutter dialog (2) - showGeneralDialog的使用。: https://www.kikt.top/posts/flutter/dialog/dialog-2/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 所谓的 ovalshape 是指 Visual Basic 中的图形控件之一,可以用来在窗体中创建椭圆形的图形展示。而 microsoft.visualbasic.powerpacks.vs.dll 则是 Visual Studio 中的一个程序集(Assembly),它包含了一系列的控件和工具,用于帮助开发者更方便地进行 Visual Basic 的开发工作。 其中,microsoft.visualbasic.powerpacks.vs.dll 是 Visual Basic Power Packs 的一部分,这是一个由 Microsoft 提供的免费的组件库,它包含了一系列非常实用的控件和工具,可以帮助开发者更容易地实现常见的功能。 而其中的 ovalshape 控件就是其中之一,它可以让开发者在窗体中轻松地创建出椭圆形的图形,可以拖动和调整大小。当然,除了 ovalshape 之外,Power Packs 还有许多其他类型的控件,比如 ShapeContainer、LineShape、RectangleShape 等等,都可以帮助开发者实现各种各样的图形展示。 总之,microsoft.visualbasic.powerpacks.vs.dll 主要是用来提供 Visual Basic Power Packs 组件库中的控件和工具。而 ovalshape 是其中一个实用的图形控件,可以帮助开发者实现各种各样的椭圆形展示。 ### 回答2: ovalshape是Visual Basic PowerPacks工具箱中的一个控件,主要用于绘制椭圆形状。此控件可用于Windows窗体应用程序中,以绘制椭圆形状、圆形或类似于标志的形状。同时,它也提供了各种属性,例如大小和颜色,可用于个性化形状。Microsoft.visualbasic.powerpacks.vs.dll是一个包含Visual Basic PowerPacks工具箱的动态链接库。此库提供了一些额外的控件,可以用于增强和加强Windows窗体应用程序的开发。 Visual Basic PowerPacks工具箱是一个免费的组件,可用于Visual Studio 2010及更高版本中,以简化Windows应用程序的设计和开发。使用这些工具,可以节省您的时间和努力,帮助您创建更好、更准确的应用程序。 ### 回答3: ovalshape是一个用于在Visual Basic程序中创建椭圆形对象的类库。而microsoft.visualbasic.powerpacks.vs.dll则是一种用于Visual Studio开发环境的DLL动态链接库,提供可视化控件和工具,可供Microsoft Visual Basic程序员使用。在使用这个控件库的时候,我们可以很方便地设计和调整椭圆形对象的属性,如位置、大小、背景和边框等。同时,我们也可以利用这个库中的其他控件,如绘图控件等,来更好地实现我们的编程需求。通过使用这些控件库,我们可以减少手动编写代码的工作量,提高程序开发的效率和质量。因此,对于Visual Basic程序员来说,学习和掌握这些控件库的使用,将会在实际编程中起到很重要的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值