Flutter框架解决盒约束widget和assets里加载资产技术

目录
  • 盒约束
  • 文本输入widget
  • assets
    • 加载资产

盒约束

flutter:
  assets:
    - assets/my_icon.png
    - assets/background.png

在Flutter中,小部件由其底层RenderBox对象渲染。渲染框受其父对象的约束,并在这些约束下调整自身大小。约束包括最小宽度、最大宽度和高度;尺寸由特定的宽度和高度组成。 通常,根据小部件如何处理其约束,有三种类型的框: 尽可能大。例如,“Center”和“ListView”的渲染框 遵循子部件的大小。例如,“变换”和“不透明度”渲染框。 指定尺寸。例如,图像和文本的渲染框 一些小部件(如Container)将根据构造函数参数而变化。默认情况下,容器占用尽可能多的空间,但如果为其指定宽度,它将采用指定的值。

import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
Future<String> loadAsset() async {
  return await rootBundle.loadString('assets/config.json');
}

其他,如行和列(弹性框),将根据给它们的约束而变化,如下面的“flex”部分所述。 这些约束有时是“紧”的,这意味着它们不会为渲染框留出空间来确定其自身的大小(例如,如果最小宽度和最大宽度相同,即宽度很窄)。主要示例是App小部件,它是RenderView类中包含的一个小部件:应用程序构建函数返回的子小部件的渲染框被分配了一个约束,迫使它精确地填充应用程序的内容区域(通常是整个屏幕)。Flutter中的许多框,特别是那些只包含一个子控件的框,会将其约束传递给其子控件。这意味着,如果在应用程序渲染树的根处嵌套一些框,则所有子节点都受这些渲染框的约束。 有些框是放松的,有“最大”约束,但没有“最小”约束。例如,中心。

 new AssetImage('icons/heart.png', package: 'my_icons')

文本输入widget

class ExampleWidget extends StatefulWidget {
  ExampleWidget({Key key}) : super(key: key);
  @override
  _ExampleWidgetState createState() => new _ExampleWidgetState();
}

TextField是最常用的文本输入小部件 默认情况下,TextField具有下划线装饰。通过将InputDecoration设置为装饰属性,可以添加标签、图标、提示文本和错误文本。要完全删除装饰(包括下划线和为标签保留的空间),请将装饰明确设置为空白。

TextFormField包装一个TextField并将其集成到表单中。需要提供一个验证函数来检查用户的输入是否满足某些限制(例如,电话号码),或者在希望将TextField与其他FormField集成时使用TextFormField。

class _ExampleWidgetState extends State<ExampleWidget> {
  final TextEditingController _controller = new TextEditingController();
  @override
  Widget build(BuildContext context) {
    return new Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        new TextField(
          controller: _controller,
          decoration: new InputDecoration(
            hintText: 'Type something',
          ),
        ),
        new RaisedButton(
          onPressed: () {
            showDialog(
              context: context,
              child: new AlertDialog(
                title: new Text('What you typed'),
                content: new Text(_controller.text),
              ),
            );
          },
          child: new Text('DONE'),
        ),
      ],
    );
  }
}

assets

资产部分的颤振部分指定应用程序中应包含的文件。每个资产都由相对于pubspec.yaml文件位置的显式路径标识。资产的申报顺序无关紧要。资产的实际目录可以是任何文件夹(本例中为资产)。 在构建过程中,Flutter将资产放在一个称为资产包的特殊归档中,应用程序可以在运行时读取该归档。 资产变体 构建过程支持资产变体的概念:不同版本的资产可以在不同的上下文中显示。当在pubspec.yaml的assets部分中指定资产路径时,在构建过程中,将在相邻子目录中找到任何同名文件。然后,这些文件将与指定的资产一起包含在资产包中。

import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
Future<String> loadAsset() async {
  return await rootBundle.loadString('assets/config.json');
}

加载资产

应用程序可以通过AssetBundle对象访问其资产。 有两种主要方法允许从资产包加载字符串/文本(loadString)或图像/二进制(load)。 加载文本资源 每个Flutter应用程序都有一个rootBundle对象,可以轻松访问主资源包。可以直接使用包中的全局静态rootBundle对象:flutter/services。部件以加载资产。

但是,建议使用DefaultAssetBundle获取当前BuildContext的AssetBundle。此方法不使用应用程序构建的默认资产捆绑包,但允许父小部件在运行时替换不同的资产捆绑包(这对于本地化或测试场景非常有用)。

 new AssetImage('icons/heart.png', package: 'my_icons')

通常,可以使用DefaultAssetBundle。of()从应用程序运行时加载资产(如JSON文件)。 可以使用rootBundle直接在Widget上下文外加载这些资产,或者当AssetBundle的句柄不可用时,

Widget build(BuildContext context) {
  // ...
  return new DecoratedBox(
    decoration: new BoxDecoration(
      image: new DecorationImage(
        image: new AssetImage('graphics/background.png'),
        // ...
      ),
      // ...
    ),
  );
  // ...
}

