美文网首页
学习Flutter的第十三天

学习Flutter的第十三天

作者: 囧rg | 来源:发表于2023-04-30 11:10 被阅读0次

6.13 import

import 'dart:xxx';引入Dart标准库
import 'xxx/xxx.dart';引入相对路径的Dart文件
import 'package:xxx/xxx.dart';引入Pub仓库pub.dev(或者pub.flutter-io.cn)中的第三方库
import 'package:project/xxx/xxx.dart';引入自定义的dart文件
import 'xxx' show compute1,compute2 只导入compute1,compute2
import 'xxx' hide compute3 除了compute都引入
import 'xxx' as compute4将库重命名,当有名字冲突时
library compute5;定义库名称
part of compute6;表示文件属于某个库

// dart sdk 内的库
import 'dart:io';
// flutter内的库
import 'package:material/material.dart';
// 第三方库
import 'package:dio/dio.dart';
// 自己的库(文件)
import 'package:project/common/uitls.dart';
// 相对路径引用
import 'xxx/xxx/xxx/xxx.dart';

命名规范:
文件夹:小写下划线 lowercase_with_underscores
文件:小写
下划线 lowercase_with_underscores
类名:大写开头的驼峰命名法 UpperCamelCase
变量名:小写开头的驼峰命名法 lowerCamelCase
常量:小写开头的驼峰命名法 lowerCamelCase

首字母缩写词长度不超过两个字母的,首字母大写,比如 HttpRequest
长度两个字母的首字母缩写词可完全大写,比如 IOStreamDBUtils
但单个单词缩写仍然仅首字母大写,比如 Id

6.14 加载16进制图片

Flutter中, Color 类仅接收整数作为参数. 你也可以使用 fromARGB 或者 fromRGBO .

比如拿到了一个16进制颜色 #b74093 . 因为 Color 还需要传入透明度, 255 就是最大值(也就是不透明), 转为16进制就是 0xFF , 所以我们只需这样表示:

const color = Color(0xffb74093);

正规一点的写法(可选, 因为大小写不敏感):

const color = Color(0xFFB74093);

或者创建一个方法

class HexColor extends Color {
  static int _getColorFromHex(String hexColor) {
    hexColor = hexColor.toUpperCase().replaceAll("#", "");
    if (hexColor.length == 6) {
      hexColor = "FF" + hexColor;
    }
    return int.parse(hexColor, radix: 16);
  }

  HexColor(final String hexColor) : super(_getColorFromHex(hexColor));
}

// 调用
Color color1 = HexColor("b74093");
Color color2 = HexColor("#b74093");

6.15 沉浸状态栏

参考:https://www.bilibili.com/read/cv5799233

修改安卓文件:

package com.example.fm_app

import io.flutter.embedding.android.FlutterActivity

// 需要引入下面的包
import android.os.Build;
import android.os.Bundle;

class MainActivity: FlutterActivity() {
        // 需要添加如下代码
    override fun onCreate(saveInstanceState:Bundle?){
        super.onCreate(saveInstanceState);
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
            window?.statusBarColor=0
        }
    }
}

6.16 显示/隐藏控件

参考:https://www.jianshu.com/p/7250226506af

6.16.1 if 判断

实际效果,不会占位,隐藏时TestWidget不会加载,可else一个占位(则会加载占位的组件)

if(!_hidden)
    Container(
        color: Colors.deepOrangeAccent,
        child: TestWidget(msg: 'if 判断',),
     )

6.16.2 Opacity

实际效果,会占位,显示隐藏TestWidget都会加载

Container(
  color: Colors.red,
  child: Opacity(
    opacity: _hidden?0:1,//会占位高度
    child: TestWidget(msg: 'Opacity',),
  ),
),

6.16.3 Offstage

实际效果,不会占位,显示隐藏TestWidget都会加载

Container(
  color: Colors.grey,
  child: Offstage(
    offstage: _hidden,///无占位高度
    child: TestWidget(msg: 'Offstage',),
  ),
),

6.16.4 Visibility

实际效果,可选择是否占位,不占位,隐藏时TestWidget不会加载,占位,显示隐藏TestWidget都会加载

Container(
  color: Colors.cyanAccent,
  child: Visibility(
      maintainAnimation: true,
      maintainState: true,
      maintainSize: true,//隐藏需要占位,前俩个也需要为true,内部断言会判断,不需要时都为false,maintainState影响是否加载
      child: TestWidget(msg: 'Visibility',),
      visible: _hidden
  ),
),

6.17 下载文件到本地目录

        var tempDir = await getApplicationDocumentsDirectory();
    String fullPath = tempDir.path + "/abc.xlsx'";
    var data = HttpUtils.download(urlStr, fullPath);

    File file = File(fullPath);
    bool exist = await file.exists();
    if (exist) {
      print("文件存在!"+fullPath);
    }
    var raf = file.openWrite(mode: FileMode.append);
    raf.write(data);
    await raf.close();

相关文章

网友评论

      本文标题:学习Flutter的第十三天

      本文链接:https://www.haomeiwen.com/subject/zodnjdtx.html