这篇文章来自我自己的有道云笔记 想看图片去那里
文档:Day 4_1 项目实践.md
链接:http://note.youdao.com/noteshare?id=1b97681ceb71e681d4b41c40ccdf4129&sub=5103CDAE33354B02AB269015C3FD36FB

项目实践

一个小问题

如果你升级了Xcode这些软件 会导致这个运行不出来的问题

这个时候你就需要去 删除这个文件 让它重新加载 这样就可以 让它运行了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zYUzejnX-1588835661942)(C18F771E08EF47A4ADEEDBC6A8E9A804)]

进行调试的时候 发现原来的项目 不能跑起来了

大家以后再做类似的事情的时候 你同样会遇到同样的问题

这个东西是不断在升级的 所以 你需要经常去自己处理这种问题

这个问题可以去 flutter的issure上面找到答案

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xX1rfueB-1588835661948)(FF57D4532D254CD38FD8A61AC6807748)]

还有一个问题就是

之前我们使用extension它会有报错 所以我们可以到pubspce.yaml 里面去改变dart语法的最低支持版本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qN8rgCfR-1588835661952)(697CA235BFF44C67A3BEDF41B848F58B)]

小项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dr4dBKPZ-1588835661958)(F6E91C0350CD416D9D474109A8E9344D)]

新建一个项目肯定是有些东西是要你来完成的

  1. 新建项目 (两种方式创建项目 通过 终端来创建 或者 使用 IDE来创建 [这里推荐使用终端来创建 IDE创建会多很多莫名奇妙的东西 这些东西就 会干扰目录结构])
    • flutter create favorcate(项目名)
  2. 对项目进行配置 (flutter最主要是针对移动端 => App)
    • appid 这个东西是在应用程序在手机里面的唯一标识
    • 应用的名称 默认情况下 项目的名称就是 应用的名称 但是我们最好自己配置
    • 配置对应的图标 icon
    • 启动图 当打开一个项目的时候 需要启动的时间 启动的时候可能就会出现短暂的白屏所以 我们不希望 有这个白屏的情况出现

appid

我们现在先来配置 Androidid

我们来到 Android 这个文件夹 这个东西就是Android的工程目录

我们来修改appid 我们打开这个 build.gradle

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gmz4FSdW-1588835661961)(49FA404B28014A33983C8C50CC85089B)]

可以看到这里有一个applicationId

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FWKwxV3u-1588835661964)(00639C7D253242B78708A6E297CFBF97)]

然后我们把它改了就是了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XpvFe0fO-1588835661966)(9703EFF8BB8847CA87829FDF67DC9C5D)]

然后我们发先我们打开这个文件之后它就在报错 主要是说没有找到这样的一个东西

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-th9HUaOE-1588835661968)(2E9B5EC2F6CB4D2C96342C0C490234F4)]

这个东西是 其实是不管它也是可以的 关掉这个文件 他还是在报错 这个时候我们把android Studio重启一下就可以了

应用程序名

但是你发现 这个应用程序名是默认的 项目名 你肯定不希望这个应用程序就是你的项目名

我们可以到 AndroidMainifest.xml文件里面去找对应的东西 这个是非常重要的一个文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dywWsDPk-1588835662001)(AE5662CA64C341D58E69C1D1529C7577)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Y4Hnf6R-1588835662008)(89A8D7F3372C4468915739B7F6150365)]

改掉

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hYTXG4AO-1588835662015)(3756881AA8164005A7126B4D56476985)]

应用程序的图标

我们的应用程序会有一个flutter默认提供的图标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zWQ8kNCV-1588835662021)(57552D49EB274F66B978BC89DD556641)]

但是我们的自己的应用程序肯定不希望用这个图标

我们希望显示美工给我们的图标 那这里怎么办呢

你打开main文件夹 看到里面有很多的文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJZo5Kfe-1588835662022)(C7B209160D95443698BEE3220CBC1D02)]

这些文件夹就是装的 不同大小的图标的 文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2sSzE9js-1588835662025)(FA372F6F95984B18A2B1ACC319962C04)]

这里有这样的一些东西

把里面的图标换成自己的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zfoTvuug-1588835662027)(09C1DE72C0CD4F9BB523D49534697385)]

这个图标的命名也是有讲究的

当然会android开发的就因该很明白

启动图

要搞启动图的话我们来到 layer-list 里面item就是里面的样式 就是白色的

所以我们这里最终呈现出来的就是白色

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IaFUGESm-1588835662029)(F0FB4425E15E4EF9AD03651B424A5A64)]

如果我们要 背景图片的话 我们可以打开下面的注释

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2MsXezEh-1588835662031)(9DE24D8EA695497D8B1BDB8954DA2687)]

我们可以发现 它也是加载一个mipmap里面的一个 launch_image 的图片

它就会去里面找到对应的

这个地方我们就搞了一张 如果对应分辨率找不到图片它就会到其他的分辨率去找 直到找到为止

所以我们这里可以只用放一张就行了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wb9W8icQ-1588835662033)(063C6B641020411499C4C98A118F98F3)]

对应的图片 同样是通过分辨率来进行区别的 这就是Android

IOS 我们就不弄了 因为我用的window 等我有了mac 再做这个ios的东西

如何通过flutter 制作广告

我们可以在进入的页面上搞一个 新的页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-spmi7cku-1588835662035)(FB1E5FAC470D45C2B67F1DB95BE8444A)]

