Flutter:实战小技巧

简介: 本文主要介绍在 Flutter 开发中的一些实用技巧。

本文主要介绍在 Flutter 开发中的一些实用技巧。

技巧1:flutter packages get 失败

当项目在执行 flutter packages get 等操作时,可能会遇到 “Waiting foranother flutter command to release the startup lock” 的提示。

是因为 Flutter 命令需要等上一个任务执行完成。如果出现长时间卡住的情况,可以通过打开 Flutter SDK 目录下的 /bin/cache/,然后找到 lockfile 文件,将其删除后并重新运行就不会被提示打断。

技巧2:快速创建 StatelessWidget 和 StatefulWidget

当编写 Flutter 代码时,在编辑框里输入 stl 可以自动弹出创建 StatelessWidget 的模板选项。

而当输入 stf 时,会弹出创建 StatefulWidget 的模板选项。

技巧3:获取状态栏高度和禁止字体缩放

一般我们可以通过 MediaQuery.of(context).size 获取到屏幕的大小,另外,在 MediaQuery 内部有一个 MediaQueryData 的参数,这个参数保存了很多设备的相关信息,如其中的 padding.top 代表了状态栏的高度,所以通过如下代码的方式,就可以在需要的地方获取到状态栏高度并且不需要 context:

MediaQueryData.fromWindow(WidgetsBinding.instance.window).padding.top

如果在开发的时候发现有些控件是从状态栏开始布局的,可以在外层包一个 SafeArea,而 SafeArea 内部就是利用 MediaQueryData,针对顶部状态栏和 iPhone X 以上机型的底部安全距离做了 padding 处理,在默认情况下 Scaffold 的 AppBar 内部就使用了 SafeArea。

MediaQueryData 还可以处理字体缩放。在 MediaQueryData 内的 textScaleFactor 表示系统字体的缩放信息,默认大小是跟随系统而变化的。

如果不希望应用跟随系统字体缩放而缩放,可以在需要的页面下进行嵌套设置,将 textScaleFactor 设置为 1 来禁止应用内的字体缩放:

MediaQuery(
      data: MediaQueryData.fromWindow(WidgetsBinding.instance.window)
          .copyWith(textScaleFactor: 1),
      child: new Container(),
    );

技巧4:实现页面异步加载

Flutter 可以通过 FutureBuilder 或者 StreamBuilder 简单实现页面的异步加载。

FutureBuilder 和 StreamBuilder 是通过 Future 和 Stream 获取数据后实现页面布局。如下代码所示:

import 'package:flutter/material.dart';

class Test extends StatelessWidget {
   
   
  const Test({
   
   Key key}) : super(key: key);

  Future<String> mockNetworkData() async {
   
   
    await Future.delayed(Duration(seconds: 3));
    return "success";
  }

  
  Widget build(BuildContext context) {
   
   
    return Container(
      color: Colors.white,
      child: Scaffold(
        body: Center(
          child: FutureBuilder<String>(
            future: mockNetworkData(),
            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
   
   
              // 根据结果返回不同页面
              switch (snapshot.connectionState) {
   
   
                case ConnectionState.none:
                  return Text('start...');
                case ConnectionState.active:
                case ConnectionState.waiting:
                  return SizedBox(
                    width: 60,
                    height: 60,
                    child: CircularProgressIndicator(
                        valueColor:
                        new AlwaysStoppedAnimation(Color(0xff000000))),
                  );
                case ConnectionState.done:
                  if (snapshot.hasError)
                    return Text('Error: ${snapshot.error}');
                  return Text('Result: ${snapshot.data}');
              }
              return null; // unreachable
            },
          ),
        ),
      ),
    );
  }
}

技巧5:Flutter sdk 版本升级或者降级到指定版本

升级 Flutter 版本

flutter upgrade

升级到指定版本

flutter upgrade v1.20.0-7.0.pre

降级到指定版本(需要进入 flutter 根目录执行 git 命令)

git reset --hard f139b11009aeb8ed2a3a3aa8b0066e482709dde3

命令中的 hard 为当前版本提交的 code 码,比如 8af6b2f038c1172e61d418869363a28dffec3cb4

image.png

image.png

flutter Tags 列表:Tags

相关文章
|
7月前
|
Dart
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(1)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(1)
|
7月前
|
Dart
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(2)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(2)
|
5月前
Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套
Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套 在 Flutter 中,ListView 和 PageView 是两个常用的控件,它们可以用于滑动展示大量内容的场景,且支持各种嵌套方式,本文将介绍其中的一些花式嵌套方式。
|
5月前
|
存储 前端开发
Flutter Provider状态管理---MVVM架构实战
Flutter Provider状态管理—MVVM架构实战 在Flutter中,状态管理是一个非常重要的概念。Flutter Provider是一种状态管理的解决方案,它提供了一种简单,灵活和高效的方法来管理Flutter应用程序中的状态。本文将详细介绍Flutter Provider的使用,以及如何在MVVM架构中使用它。
159 0
|
9月前
|
Dart IDE 开发工具
【腾讯云 Cloud Studio 实战训练营】尝鲜体验Flutter编写一个App应用
欢迎参加腾讯云 Cloud Studio 实战训练营!在本次训练营中,我们将通过App项目入口说明,基本文件说明,基础框架搭建,带您一步步编写一个基于 Flutter 的静态App系统。无论您是初学者还是有一定编程经验的开发者,本训练营都将为您提供一个深入了解和掌握 Flutter 技术以及App开发的机会。 使用 Flutter作为UI框架,我们将能够充分利用其强大的功能和优势,快速搭建一个高效、可扩展的App系统。Flutter是Google开源的构建用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台。
【腾讯云 Cloud Studio 实战训练营】尝鲜体验Flutter编写一个App应用
|
7月前
|
Dart
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(3)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(3)
|
9月前
|
测试技术 数据库 Android开发
Flutter系列文章-实战项目
在本篇文章中,我们通过一个简单的天气应用示例,综合运用了最近学到的知识,包括保存到数据库、进行 HTTP 请求等。通过这个实战项目,你可以更加深入地了解 Flutter 应用的开发流程,并掌握实际项目中的常用技术和最佳实践。
174 0
Flutter系列文章-实战项目
|
10月前
|
Dart
《深入浅出Dart》Flutter实战之TODO应用
Flutter实战之TODO应用 在本篇文章中,我们将构建一个TODO应用,使用最新的Dart语法和Flutter框架。这个TODO应用将具备添加、编辑、删除任务,以及任务的状态管理等功能。让我们一步一步地构建这个TODO应用。 步骤 1:创建Flutter项目 首先,我们需要创建一个Flutter项目。打开终端并执行以下命令:
108 0
|
开发框架
《闲鱼《Flutter 技术解析与实战》》电子版地址
近年来,随着移动智能设备的快速普及,移动多端统一开发框架已成为一个热门话题。闲鱼是国内最早接触使用 Flutter 的团队,经过多次研讨验证并大规模上线,在App性能、稳定性、开发效率上收益甚多。
104 0
《闲鱼《Flutter 技术解析与实战》》电子版地址
|
开发框架
《闲鱼《Flutter 技术解析与实战》》下载地址
近年来,随着移动智能设备的快速普及,移动多端统一开发框架已成为一个热门话题。闲鱼是国内最早接触使用 Flutter 的团队,经过多次研讨验证并大规模上线,在App性能、稳定性、开发效率上收益甚多。
111 0
《闲鱼《Flutter 技术解析与实战》》下载地址