zoukankan      html  css  js  c++  java
  • 10、Flutter资源和图片

    资源和图片

    Flutter应用程序可以包含代码和assets(资源)。asset打包到程序安装包,可在运行时访问。

    常见类型的asset包括静态数据(JSON文件)、配置文件、图标和图片(JPEG、WebP、GIF、PNG....).

    添加资源和图片

    指定assets

    Flutter使用pubspec.yaml文件来识别应用程序所需的资源asset:

    flutter:
      # The following line ensures that the Material Icons font is
      # included with your application, so that you can use the icons in
      # the material Icons class.
      uses-material-design: true
      # To add assets to your application, add an assets section, like this:
      # assets:
      #   - images/a_dot_burr.jpeg
      #   - images/a_dot_ham.jpeg
      assets:
        - images/wudangshan.jpg
    

    配置完成后,需要点击Packages get来更新资源。

    加载assets

    Flutter应用可以通过AssetBundle对象访问其asset。具体方法如下。

    加载文本配置文件

    每个Flutter应用程序都有一个rootBundle对象,可以轻松访问主资源包。可以直接使用package:flutter/services.dart中全局静态的rootBundle对象来加载资源。

    下面的示例是如何使用rootBundle来加载config.json配置文件:

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

    注意:加载配置文件需要使用异步处理,因为文件的读写操作需要时间。

    加载图片

    Flutter可以为当前设备加载适合其分辨率的图像。不同手机DPI是不同的,DPI越高画面越清晰。

    1) 声明分辨率相关的图片资源

    不同分辨率的图片,应该根据特定的目录结构来保存资源,结构如下所示:

    .../image.png
    .../Mx/image.png
    .../Nx/image.png

    其中M和N是数字标识符,代表其中所包含图像的分辨率,它们指定不同设备像素比例的图片。

    .../my_icon.png
    .../2.0x/my_icon.png
    .../3.0x/my_icon.png

    在设备像素比率1.8的设备上会选择2.0x,对于2.7的设备像素比率将选择3.0x。设备选择的是相近的图片资源。

    2) 加载图片

    要加载图片,在widget的build方法中使用AssetImage类。例如可以声明在asset中加载logo。

    Widget build(BuildContext context){
        return new DecoratedBox(
            decoration: BoxDecoration(
                image: DecorationImage(
                    image: AssetImage('images/logo.png'),
                    // ...
                ),
                // ...
            ),
        );
        // ...
    }
    
    1. 依赖包中的资源图片

    要加载依赖包中的图像,必须给AssetImage提供package参数。

    例如应用程序依赖一个名为"resources"的包,它具有如下目录结构:

    .../pubspec.yaml
    .../assets/wifi.png
    .../assets/add.png
    .../assets/phone.png

    然后加载图像使用AssetImage代码如下所示:

    new AssetImage('assets/wifi.png', package:'resources');
    

    平台assets

    有时候可以直接在平台项目中使用asset。以下是在Flutter框架加载并运行之前使用资源的两种常见情况。

    更新应用图标

    更新Flutter应用程序启动图标的方式与在本机Android或iOS应用程序中更新启动图标的方式相同。

    更新启动页

    在Flutter框架加载时,Flutter会使用本地平台绘制启动页。此启动页将持续到Flutter渲染应用程序的第一帧时。

    在Android中要将启动屏幕添加到Flutter应用程序,请导航至drawable目录,打开launch_background.xml,通过自定义drawable来实现自定义启动界面。

    在iOS中要将启动屏幕添加到Flutter应用程序,请导航至../ios/Runner。在Assets.xcassets/LaunchImage.imageset。拖入图片并命名为LaunchImage.png、LaunchImage@2x.png、LaunchImage@3x.png。

    自定义字体

    操作系统所带的字体往往不能满足应用场景的需要,这时候需要使用特殊字体处理。

    在工程的根目录下创建fonts文件夹,并放入字体文件。

    在pubspec.yaml中添加自定义字体配置,其中family为字体名称,fonts为字体路径。

      fonts:
        - family: myfont
          fonts:
            - asset: fonts/myfont.ttf
    

    编写自定义示例代码,完整代码如下所示:

    import 'package:flutter/material.dart';
    void main() => runApp(
      MaterialApp(
        title: '自定义字体',
        home: MyApp(),
      )
    );
    class MyApp extends StatelessWidget{
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text('自定义字体'),),
          body: Center(
            child: Text(
              '你好,Flutter',
              style: TextStyle(fontFamily: 'myfont', fontSize: 36.0),
            ),
          ),
        );
      }
    }
    
  • 相关阅读:
    variables _ golang
    values _ golang
    hello world _ golang
    golang
    英语
    ubuntu下安装node、node代码调试
    xampp日常需求
    垂直居中方法总结
    angularJS之ui-router插件(1)
    Sass学习
  • 原文地址:https://www.cnblogs.com/pengjingya/p/14929302.html
Copyright © 2011-2022 走看看