设置一个定时器 然后 时间到了以后就push 进入正真的页面

跳转到另外一个页面 跳转到主要显示的页面就可以了

广告也还是比较简单的

还有一种就是引导页 可以使用pageView来使用

划分目录结构

  1. 新建项目 (两种方式创建项目 通过 终端来创建 或者 使用 IDE来创建 [这里推荐使用终端来创建 IDE创建会多很多莫名奇妙的东西 这些东西就 会干扰目录结构])
    • flutter create favorcate(项目名)
  2. 对项目进行配置 (flutter最主要是针对移动端 => App)
    • appid 这个东西是在应用程序在手机里面的唯一标识
    • 应用的名称 默认情况下 项目的名称就是 应用的名称 但是我们最好自己配置
    • 配置对应的图标 icon
    • 启动图 当打开一个项目的时候 需要启动的时间 启动的时候可能就会出现短暂的白屏所以 我们不希望 有这个白屏的情况出现
  3. 划分目录结构
    • pages 页面的文件
    • widgets 封装的组件
    • network/services 网络请求
    • router 路由
    • viewmodel viewmodel MVVM文件
    • model 模型
    • shared 共享的文件

所以我们就把这些目录结构放到 我们的目录结构里面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3cR8PSkt-1588835662037)(F0C634B700584F2BAB189C0E28C4176E)]

但是这些也不是最终的目录结构 我们最终会生成很多的文件夹 这样的lib下面就会有很多的文件夹

这个时候全部都去lib里面去找其实也不是特别方便的 所以这里就进行了另外一层考虑

我们可以把目录结构划分的深一点 这样就可以说我们的目录结构 划分的比较好

我们会先搞两个文件

  • core
    • services/network
    • router
    • viewmodel 不是 视图相关的东西都放到core里面
    • model
  • ui
    • pages…

但是因为android Studio是开发Android的东西 它直接建文件夹认为你建的是包 这个时候看文件夹层次就不太好看 所以我们 直接在资源管理器里面把文件夹建好

这样我们功能相关的东西都放在上面 和页面相关的东西都放在下面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nzMWC63A-1588835662039)(5A8AA7EAA7354EFCB12A6EF5438B392C)]

主题相关的东西

这样划分的话就是这样的

  1. 新建项目 (两种方式创建项目 通过 终端来创建 或者 使用 IDE来创建 [这里推荐使用终端来创建 IDE创建会多很多莫名奇妙的东西 这些东西就 会干扰目录结构])
    • flutter create favorcate(项目名)
  2. 对项目进行配置 (flutter最主要是针对移动端 => App)
    • appid 这个东西是在应用程序在手机里面的唯一标识
    • 应用的名称 默认情况下 项目的名称就是 应用的名称 但是我们最好自己配置
    • 配置对应的图标 icon
    • 启动图 当打开一个项目的时候 需要启动的时间 启动的时候可能就会出现短暂的白屏所以 我们不希望 有这个白屏的情况出现
  3. 划分目录结构
    • pages 页面的文件
    • widgets 封装的组件
    • network/services 网络请求
    • router 路由
    • viewmodel viewmodel MVVM文件
    • model 模型
    • shared 共享的文件
  4. 主题相关的东西

main.dart的文件因该尽量简单

把项目中默认的生成的计数器案例给换了

甚至我们的Scaffold里面的home我们都不是不需要的 我们可以用initialRoute来代替

import "package:flutter/material.dart";main() => runApp(MyApp());class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: "Flutter Demo",theme: ThemeData(primarySwatch: Colors.blue,splashColor: Colors.transparent),initialRoute: ,);}
}
  • 设置共有的背景

然后我们就先搞定 Theme这个东西

这里我们直接把之前封装好的 app_theme.dart 文件拿过来

当然这个我们就主要以普通模式作为开发目标了

我们发现每个页面都有一个相同的背景颜色

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5qQqyKta-1588835662041)(0642E1AFCC1D4F07B9A9ACE9BF2520E0)]

同样这个背景颜色也是可以在Theme里面设置的

使用canvasColor进行设置

sharded/app_theme.dart

import "package:flutter/material.dart";class HYAppTheme {
//  1. 公共属性static const double smallFontSize = 16;static const double normalFontSize = 20;static const double largeFontSize = 24;//  2. 普通模式static final Color normalTextColors = Colors.red;//  可以在这里把它封装成一个方法 也可以封装成一个属性static final ThemeData norTheme = ThemeData(primarySwatch: Colors.pink, // primaryColor accentColor 如果不一样再单独设置canvasColor: Color.fromRGBO(255, 254, 222, 1),textTheme: TextTheme(body1: TextStyle(fontSize: normalFontSize, color: normalTextColors)));//  3. 暗黑模式static final Color darkTextColors = Colors.green;static final ThemeData darkTheme = ThemeData(primarySwatch: Colors.grey,textTheme: TextTheme(body1: TextStyle(fontSize: normalFontSize, color: darkTextColors)));
}

main.dart

import "package:flutter/material.dart";
import 'package:project03/ui/shared/app_theme.dart';main() => runApp(MyApp());class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: "美食广场",theme: HYAppTheme.norTheme);}
}
  • 设置textTheme

还有一个就是关于我们的textTheme

我们知道textTheme里面有很多的属性

body1 默认的字体样式

body2

dispaly1

display2

display3

display4

当然我们希望能有一个共有默认字体大小 不想要的时候覆盖掉就行了