以上就是Flutter框架解决盒约束widget和assets里加载资产技术的详细内容,更多关于Flutter解决盒约束widget assets的资料请关注我们其它相关文章!

(0)

相关推荐

  • Flutter Widget之FutureBuilder使用示例详解

    目录 正文 正文 本质上Flutter和Dart是异步的,Dart是Futures使你能够管理IO而不用担心线程或死锁. 例如,从应用程序外部加载数据需要时间,而Futures允许Dart先处理其他任务直到请求的数据可用. 但是涉及Future时,你如何构建Flutter小部件呢? 输入FutureBuilder,这是处理Futures的构造器 FutureBuilder( future: _data, builder: _myBuilderFunction, ) FutureBuilder让你

  • Flutter Widget开发之Focus组件图文详解

    目录 正文 FocusNode对象 小部件树向上传送时会起到怎样的作用呢 正文 就网络和应用程序而言,键盘快捷键很重要,今天我们要谈的便是让这类快捷键得以在Flutter运作的小部件:Focus.Shortcuts和Action. 这套系统中的第一个小部件是Focus,小部件树中到处都有它的踪迹,包括按钮个文本输入在内之类的用户界面交互区块 FocusNode对象 这个小部件还包含FocusNode对象 Focus({ FocusNode? node, Widget? child, }) : n

  • Flutter Widget开发Shortcuts快捷键实例

    目录 正文 ShortcutActivators到Intents的映射 想要捕获Control + C ? 正文 Flutter所提供的键盘快捷键系统直接用就很棒了,而且还提供了大量的空间可根据自己的喜好配置操作,之前那一篇博客介绍了小部件Focus 它会指示Flutter以你的应用来包裹键盘事件,以寻找匹配的Shortcuts小部件,这便会带入Shortcuts小部件. ShortcutActivators到Intents的映射 上一篇博客,我们以Accordion属性所假想的小部件树,挑个你

  • Flutter CustomPaint绘制widget使用示例

    目录 CustomPaint 介绍 使用 CustomPaint size 的大小. isComplex willChange foregroundPainter 动画 CustomPaint 介绍 Flutter CustomPaint 提供了一个 canvas,可以在绘制阶段在上面进行绘制内容. 需要绘制时,CustomPaint 首先要求它的 painter 在当前画布上绘画,然后它绘画它的 child,在绘画完它的 child 之后,要求他的 foregroundPainter 绘画.

  • Flutter Widget 之package mason实现详解

    目录 正文 使用Mason砖块 运行mason make 正文 Flutter有个悠久的传统,便是运行flutter create并删除所有内容,然后在所有标准样板文件(boilerplate)当中尽力复制和粘贴,这很费时又容易出错,而且比报税更无趣,但是是否别无他法? 进入Mason,这是用于欧快速组装新项目或功能的软件包,可以从成为“砖块”的自定义模版中生成代码,而这些模版根据你的项目的特定值呈现 使用Mason砖块 例如想象一下,你正为Flutter新项目使用Mason砖块的pubspec

  • Flutter Widget 之StatefulBuilder构建方法详解

    目录 正文 性能问题解决 正文 你曾否意识到你需要拆分一个大型的构建方法,但又觉得这听起来很费劲? 试试StatefulBuilder 以最小的代价获得一个个单独的小部件的所有性能 想象一下,这样的一个小部件,有一个可以切换单一标志的便宜的子部件,然后是一个昂贵的小部件. 除非绝对必要,否则你不会想要重建它 bool isExpanded = false; Widget build(context) { return Column( children: [ InexpendsiveStatefu

  • Flutter Widget之NavigationBar使用详解

    目录 正文 background 正文 这是一个和时间一样古老的故事.您的应用程序有三到五个主要内容区域,您的用户应该能够在任何屏幕之间切换. 那么,在这种情况下,请查看NavigationBar. 现在,您可能会想,“底部们有导航栏吗?,这个新的导航栏小部件有什么特别之处?“ 不同之处在于BoottomNavigationBar使用Material 2设计系统,而NavigationBar具有新的Material 3外观和感觉. 例如,药丸形状,它以对比色指示活动的目的地. 要启动并运行,为N

  • Flutter Widget 之FocusableActionDetector使用详解

    目录 Material按钮 GestureDetector自定义按钮 为按钮添加一些条件性的样式 Material按钮 Material按钮会很好 但我们知道它们不一定适合你的应用程序,所以你要自己编写.可悲的是,从头开始编写自己的空间可能是一项艰巨的工作. 桌面用户期待悬停高亮.焦点和键盘快捷键,这是很难做好的. GestureDetector自定义按钮 是这样的,你在你的应用程序中创建一个自定义的按钮, 使用GestureDetector,当你点击它的时候,按钮会做一些事情 GestureD

  • Flutter框架解决盒约束widget和assets里加载资产技术

    目录 盒约束 文本输入widget assets 加载资产 盒约束 flutter: assets: - assets/my_icon.png - assets/background.png 在Flutter中,小部件由其底层RenderBox对象渲染.渲染框受其父对象的约束,并在这些约束下调整自身大小.约束包括最小宽度.最大宽度和高度:尺寸由特定的宽度和高度组成. 通常,根据小部件如何处理其约束,有三种类型的框: 尽可能大.例如,“Center”和“ListView”的渲染框 遵循子部件的大小

  • flutter传递值到任意widget(当需要widget嵌套使用需要传递值的时候)

    如果我们有这样一个应用场景: WidgetA执行点击之后将数据通过widgetB传递到其下的widgetC. 通常可以通过设置构造函数,传递对应参数到制定的widget树中,如下面代码所描述: 表示需要将widgetA中的点击改变内容传递到widgetB中的widgetC中展示: 需要通过设置widgetB的构造函数,接收对应参数,再传递给widgetC展示: class Inheritedwidget extends StatefulWidget { @override _InheritedW

  • SpringBoot整合JWT框架,解决Token跨域验证问题

    一.传统Session认证 1.认证过程 1.用户向服务器发送用户名和密码. 2.服务器验证后在当前对话(session)保存相关数据. 3.服务器向返回sessionId,写入客户端 Cookie. 4.客户端每次请求,需要通过 Cookie,将 sessionId 回传服务器. 5.服务器收到 sessionId,验证客户端. 2.存在问题 1.session保存在服务端,客户端访问高并发时,服务端压力大. 2.扩展性差,服务器集群,就需要 session 数据共享. 二.JWT简介 JWT

  • Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块完美实现

    中午的时候发了第一篇 Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块 ,发现实现上还是有问题,有很多理解不到位的地方,晚上详细解决下了,终于实现MVC各模块按需加载了,哈皮. 上篇文章中,关于ExtJs这个玩意的评论就跟java和.Net那个好一样,既然上了贼船,就难下了,而且对于企业级的应用我个人觉得Extjs框架还是不错的,尤其是没有UI设计的团队(苦逼的程序员就兼UI吧),起码难得发现一个做的比较好的UI框架(国产的miniUI貌似看的过去,其他的就有点

  • Android框架Volley之利用Imageloader和NetWorkImageView加载图片的方法

    首先我们在项目中导入这个框架: implementation 'com.mcxiaoke.volley:library:1.0.19' 在AndroidManifest文件当中添加网络权限: <uses-permission android:name="android.permission.INTERNET"/> 下面是我们的首页布局: 在这个布局当中我们将Volley框架的所有功能都做成了一个按钮,按下按钮之后就会在"显示结果"下面显示结果,显示结果下

  • 解决ionic和angular上拉加载的问题

    说到ionic上拉加载就跟pc的分页是一样的,他需要在html数据列表的最下面边添加 <ion-infinite-scroll ng-if="hasmore" on-infinite="loadMore()" distance="10%"> </ion-infinite-scroll> 当列表为空 当ng-if为true的时候, 列表没有被填充满的时候 ,他就会自动加载loadMore(): <span style=

  • 微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题

    微信多图片上传必须挨个上传,也就是不能并行,得串行: 那么我们可以定义一个如下所示的上传函数: var serverIds = []; function uploadImages(localImagesIds) { if (localImagesIds.length === 0) { $.showPreloader('正在提交数据...'); $('form').submit(); } wx.uploadImage({ localId: localImagesIds[0], // 需要上传的图片

  • MUI 解决动态列表页图片懒加载再次加载不成功的bug问题

    在项目开发中遇到这样的功能,要求实现列表页动态加载功能,在实现过程中遇到一些小小插曲,下面小编给大家详细说明下解决方法: 首次加载时图片可以获取成功,再次加载失败,通过chrome调试发现img 的 data-lazyload 属性没改变 调试的时候发现了bug $.fn.imageLazyload = function(options) { var lazyloadApis = []; this.each(function() { var self = this; var lazyloadAp

  • Django框架模板文件使用及模板文件加载顺序分析

    本文实例讲述了Django框架模板文件使用及模板文件加载顺序.分享给大家供大家参考,具体如下: 模板功能 产生html,控制页面上产生的内容.模板文件不仅仅是一个html文件. 模板文件包含两部分内容: 1.静态文件:css,js,html 2.动态内容:用于动态的去产生一些网页内容,通过模板语言产生 模板文件的使用 通常是在视图函数中使用模板产生html内容返回给客户端 a,加载模板文件 loader.get_template 获取模板文件的内容,产生一个模板对象 b,定义模板上下文 Requ

  • 解决Android WebView拦截url,视频播放加载失败的问题

    需求:Android调用webView加载网页的时候,拦截某一个链接不执行此链接,执行指定跳转到其他activity页面. webview的setWebViewClient方法中提供了几个api: // 此回调是拦截点击要跳转的url链接,并对请求的url链接做修改(添加删除字段) public WebResourceResponse shouldInterceptRequest(WebView view, String url) // 在点击请求的是链接是才会调用,重写此方法返回true表明点

随机推荐