前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动手编写你的第一个 Flutter 应用

动手编写你的第一个 Flutter 应用

作者头像
CSDN技术头条
发布2020-02-26 09:40:11
9400
发布2020-02-26 09:40:11
举报
文章被收录于专栏:CSDN技术头条CSDN技术头条

我将带领大家尝试编写一个 Flutter 应用,感受一下 Flutter 开发的语法特点和运行效率。

Flutter 应用运行起来比 RN 流畅、编译快、热加载快,所以开发和调试的效率非常高。本文将着重给大家讲解下 Flutter 官方默认创建的应用,然后编写一个简单的 Flutter 尝鲜小应用。

本文将主要介绍:

  • 用 Flutter 创建一个默认应用
  • Flutter 默认应用的分析讲解
  • Flutter 编写一个小 Demo

用 Flutter 创建一个默认应用

本文的开发工具 IDE 用的是 Visual Studio Code,当然也可以使用 Android Studio 进行开发。关于用 Visual Studio Code 创建新的 Flutter 项目前面讲过,这里就不再重复讲解了。

默认新建的 Flutter 项目都是这个简单的实例,运行效果如下图所示:

Flutter 官方实例

点击 + 号 FloatingActionButton,中间的 Text Widget 进行累加更新数字统计计数。整体功能还是很简单的,主要涉及内容为控件点击事件、Text Widget 的显示、 setState(() {...}) 更新内容等。

那么接下来通过代码结合注释讲解方式来看下这个官方实例 main.dart 的实现流程:

代码语言:javascript
复制
import 'package:flutter/material.dart';

//main.dart为应用入口dart类,里面void main()方法为入口函数
// 这里是lambda缩略写法,完整写法为下面这种:
// void main(){
//   return runApp(MyApp());
// }
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // 这个Widget是应用的根布局,类似于页面容器
  //构建搭建页面
  @override
  Widget build(BuildContext context) {
    //入口页使用MaterialApp这个页面脚手架
    //可以快速构建页面
    //MaterialApp这个脚手架默认自带顶部ToolBar、路由、主题、国际化等等配置
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // 在这里我们可以配置应用全局主题,后面主题课程部分会详细讲解
        //
        // 我们可以通过flutter run命令来运行程序,会看到蓝色状态栏和标题栏
        // 通过 primarySwatch属性来配置状态栏和标题栏颜色
        primarySwatch: Colors.green,
      ),
      // 设置启动页面Widget
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

// 继承StatefulWidget,有状态管理
class MyHomePage extends StatefulWidget {
  // 这个是有参构造方法,用来传值的,这里我们不管
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  //重写创建状态
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