这里我们就不改它了

我们通过常量来对这些东西做一个规划(这样的好处是 不用在里面的繁杂代码里面去到处找颜色的设置)

import "package:flutter/material.dart";class HYAppTheme {
//  1. 公共属性static const double bodyFontSize = 14;static const double smallFontSize = 16;static const double normalFontSize = 20;static const double largeFontSize = 24;//  2. 普通模式static final Color normalTextColors = Colors.red;//  可以在这里把它封装成一个方法 也可以封装成一个属性static final ThemeData norTheme = ThemeData(primarySwatch: Colors.pink, // primaryColor accentColor 如果不一样再单独设置canvasColor: Color.fromRGBO(255, 254, 222, 1),textTheme: TextTheme(body1: TextStyle(fontSize: bodyFontSize),display1: TextStyle(fontSize: smallFontSize),display2: TextStyle(fontSize: normalFontSize),display3: TextStyle(fontSize: largeFontSize),));//  3. 暗黑模式static final Color darkTextColors = Colors.green;static final ThemeData darkTheme = ThemeData(primarySwatch: Colors.grey,textTheme: TextTheme(body1: TextStyle(fontSize: normalFontSize, color: darkTextColors)));
}

这个就是关于我们字体的一个东西

还有一个就是字体的颜色

这里主题就搞的差不多了

运行代码

但是现在还是差点 我们Scaffold里面至少 home和initialRoute因该要有一个

但我们两个都没有所以我们的项目肯定是不能跑的

配置路由

router/router.dart

import 'package:flutter/material.dart';class HYRouter {static final String initialRoute = "/";static final Map<String, WidgetBuilder> routes ={};static final RouteFactory generateRoute = (settings) {};static final RouteFactory unknownRoute = (setting) {};
}

我们默认要启动的页面就是 大的页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZyGy3nPF-1588835662044)(F78015FAB5B04CA68CF992F86D6981ED)]

这个页面我们之前说douban 的时候就是一个main 它是一个主要的页面

同样把文件结构先搞出来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-km0gxnme-1588835662046)(4618A9232BA848F49ABBDDAFAAB85C35)]

我们建立的这个main因该是一个有状态的 东西

所以我们使用StatefulWidget

构建整个类

import "package:flutter/material.dart";class HYMainScreen extends StatefulWidget {static const String routeName = "/";@override_HYMainScreenState createState() => _HYMainScreenState();
}class _HYMainScreenState extends State<HYMainScreen> {@overrideWidget build(BuildContext context) {return Scaffold(body: IndexedStack(),bottomNavigationBar: BottomNavigationBar(items: BottomNavigationBarItem(),),);}
}

然后设置对应的 路由相关的东西

  • Day3_25 手势(事件监听), 事件总线 和 路由和导航 3344行

说命令 这个onGenerateRoute是怎么设置的

同样也可以 有错误页面的设置 unKownRoute怎么设置的

import 'package:flutter/material.dart';
import 'package:project03/ui/pages/main/main.dart';class HYRouter {static final String initialRoute = HYMainScreen.routeName;static final Map<String, WidgetBuilder> routes ={HYMainScreen.routeName: (ctx) => HYMainScreen()};//  自己扩展static final RouteFactory generateRoute = (settings) {return null;};static final RouteFactory unknownRoute = (setting) {};
}

因为我们这几个东西都没有写

这样我们的主题和路由相关的东西就配好了

你会发现我们的MaterialApp里面是非常简单的

淡然还有一种可以把MyApp整个东西抽成一个文件 这样你就有一个文件可以专门来管理你的整个app了

但是我不喜欢这样所以不抽 这里的代码本来就已经比较复杂了

其实更不希望在lib的下面有更多的文件 我们希望我们的lib目录尽可能的简单

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2tA6jUY-1588835662048)(780DA7A7771647929E16082FDDCEC350)]

所以我们比较希望这样搞

import "package:flutter/material.dart";
import 'package:project03/core/router/router.dart';
import 'package:project03/ui/shared/app_theme.dart';main() => runApp(MyApp());class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: "美食广场",
//      主题theme: HYAppTheme.norTheme,//      路由initialRoute: HYRouter.initialRoute,routes: HYRouter.routes,onGenerateRoute: HYRouter.generateRoute,onUnknownRoute: HYRouter.unknownRoute,);}
}

Main页面的制作

  1. 新建项目 (两种方式创建项目 通过 终端来创建 或者 使用 IDE来创建 [这里推荐使用终端来创建 IDE创建会多很多莫名奇妙的东西 这些东西就 会干扰目录结构])
    • flutter create favorcate(项目名)
  2. 对项目进行配置 (flutter最主要是针对移动端 => App)
    • appid 这个东西是在应用程序在手机里面的唯一标识
    • 应用的名称 默认情况下 项目的名称就是 应用的名称 但是我们最好自己配置
    • 配置对应的图标 icon
    • 启动图 当打开一个项目的时候 需要启动的时间 启动的时候可能就会出现短暂的白屏所以 我们不希望 有这个白屏的情况出现
  3. 划分目录结构
    • pages 页面的文件
    • widgets 封装的组件
    • network/services 网络请求
    • router 路由
    • viewmodel viewmodel MVVM文件
    • model 模型
    • shared 共享的文件
  4. 主题相关的东西
  5. 路由配置
  6. HYMainScreen

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-krxn5mZf-1588835662050)(D32B65629E18422980E125303EA1B3C7)]

