Flutter 开发笔记

一、前言

最近在使用Flutter开发新项目,但是有很多小的使用点很容易遗忘,这里做下笔记,以备下次使用时查阅

二、小笔记汇总

  • 1、键盘回收
    点击空白处回收键盘是很多界面都需要的需求,下面是实现方法
/// 在body上添加一个手势控件,实现键盘回收
@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: GestureDetector(
        onTap: (){
          // 键盘回收
          FocusScope.of(context).requestFocus(FocusNode());
        },
        child:Container()
      )
    );
  }
  • 2、延时执行
// 延时1s执行返回
Future.delayed(Duration(seconds: 1), (){
   Navigator.of(context).pop();
});
  • 3、界面返回问题
    需求:禁用掉iOS侧滑返回功能,监听安卓虚拟按键,监听返回按钮
    WillPopScope,在fultter 中专门拦截返回导航键,我们的操作都是基于他的
    使用了这个控件之后,iOS中的侧滑返回会失效,Nav上的返回事件和安卓虚拟返回按键都会监听到,可以在里面做想要的处理,例如,点击两次退出app,回传数据等
/// 控件介绍
 const WillPopScope({
    Key key,
    @required this.child, // 可以将界面写到这里
    @required this.onWillPop, // 在这里处理返回事件
  }) : assert(child != null),
       super(key: key);

/// 具体用法
/// .........
@override
  Widget build(BuildContext context) { 
    return WillPopScope(
        child: Scaffold(
          body: Container(
                child: Text('WillPopScope使用介绍')
          ),
        ),
        onWillPop: _requestPop
    );
  }

// 手动处理返回事件
  Future _requestPop() async{
    Navigator.pop(context);//返回上一个界面
    return Future.value(false); // false 则不退出,true 退出
  }
  • 4、退出应用
    SystemNavigator.pop()
    使用上述3中的WillPopScope监听返回按钮,在onWillPop中处理退出问题。
/// 导入包
import 'package:flutter/services.dart';
/// .........
@override
  Widget build(BuildContext context) { 
    return WillPopScope(
        child: Scaffold(
          body: Container(
                child: Text('退出应用')
          ),
        ),
        onWillPop: _requestPop
    );
  }
/// 返回按钮点击事件
 Future _requestPop() async{
    SystemNavigator.pop();;//退出应用
    return Future.value(false); 
  }
  • 5、字体去除下滑线
    有时候在一些Widget中,字体会默认自带下滑线,去除的方法是在style属性中设置decoration
Text('字体去除下滑线',style: TextStyle( decoration: TextDecoration.none))
  • 6、获取系统语言
    在做国际化的时候会需要获取当前的系统语言和地区信息,框架有提供方法,我们可以用下面方法获取语言和地区
// 获取本地语言类型
Locale locale = Localizations.localeOf(context);
String localLanguage =  locale.languageCode; // 语言 en-英文 zh-中文
String localCountry = locale.countryCode; // 地区
  • 7、设置版本号不生效
    Flutter 版本号控制在 pubspec.yaml 里面,
    version: 1.0.1+1 #版本号和buildNumber
    设置后不生效执行清除后重新安装
1、修改后执行flutter get
2、执行flutter clean
3、重新build安装
  • 8、打包
    iOS打包时先在项目路径下执行如下命令,执行命令的时候Xcode保持关闭,执行结束后再打开Xcode打包
flutter clean
flutter build ios --release

Android打包可以直接在项目中打包,配置好密钥等信息后直接执行,注意storeFile路径中不能有中文

flutter build apk
  • 9、判断平台
import 'dart:io';

void getPlatform(){
  if (Platform.isIOS){

  }else if (Platform.isAndroid){

  }
}
  • 10、TextField设置高度后hintText居中
    TextField设置高度小于默认高度后会出现hintText不居中的情况,经过一番摸索后发现InputDecoration中contentPadding设置padding即可
TextField(
      decoration: InputDecoration(
                hintText: "用户名或邮箱",
                border: InputBorder.none, // 去掉下滑线
                contentPadding: EdgeInsets.all(0)
),
  • 11、图片设置圆角
    实现图片圆角有多种办法,但是这种是目前发现最简单的一种
ClipRRect (
         borderRadius: BorderRadius.circular(4),
         child: Image.asset("images/header.png"),
    ),

三、其他代码无关

  • 1、等待异常
Waiting for another flutter command to release the startup lock...

有时候会出现如上等待其他指令执行,但是久久不能好,这个时候关闭IDE也是无效的,具体解决办法可以找到flutter路径,删除路径下的lockfile文件,删除之后再运行,我的文件地址为/Users/xxxxxx/app/flutter/bin/cache/lockfile

  • 2、判断运行模式,debug Or release
    有时候我们希望代码只在debug模式下运行,例如打印信息等,这个时候我们就需要判断一下当前的运行模式了,然后对各种情况做处理,
    具体的用 assert和编译常数kReleaseModel判断,参考
    Flutter 编译模式debug和release判断

  • 3、Xcode运行空白报错 Could not create Dart VM instance.

2019-09-23 16:50:13.088675+0800 Runner[1474:642130] [VERBOSE-2:dart_vm_data.cc(19)] VM snapshot invalid and could not be inferred from settings.
2019-09-23 16:50:13.089348+0800 Runner[1474:642130] [VERBOSE-2:dart_vm.cc(245)] Could not setup VM data to bootstrap the VM from.
2019-09-23 16:50:13.089495+0800 Runner[1474:642130] [VERBOSE-2:dart_vm_lifecycle.cc(89)] Could not create Dart VM instance.
2019-09-23 16:50:13.090369+0800 Runner[1474:642130] [VERBOSE-3:shell.cc(212)] Check failed: vm. Must be able to initialize the VM.
(lldb)
Flutter 开发笔记_第1张图片
image.png

如上图所示,选择Release模式运行

四、外文链接

有很多文章也进行了很棒的总结,这里贴出地址

  • Flutter开发中的一些Tips
  • Flutter开发中的一些Tips2
  • Flutter开发中的一些Tips(三)

你可能感兴趣的:(Flutter 开发笔记)