  // 自定义创建状态管理,继承自State<T>
class _MyHomePageState extends State<MyHomePage> {
  //声明变量临时存储次数
  int _counter = 0;
  // 定义方法来累加次数
  void _incrementCounter() {
    setState(() {
      //setState里用于刷新UI和绑定数据
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    // 这个方法每次调用 setState 都会调用
    //
    // Flutter框架已经帮我们优化了这部分,所以当我们需要刷新状态的时候不用担心性能问题
    // 这个用来构建页面具体布局,这里使用了Scaffold脚手架
    // 里面包含了AppBar、body、bottomNavigationBar、floatingActionButton等
    return Scaffold(
      appBar: AppBar(
        // 通过配置AppBar属性来控制显示效果,这里通过title来设置标题内容
        title: Text(widget.title),
      ),
      body: Center(
        // body部分用Center Widget布局来加载Widget布局内容,子控件居中排列
        child: Column(
          // Column是一个纵向列布局,子控件纵向排列
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            //子控件,Text Widget用来显示文字内容
            Text(
              'You have pushed the button this many times:',
            ),
            // 动态绑定数据
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      // 浮动+号按钮
      floatingActionButton: FloatingActionButton(
        // 设置点击事件,执行_incrementCounter方法累加计数
        onPressed: _incrementCounter,
        // 设置长按提示的信息
        tooltip: 'Increment',
        // 设置图标
        child: Icon(Icons.add),
      ),
    );
  }
}

通过 primarySwatch 属性来配置状态栏和标题栏颜色效果如下图:

Flutter 更改主题色调

一般入口文件用 MaterialApp 脚手架构建,其它页面可以不使用。

我们看下 MaterialApp 脚手架构造方法都提供了哪些可配置的属性功能:

代码语言:javascript
复制
const MaterialApp({
    Key key,
    this.navigatorKey,
    this.home,
    this.routes = const <String, WidgetBuilder>{},
    this.initialRoute,
    this.onGenerateRoute,
    this.onUnknownRoute,
    this.navigatorObservers = const <NavigatorObserver>[],
    this.builder,
    this.title = '',
    this.onGenerateTitle,
    this.color,
    this.theme,
    this.darkTheme,
    this.locale,
    this.localizationsDelegates,
    this.localeListResolutionCallback,
    this.localeResolutionCallback,
    this.supportedLocales = const <Locale>[Locale('en', 'US')],
    this.debugShowMaterialGrid = false,
    this.showPerformanceOverlay = false,
    this.checkerboardRasterCacheImages = false,
    this.checkerboardOffscreenLayers = false,
    this.showSemanticsDebugger = false,
    this.debugShowCheckedModeBanner = true,
  })

再看下 Scaffold 脚手架构造方法给我们提供的可配置的属性功能:

代码语言:javascript
复制
const Scaffold({
    Key key,
    this.appBar,
    this.body,
    this.floatingActionButton,
    this.floatingActionButtonLocation,
    this.floatingActionButtonAnimator,
    this.persistentFooterButtons,
    this.drawer,
    this.endDrawer,
    this.bottomNavigationBar,
    this.bottomSheet,
    this.backgroundColor,
    this.resizeToAvoidBottomPadding,
    this.resizeToAvoidBottomInset,
    this.primary = true,
    this.drawerDragStartBehavior = DragStartBehavior.down,
  })

具体这些属性作用,大家可以大致有所了解,这里不再详细解释,后面课程会讲解。

看到这里,你觉得怎么样,Flutter 实现一个页面就是这样简单的。

文章摘自专栏

用 Flutter 编写一个小 Demo

接下来我们动手自己写一个简单的页面,实现页面显示一段文字加一张图片,点击按钮切换文字内容的小 Demo:

代码语言:javascript
复制
import 'package:flutter/material.dart';

void main() {
  return runApp(ShowApp());
}

class ShowApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: ShowAppPage(),
    );
  }
}


class ShowAppPage extends StatefulWidget {

  @override
  _ShowAppPageState createState() {
    return _ShowAppPageState();
  }
}

class _ShowAppPageState extends State<ShowAppPage> {
  String title = '春天的脚步近了,我们应该更加青春有朝气';
  bool change = false;

  void _changeTextContent() {
    setState(() {
      //setState里用于刷新UI和绑定数据
      title = change ? "这个图片很好看,描述了春天的气息" : "春天的脚步近了,我们应该更加青春有朝气";
      change = !change;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('春天的气息'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Padding(
              padding: EdgeInsets.all(10),
              child: Image.network(
                  'https://gss0.bdstatic.com/94o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike272%2C5%2C5%2C272%2C90/sign=eaad8629b0096b63951456026d5aec21/342ac65c103853431b19c6279d13b07ecb8088e6.jpg'),
            ),
            // 动态绑定数据
            Padding(
              padding: EdgeInsets.all(10),
              child: Text(
                '$title',
                style: Theme.of(context).textTheme.title,
              ),
            ),

            RaisedButton(
              onPressed: _changeTextContent,
              child: Text('点击更换内容'),
            ),
          ],
        ),
      ),
    );
  }
}

用 flutter run 编译运行到真机或者模拟器上,运行效果如下图所示:

Flutter 小 Demo 效果

怎么样,效果是不是很好?构建这一个页面,对于其他语言可能要花费比较多的工作量,而 Flutter 构建的非常快,运行体验也很流畅。

总结

本文主要是给大家实践用 Flutter 搭建一个小应用 Demo,给大家一个入门的印象。俗话说熟能生巧,我们不但要理解理论知识,也需要动手实践,才能够更好地进行深入的研究和开发。建议如下:

  • 将本文内容动手敲一遍,亲身体验 Flutter 的应用编写和运行的流畅度。
  • 先了解 Flutter 的入口文件和入口函数,以及简单了解 MaterialApp、Scaffold 脚手架的概念。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GitChat精品课 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用 Flutter 创建一个默认应用
  • 用 Flutter 编写一个小 Demo
  • 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档