最主要的就是这几个页面的对应

我们这里的BottonNavigationBar 我们可以将它分到其他的地方

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bNwb6vC0-1588835662052)(37E74913556E4CDE86EDB88DFC68FD67)]

但是 一般感觉 这个地方代码只有这么长 我们一般感觉是没有必要 专门分一个文件吧

但是实际上我们开始 开发了之后 这个 文件容易

我们可以把它划分的精细一点 做的事情很单一 这样我们后期就不用代码重构 这样可以省下很多的整理代码的功夫

那具体要做某些事情的时候我们就找到某些文件 直接在文件中操作就会比较容易

import "package:flutter/material.dart";final List<Widget> pages = [];final List<BottomNavigationBarItem> items = [];

这些里面我们不希望再对它进行赋值的操作 所以加上

import "package:flutter/material.dart";final List<Widget> pages = [];final List<BottomNavigationBarItem> items = [BottomNavigationBarItem(title: Text("首页"),icon: Icon(Icons.home)),BottomNavigationBarItem(title: Text("收藏"),icon: Icon(Icons.home))
];

然后我们创建两个页面

home.dart

import "package:flutter/material.dart";class HYHomeScreen extends StatelessWidget {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("美食广场")),body: Center(child: Text("美食广场")));}
}

favor.dart

import "package:flutter/material.dart";class HYFavorScreen extends StatelessWidget {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("favor")),body: Center(child: Text("favor")));}
}

main.dart

import "package:flutter/material.dart";
import "initialize_items.dart";class HYMainScreen extends StatefulWidget {static const String routeName = "/";@override_HYMainScreenState createState() => _HYMainScreenState();
}class _HYMainScreenState extends State<HYMainScreen> {int _currentIndex = 0;@overrideWidget build(BuildContext context) {return Scaffold(body: IndexedStack(index: _currentIndex,children: pages,),bottomNavigationBar: BottomNavigationBar(currentIndex: _currentIndex,items: items,onTap: (index) {setState(() {_currentIndex = index;});},),);}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZYn0bIzb-1588835662054)(5CFE2D7739E5436EB8C6A8846342A083)]

但是这个字体可能会一直变化

import "package:flutter/material.dart";
import "initialize_items.dart";class HYMainScreen extends StatefulWidget {static const String routeName = "/";@override_HYMainScreenState createState() => _HYMainScreenState();
}class _HYMainScreenState extends State<HYMainScreen> {int _currentIndex = 0;@overrideWidget build(BuildContext context) {return Scaffold(body: IndexedStack(index: _currentIndex,children: pages,),bottomNavigationBar: BottomNavigationBar(currentIndex: _currentIndex,items: items,selectedFontSize: 14,unselectedFontSize: 14,onTap: (index) {setState(() {_currentIndex = index;});},),);}
}

制作首页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nS9q0X4v-1588835662057)(9924F5D562BF4B92B24A118F59CE2B47)]

这里有很多的数据 这些 页面数据我们就不通过网络请求来获得了 我们做成一个json文件来做json的解析

这里要补充一点json文件的解析

然后这个是一个资源 那我们就要对它进行配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w8Kzcki6-1588835662060)(4CE5C8E025CE4A0DB25C56553F1A2220)]

我们来到这个配置文件 注意这个前面有一个空格要删掉

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z1xnVVXX-1588835662150)(060C09FF670443B4A1CDD25737F7BDBE)]

这样才对

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q3IdSM43-1588835662151)(C130F715EB4F4961A93847A8844D525B)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yr3KKtii-1588835662153)(1544579FDF2348AC817CA10C3427C386)]

改成这样就可以了

同样注意 我们也要 执行pub get 命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0fZxrxc1-1588835662155)(A5DD96F230FC42ED96560CC3F474D21B)]

然后我们就要读取我们的json文件

加载完 之后就可以对json做一个解析

那我们在哪里进行加载呢 可以在build里面做吗 最好不要 这个里面 会经常执行 那么就

意味这我们要经常执行 请求 所以这个东西 我们就最好不要搞在这个build里面

  • 所以这里可以用stf 来完成对应的操作
  • 这里我们也可以 分一个文件出去来完成这个操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qXJ3LmWL-1588835662157)(EF1F1358769546F9B71E01010C93E424)]

import "package:flutter/material.dart";class HYHomeContent extends StatefulWidget {@override_HYHomeContentState createState() => _HYHomeContentState();
}class _HYHomeContentState extends State<HYHomeContent> {@overrideWidget build(BuildContext context) {return Container();}
}
  • 那么这个地方怎么来考虑 我怎么知道 这样要分开 成文件呢 为什么不直接把 这个HYHomeScreen 变成 StatusfulWidget

如果 在homeScreen 有很多的地方要用 这个数据我们就可以这样使用 这个 如果我们的floatActionButton 也需要这个东西那我们 就需要将 这个HYHomeScreen 也变成stf了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T8wXLluO-1588835662159)(6C7423EA03434F6CAF4EA3E62E4FA227)]

这里我要做json请求那我们是直接请求吗 肯定是在initStatus里面进行请求的

