Flutter:实战技巧

Posted 懂你的大海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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";
  }

  @override
  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
            },
          ),
        ),
      ),
    );
  }
}

这里分享一部B站的视频,里面详细讲述了Flutter2.0的一些用法:https://www.bilibili.com/video/BV1DK4y197uk/

更多关于Flutter2.0的学习文档可以点击这里免费获得

Flutter学习进阶

2021 年无疑是 Flutter 技术如火如荼发展的一年。

每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。

知识要点:
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter Dart语言系统入门

以上资料全部免费赠送,点击这里免费下载!!!

以上是关于Flutter:实战技巧的主要内容,如果未能解决你的问题,请参考以下文章

Android课程---Android Studio使用小技巧:提取方法代码片段

错误记录Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )(代码片段

VS2015使用技巧 打开代码片段C#部分

26个jQuery代码片段使用技巧

VS中添加自定义代码片段——偷懒小技巧

在 webview_flutter 中启用捏合和缩放,在哪里添加代码片段 [this.webView.getSettings().setBuiltInZoomControls(true);]