import "package:flutter/material.dart";class HYHomeContent extends StatefulWidget {@override_HYHomeContentState createState() => _HYHomeContentState();
}class _HYHomeContentState extends State<HYHomeContent> {@overridevoid initState() {// TODO: implement initStatesuper.initState();//    加载数据}@overrideWidget build(BuildContext context) {return Container();}
}

我们先到 services里面先去做一个处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1LJSQV5P-1588835662162)(58E7BE16C702478191BC5F908C657C92)]

我们用rootBundle 来进行处理

import 'dart:convert';import 'package:flutter/services.dart';class JsonParse {static void getCategoryData() async {
//    1. 加载json文件
//  它这里最终是返回了一个字符串 从字符串里面解析肯定是不好解析的final jsonString = await rootBundle.loadString("assets/json/category.json");//    2. 将我们的jsonString转化成Map/Listfinal result = json.decode(jsonString);}
}
  • 这里json.decode 是对json字符串的一个解构 它可以将字符串里面的所有 数组做成List 将里面的所有 对象做成 map

我们这里就拿到一个map了 我们这里最外面其实是一个对象 所以我们拿到的是一个map

当然转化成 map还不够 还要将里面的东西全部转化成模型

这个和我们之前讲的东西

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4G7sCJ0x-1588835662164)(91BC7FC374C441F49A3555C1063E1ADE)]

我们用 这个

  • https://javiercbk.github.io/json_to_dart/
  • https://app.quicktype.io/ 这两个都可以 但是下面这个功能要强一点

来做 json转话成模型的快速生成代码

    {"id": "c1","title": "意大利","color": "9C27B0"}

取个名字 就可以了 HYCategoryModel

  • HY是为了和系统类做区分
  • Model是为了避免以后创建HYCategory的类 做区分 这个是模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8x0my2n0-1588835662167)(2E28B9A4C4684B6C91DB857B49791C35)]

这里 其实就是一个map转 对象的过程

import 'dart:convert';import 'package:flutter/services.dart';
import 'package:project03/core/model/category_model.dart';class JsonParse {static Future<List<HYCategoryModel>> getCategoryData() async {
//    1. 加载json文件
//  它这里最终是返回了一个字符串 从字符串里面解析肯定是不好解析的final jsonString = await rootBundle.loadString("assets/json/category.json");//    2. 将我们的jsonString转化成Map/Listfinal result = json.decode(jsonString);//    3.  将Map中的内容转换成一个个对象final resultList = result["category"];
//    我们可以一个一个转化成 模型List<HYCategoryModel> categories = [];for(var json in resultList ) {categories.add(HYCategoryModel.fromJson(json));}return categories;}
}

使用

import "package:flutter/material.dart";
import 'package:project03/core/services/json_parse.dart';class HYHomeContent extends StatefulWidget {@override_HYHomeContentState createState() => _HYHomeContentState();
}class _HYHomeContentState extends State<HYHomeContent> {@overridevoid initState() {// TODO: implement initStatesuper.initState();//    加载数据JsonParse.getCategoryData().then((res) {print(res);});}@overrideWidget build(BuildContext context) {return Container();}
}

成功加载出数据了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fsqEoT8I-1588835662169)(2AC94566D671472B90559B51A8F61521)]

取到数据之后就是展示

import "package:flutter/material.dart";
import 'package:project03/core/model/category_model.dart';
import 'package:project03/core/services/json_parse.dart';class HYHomeContent extends StatefulWidget {@override_HYHomeContentState createState() => _HYHomeContentState();
}class _HYHomeContentState extends State<HYHomeContent> {List<HYCategoryModel> _categories = [];@overridevoid initState() {// TODO: implement initStatesuper.initState();//    加载数据JsonParse.getCategoryData().then((res) {_categories = res;});}@overrideWidget build(BuildContext context) {return GridView.builder(gridDelegate: null,itemBuilder: null);}
}

这个长度要给出来

  @overrideWidget build(BuildContext context) {return GridView.builder(itemCount: _categories.length,gridDelegate: null,itemBuilder: null);}

不给出来的话 默认是无限

展示 我们用GridView

  • GridView的使用 详细讲解 Day3_11 常见的滚动的Widget
import "package:flutter/material.dart";
import 'package:project03/core/model/category_model.dart';
import 'package:project03/core/services/json_parse.dart';import "../../../core/extension/int_extension.dart";class HYHomeContent extends StatefulWidget {@override_HYHomeContentState createState() => _HYHomeContentState();
}class _HYHomeContentState extends State<HYHomeContent> {List<HYCategoryModel> _categories = [];@overridevoid initState() {// TODO: implement initStatesuper.initState();//    加载数据JsonParse.getCategoryData().then((res) {_categories = res;});}@overrideWidget build(BuildContext context) {return GridView.builder(itemCount: _categories.length,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,crossAxisSpacing: 20.px,mainAxisSpacing: 20.px,childAspectRatio: 1.5),itemBuilder: (ctx, index) {return Text(_categories[index].title);});}
}

同样我们这里单位用了 px 所以extension走起 Sizefit注意要初始化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qls6wj9P-1588835662170)(43C1E66DC3DF4300891DA92CCE2EA074)]

文件结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KZhgRZwJ-1588835662172)(A431A477019B48E683200FC6574DD5B9)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EC3dvukX-1588835662174)(CA2C170DC1DA4AEF90ECA263F97D073D)]

这样我们就可以了

  • 两边离的太近了 padding
  • 还是不好看 居中 alignment: Alignment.center
import "package:flutter/material.dart";
import 'package:project03/core/model/category_model.dart';
import 'package:project03/core/services/json_parse.dart';import "../../../core/extension/int_extension.dart";class HYHomeContent extends StatefulWidget {@override_HYHomeContentState createState() => _HYHomeContentState();
}class _HYHomeContentState extends State<HYHomeContent> {List<HYCategoryModel> _categories = [];@overridevoid initState() {// TODO: implement initStatesuper.initState();//    加载数据JsonParse.getCategoryData().then((res) {_categories = res;});}@overrideWidget build(BuildContext context) {return GridView.builder(padding: EdgeInsets.all(20.px),itemCount: _categories.length,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,crossAxisSpacing: 20.px,mainAxisSpacing: 20.px,childAspectRatio: 1.5),itemBuilder: (ctx, index) {return Container(color: Colors.red,alignment: Alignment.center,child: Text(_categories[index].title));});}
}

但是还是想要一个圆角

注意decoration 这个东西和 color冲突所以 将color放到里面

 @overrideWidget build(BuildContext context) {return GridView.builder(padding: EdgeInsets.all(20.px),itemCount: _categories.length,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,crossAxisSpacing: 20.px,mainAxisSpacing: 20.px,childAspectRatio: 1.5),itemBuilder: (ctx, index) {return Container(decoration: BoxDecoration(color: Colors.red,borderRadius: BorderRadius.circular(12.px)),alignment: Alignment.center,child: Text(_categories[index].title));});}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GoE74YMC-1588835662176)(B17D283F2FA84001A7CAA58E2921399E)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MhBAStYK-1588835662178)(52F97971EC04402AB28C395DD7E1FEF2)]

看得出 这个东西是有一个渐变色的 颜色是不一样的

这个颜色是取决与哪里呢 很明显它不是一个随机的颜色

这个颜色取决于 我们的json的文件 那我们就需要将 这个转化成 颜色

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-liBZL2P6-1588835662180)(1BA37C8DB05149E484A23E4EFF7C77EA)]

如果用原来的 fromRGBO的方式 它还要做字符串截取

我们可以把它转化成 16进制

这个时候我们可以到 model里面去做处理

  1. 将我们的字符串Color转换成16进制的数字
  2. 将透明度加进去

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GQQ1h5gK-1588835662182)(39D5DCD6BEA645A08C90DA120835DFF7)]

import "package:flutter/material.dart";class HYCategoryModel {String id;String title;String color;Color cColor;HYCategoryModel({this.id, this.title, this.color});HYCategoryModel.fromJson(Map<String, dynamic> json) {id = json['id'];title = json['title'];color = json['color'];//    1. 将我们的字符串Color转换成16进制的数字final colorInt = int.parse(color, radix: 16);
//    2. 将透明度加进去
//  我们这里可以用一下 for运算符cColor = Color(colorInt | 0xFF000000);}Map<String, dynamic> toJson() {final Map<String, dynamic> data = new Map<String, dynamic>();data['id'] = this.id;data['title'] = this.title;data['color'] = this.color;return data;}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vEE9ewG1-1588835662185)(C17F47B8ED3F447CAF16C8D3137787A5)]

这样就可以了

然后我们这里还要做一个颜色的渐变

我们做渐变使用这个 LinearGradient Widgets

  @overrideWidget build(BuildContext context) {return GridView.builder(padding: EdgeInsets.all(20.px),itemCount: _categories.length,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,crossAxisSpacing: 20.px,mainAxisSpacing: 20.px,childAspectRatio: 1.5),itemBuilder: (ctx, index) {final bgColor = _categories[index].cColor;return Container(decoration: BoxDecoration(color: bgColor,borderRadius: BorderRadius.circular(12.px),gradient: LinearGradient(colors: [bgColor.withOpacity(.5),bgColor])),alignment: Alignment.center,child: Text(_categories[index].title));});}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lOaK4A2H-1588835662187)(F7A342C0FE3445C899EA9C07F8841510)]

微调一下样式

import "package:flutter/material.dart";
import 'package:project03/core/model/category_model.dart';
import 'package:project03/core/services/json_parse.dart';import "../../../core/extension/int_extension.dart";class HYHomeContent extends StatefulWidget {@override_HYHomeContentState createState() => _HYHomeContentState();
}class _HYHomeContentState extends State<HYHomeContent> {List<HYCategoryModel> _categories = [];@overridevoid initState() {// TODO: implement initStatesuper.initState();//    加载数据JsonParse.getCategoryData().then((res) {_categories = res;});}@overrideWidget build(BuildContext context) {return GridView.builder(padding: EdgeInsets.all(20.px),itemCount: _categories.length,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,crossAxisSpacing: 20.px,mainAxisSpacing: 20.px,childAspectRatio: 1.5),itemBuilder: (ctx, index) {final bgColor = _categories[index].cColor;return Container(decoration: BoxDecoration(color: bgColor,borderRadius: BorderRadius.circular(12.px),gradient: LinearGradient(colors: [bgColor.withOpacity(.5),bgColor])),alignment: Alignment.center,child: Text(_categories[index].title,style: Theme.of(context).textTheme.display2.copyWith(fontWeight: FontWeight.bold)));});}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eA6swYaL-1588835662189)(1763215519EC4D4AA3383903D1B4567B)]

主题也重写一下 字体不好看

import "package:flutter/material.dart";class HYAppTheme {
//  1. 公共属性static const double bodyFontSize = 14;static const double smallFontSize = 16;static const double normalFontSize = 20;static const double largeFontSize = 24;//  2. 普通模式static final Color normalTextColors = Colors.red;//  可以在这里把它封装成一个方法 也可以封装成一个属性static final ThemeData norTheme = ThemeData(primarySwatch: Colors.pink, // primaryColor accentColor 如果不一样再单独设置canvasColor: Color.fromRGBO(255, 254, 222, 1),textTheme: TextTheme(body1: TextStyle(fontSize: bodyFontSize),display1: TextStyle(fontSize: smallFontSize, color: Colors.black87),display2: TextStyle(fontSize: normalFontSize, color: Colors.black87),display3: TextStyle(fontSize: largeFontSize, color: Colors.black87),));//  3. 暗黑模式static final Color darkTextColors = Colors.green;static final ThemeData darkTheme = ThemeData(primarySwatch: Colors.grey,textTheme: TextTheme(body1: TextStyle(fontSize: normalFontSize, color: darkTextColors)));
}

当主题改动的时候 我们要 hot restart

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpjBTRiS-1588835662191)(440DD4035ED048EBB83A15203A9CD5AD)]

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 视频教程- Spring boot权限管理系统/零基础/Layui -Java

    Spring boot权限管理系统/零基础/Layui 多年软件开发工作经验,丰富的培训经历,从2014年开始一直奋战在培训讲师行业的先锋队,培训期间不断制定出完整的培训课程体系,还承担大部分课程的讲解,不断培养学生的编程能力。从进入培训行业以来先后培训出2400多学员,分布于各大I…...

    2024/4/12 4:42:40
  2. 为什么大数据工程师比Java程序员工资高

    为什么大数据工程师比Java程序员工资高大数据开发课程培养的主要是Java工程师和开发工程师,授课内容包含Java和大数据部分。Java作为一门主流的编程开发语言和职场技能,已经得到越来越多的应届毕业生和职场新人的认可。越来越多的人通过各类培训机构或在线课程在学习Java编程…...

    2024/4/19 17:14:05
  3. TI的davinci和omap资源

    TI网站资源,建议大家注册一个my.ti.com,方便下载一些软件开发工具和资料 TI中文主页: http://focus.ti.com.cn/cn/tihome/docs/homepage.tsp 或者www.ti.com 从“处理器”链接可以链接到每个芯片的资料主页,比如: http://focus.ti.com.cn/cn/docs/prod/folders/print/o…...

    2024/4/12 13:32:07
  4. QT多线程服务器端

    1、可以同时接受多个客户端的连接,同时接收多个客户端的文件传输任务,采用的是多线程的方法。程序下载地址:https://download.csdn.net/download/u012372584/10755783左边是上传进度,右边是接收进度。...

    2024/3/31 16:30:33
  5. 2019最新传智播客C语言/C++第5期基础班+就业班完整(70G)

    课程介绍 还是要多唠叨几句,学IT技术,培养兴趣最重要,尤其是编程部分,所以先从简单的学习,激发兴趣学习会事倍功半 确实是一套下功夫用心学就可以就业的课程,真正的从零基础到项目实战,全由经验丰富的讲师来讲解, 分为C语言基础班、C语言就业班、C++就业班、Linux基…...

    2024/3/31 16:30:31
  6. 【javascript 画进度条】js实现进度条的方法

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>进度条</title> </head><style type="text/css">.container{width:450px;border:1px solid #6C9C2C;height:25px;}#bar…...

    2024/4/19 23:43:01
  7. 微信小程序入门教程+案例demo

    微信小程序入门教程+案例demo尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.csdn.net/qq137722697首先摆在好姿态,——微信小程序开发也就那么回事。你只需要一点点css(真的只要一点点)的基础就可以了。认清微信小程序开发其实,我觉得小程序就是将微信官方提供2…...

    2024/4/19 13:21:42
  8. QT多线程备忘

    研究了近一周的qt多线程了,路途很艰辛,看了很多论坛博客,写了很多测试程序,收获颇多。现在将自己遇到的问题和解决方法分享出来,希望能带给大家帮助,也方便自己日后查看。 1.对于qt多线程,我还是希望大家使用新建qobject的子类,然后使用它的 moveToThread()方法,实现…...

    2024/4/19 19:17:56
  9. 最新《微专业Android安卓开发工程师课程》

    1.Android应用界面开发资源下载001 Android开发简介.flv002 开始第一个应用.flv003 Activity你必须知道的那些事(上).flv004 Activity你必须知道的那些事(下).flv005 多姿多彩的控件.flv006 常用控件讲解.flv69.mp3007 Android开发布局详解.flv008 Android布局技巧与优化.flv00…...

    2024/4/20 16:50:16
  10. Android 十年总结:1.5 到 10.0 都有哪些新特性?面试常问题

    文热导读| 点击标题阅读知识星球第三期开园了~转自:嘟嘟呢Android 1.5(Cupcake纸杯蛋糕):智能虚拟键盘;使用widgets实现桌面个性化;在线文件夹(Live Folder)快速浏览在线数据;视频录制和分享;图片上传;更快的标准兼容浏览器;Voice search 语音搜索;立体声蓝牙和免…...

    2024/4/13 22:27:36
  11. QT多线程调用python

    由于Python解释器有全局解释所GIL的原因,导致在同一时刻只能有一个线程拥有解释器,所以在C++多线程调用python脚本时,需要控制GIL,线程获取GIL。 所以一个程序里,无论有多少条线程调用python,python只能初始化一次。 每次线程要调用python时,都要拥有GIL。 //python只需…...

    2024/4/16 16:38:12
  12. 纯JS实现拖动进度条 并附回调函数

    之前工作需要一个回放的功能 不是视频回放 是百度地图API相关的移动轨迹回放 然后需要做些快进 倍速播放之类的 这篇就是抽出了我的进度条模块button其中changePercent为例子方法 可以通过其中的公式来自动化控制进度条其中*5是因为scroll的宽度为500px 这个地方要注意例如scro…...

    2024/5/6 14:56:55
  13. 工程师总结汇总2020年学习Docker基础入门教程全集

    Docker 是一个开源的、轻量级的容器引擎,主要运行于 Linux 和 Windows,用于创建、管理和编排容器。和 VMware 虚拟机相比,Docker 使用容器承载应用程序,而不使用操作系统,所以它的开销很少,性能很高。但是,Docker 对应用程序的隔离不如虚拟机彻底,所以它并不能完全取代…...

    2024/4/12 4:43:34
  14. DAVINCI项目日志

    2013 05 31 DVR:DigitalVideoRecorder(硬盘录像机),即数字视频录像机,2013 06 03 修改内核,编译通过 配置tftp服务器:windows端使用“思科 TFTP 服务器”软件,“查看”->“选项”设置 “TFTP服务器根目录”路径,将共享的文件放到该路径下。 启动开发板,输入命令“…...

    2024/4/19 1:28:39
  15. 拖放排序列表JS插件---SortableJS使用教程

    github下载地址:https://github.com/SortableJS/Sortable个人百度网盘下载地址:链接:https://pan.baidu.com/s/1Y4Od-Ysgs2xliTUjb16S-A 提取码:emvt 业务逻辑:从右边全部课程区域拖拽一个副本到左边区域,右边数据源区域不能产生排序,左边内容接收区分好几个tab,每个t…...

    2024/4/27 8:24:46
  16. 網站導出20171221

    Bookmarks书签栏我的收藏胖斗士 TeambitionunityUnity游戏开发有哪些让你拍案叫绝的技巧?【Unity3D学习 愤怒的小鸟攻略技巧秘籍 unity3d技巧 unity3d愤怒的小鸟实现 unity3d切换关卡 unity3d切换场景代码 unity3d 透明shader】Unity3DUnity 毛玻璃效果(UGUI)性能优化,进无…...

    2024/3/28 22:42:51
  17. qt多线程信号槽传输方式

    //简单介绍一下QT信号与槽的连接方式: //Qt::AutoConnection表示系统自动选择相应的连接方式,如果信号与槽在同一线程,就采用Qt::DirectConnection, //如果信号与槽不在同一线程,将采用Qt::QueuedConnection的连接方式。 //Qt::DirectConnection表示一旦信号产生,…...

    2024/4/12 4:43:52
  18. javascript实现自定义进度条

    直接给代码: /***返回浏览器类型(ie,firefox,opera)*/ function getBrowser(){var type = "";var Browser = {isIE : (navigator.userAgent.indexOf(MSIE) >= 0) && (navigator.userAgent.indexOf(Opera) < 0),isFirefox : navigator.userAgent.index…...

    2024/4/12 17:15:58
  19. 爬虫到底违法吗?这位爬虫工程师给出了答案

    六月分享主题:爬虫 HTTP详解 网页结构简介 一文带你了解爬虫 大家好,本期将为大家来采访一位爬虫工程师,与他相识是在一个技术号主群中,只有他怼了我的文章,所以也算不打不相识!他便是小周码字号主:Loco。文章主要分为三部分,第一部分为Loco自述:简单讲述一下他是如何…...

    2024/4/12 16:43:51
  20. 嵌入式开发之davinci--- mcfw框架介绍

    整体上mcfw框架如下图从中可见其层次是清楚的,link实在基本的驱动之上的,而mcfw是在link之上的api,是通过link来实现相应的功能.可见link是框架中承上启下的层次,通过link来实现具体的功能,所以对link进行深入的学习和了解,对于理解mcfw以及扩展其功能是至关重要的. link的主要…...

    2024/4/12 4:44:04

最新文章

  1. 数据结构与算法(5)队列的基本操作

    #include<stdio.h> #include<stdlib.h> #include<stdbool.h> typedef int ElemType; #define MaxSize 10//队列的定义 typedef struct SqQueue {ElemType data[MaxSize];int front, rear;//front为头指针&#xff0c;rear为尾指针。这里并不是真正的“指针”…...

    2024/5/8 22:39:04
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. 巨控科技新品发布:全方位升级,引领智能控制新纪元

    标签: #巨控科技 #智能控制 #新品发布 #GRM560 #OPC560 #NET400 在智能控制领域&#xff0c;巨控科技始终以其前沿技术和创新产品引领着市场的潮流。近日&#xff0c;巨控科技再次以其行业领先的研发实力&#xff0c;推出了三大系列的新产品&#xff0c;旨在为各行各业提供更…...

    2024/5/5 9:14:44
  4. Kafka入门到实战-第五弹

    Kafka入门到实战 Kafka常见操作官网地址Kafka概述Kafka的基础操作更新计划 Kafka常见操作 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流平台&…...

    2024/5/7 19:08:30
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/8 20:48:49
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/8 19:33:07
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/8 20:38:49
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57