Flutter初识

第一个简单的示例代码:

1、yaml中添加库文件

cupertino_icons: ^0.1.2english_words: ^3.1.0

2、

import ‘package:flutter/material.dart‘;import ‘package:english_words/english_words.dart‘;

void main() {  runApp(new MyApp());}

class MyApp  extends StatelessWidget{  @override  Widget build(BuildContext context) {

    return new MaterialApp(      home: new RandomWords(),    );  }}

class RandomWords extends StatefulWidget {  @override  State<StatefulWidget> createState() {    return new RandomWordsState();  }}

class RandomWordsState extends State<RandomWords> {

  final _suggestions = <WordPair>[];  final _biggerFont = const TextStyle(fontSize: 18.0);

  Widget _buildSuggestions() {    return new ListView.builder(        padding: const EdgeInsets.all(16.0),        // 对于每个建议的单词对都会调用一次itemBuilder,然后将单词对添加到ListTile行中        // 在偶数行,该函数会为单词对添加一个ListTile row.        // 在奇数行,该函数会添加一个分割线widget,来分隔相邻的词对。        // 注意,在小屏幕上,分割线看起来可能比较吃力。        itemBuilder: (context, i) {          // 在每一列之前,添加一个1像素高的分隔线widget          if (i.isOdd) return new Divider();

          // 语法 "i ~/ 2" 表示i除以2,但返回值是整形(向下取整),比如i为:1, 2, 3, 4, 5          // 时,结果为0, 1, 1, 2, 2, 这可以计算出ListView中减去分隔线后的实际单词对数量          final index = i ~/ 2;          // 如果是建议列表中最后一个单词对          if (index >= _suggestions.length) {            // ...接着再生成10个单词对,然后添加到建议列表            _suggestions.addAll(generateWordPairs().take(10));          }          return _buildRow(_suggestions[index]);        }    );  }

  Widget _buildRow(WordPair pair) {    return new ListTile(      title: new Text(        pair.asPascalCase,        style: _biggerFont,      ),    );  }

  @override  Widget build(BuildContext context) {

    return new Scaffold(      appBar: new AppBar(        title: new Text(‘Appbar‘),      ),      body: _buildSuggestions(),    );  }}
  1. StatelessWidget包裹StatefulWidget
  2. Scaffold包含appBar和body
  3. appBar包含title
  4. ListView.builder包含padding和itemBuilder,return ListTile
  5. ListTile包含title和style

忽略itemBuilder中的逻辑以及获取english_words的调用

3、添加交互

  final _saved = new Set<WordPair>();

    final alreadySaved = _saved.contains(pair);      trailing: new Icon(        Icons.favorite,        color: alreadySaved ? Colors.red: Colors.black,      ),      onTap: (){        setState(() {          if(alreadySaved) {            _saved.remove(pair);          } else {            _saved.add(pair);          }        });      },
  1. _saved保存数据Set
  2. onTap中setState为State对象触发RandomWordsState中的build,进行UI更新

4、页面route跳转

  void _pushSaved() {    Navigator.of(context).push(      new MaterialPageRoute(builder: (context) {        final titles = _saved.map((pair) {         return new ListTile(           title: new Text(             pair.asPascalCase,             style: _biggerFont,           ),         );        }        );        final divided = ListTile        .divideTiles(tiles: titles,context: context)            .toList();        return new Scaffold(          appBar: new AppBar(            title: new Text(‘新的appbar‘),          ),          body: new ListView(children: divided),        );      })    );

  }

        actions: <Widget>[          new IconButton(icon: new Icon(Icons.list), onPressed: _pushSaved)        ],
  1. Appbar添加actions再添加IconButton添加点击方法onPressed
  2. _pushSaved添加MaterialPageRoute通过return一个新的页面包含Appbar和ListView

5、更换主题

class MyApp  extends StatelessWidget{  @override  Widget build(BuildContext context) {

    return new MaterialApp(      theme: new ThemeData(        primaryColor: Colors.black,      ),      home: new RandomWords(),    );  }}
  1. MaterialApp中添加theme
  2. primaryColor为主色调

你已经编写了一个可以在iOS和Android上运行的交互式Flutter应用程序。在这个例子中,你已经做了下面这些事:

  • 从头开始创建一个Flutter应用程序.
  • 编写 Dart 代码.
  • 利用外部的第三方库.
  • 使用热重载加快开发周期.
  • 实现一个有状态的widget,为你的应用增加交互.
  • 用ListView和ListTiles创建一个延迟加载的无限滚动列表.
  • 创建了一个路由并添加了在主路由和新路由之间跳转逻辑
  • 了解如何使用主题更改应用UI的外观.

6、自定义控件实现自己想要的UI

class MyAppBar extends StatelessWidget {  MyAppBar({this.title});

  final Widget title;

  @override  Widget build(BuildContext context) {    return new Container(      height: 80.0,      padding: const EdgeInsets.symmetric(horizontal: 8.0,vertical: 16.0),      decoration: new BoxDecoration(color: Colors.blue[500]),      child: new Row(        children: <Widget>[          new IconButton(icon: new Icon(Icons.menu), onPressed: null,tooltip: ‘Navigaton menu‘,),          new Expanded(child: title),          new IconButton(icon: new Icon(Icons.search), onPressed: null,tooltip: ‘search‘,)        ],      ),    );  }}

class Myscaffold extends StatelessWidget {  @override  Widget build(BuildContext context) {    return new Material(      child: new Column(        children: <Widget>[          new MyAppBar(            title: new Text(                ‘new title‘,              style: Theme.of(context).primaryTextTheme.title,            ),          ),          new Expanded(child: new Center(            child: new Text("hello expanded"),          ),),        ],      ),    );  }}

void main() {//  runApp(new MyApp());

  runApp(new MaterialApp(    home: new Myscaffold(),  ));}

为了继承主题数据,widget需要位于MaterialApp内才能正常显示, 因此我们使用MaterialApp来运行该应用。

MyAppBar中创建一个Container,高度为56像素(像素单位独立于设备,为逻辑像素),其左侧和右侧均有8像素的填充。在容器内部, MyAppBar使用Row 布局来排列其子项。 中间的title widget被标记为Expanded, ,这意味着它会填充尚未被其他子项占用的的剩余可用空间。Expanded可以拥有多个children, 然后使用flex参数来确定他们占用剩余空间的比例。

MyScaffold 通过一个Column widget,在垂直方向排列其子项。在Column的顶部,放置了一个MyAppBar实例,将一个Text widget作为其标题传递给应用程序栏。将widget作为参数传递给其他widget是一种强大的技术,可以让您创建各种复杂的widget。最后,MyScaffold使用了一个Expanded来填充剩余的空间,正中间包含一条message。

原文地址:https://www.cnblogs.com/frankyj/p/10475937.html

时间: 2024-08-01 05:24:38

Flutter初识的相关文章

初识flutter

初识flutterflutter是Google开发的一套全新的跨平台开源框架.目前flutter已经发布很多很多版本,正在逐步的完善,它的目标其实是和react native一样的,就是同一份代码可以同时运行在Android和iOS两个系统上.如果你同时有react native和flutter开发经验,你就会发现flutter的很多设计理念和react native是一样的,react native基于组件开发页面,flutter则是widget,他们都有自己的生命周期,他们都是自己的属性或者

Flutter学习----初识 Flutter

初识 Flutter Flutter 文件目录 需要注意的文件夹 文件夹 用途 android android 平台相关代码 ios ios 平台相关代码 lib flutter 相关代码,存放源码的地方 test 用于存放测试代码 pubspec.yaml 配置文件,一般存放一些第三方库 Flutter 入口文件.入口方法 void main(){ runApp(MyApp()); } /// 也可以简写 void main()=>runApp(MyApp()); MaterialApp 和

6.1.初识Flutter应用之实现一个计数器

用Android Studio和VS Code创建的Flutter应用模板是一个简单的计数器示例,本节先仔细讲解一下这个计数器Demo的源码,让读者对Flutter应用程序结构有个基本了解,在随后小节中,将会基于此示例,一步一步添加一些新的功能来介绍Flutter应用的其它概念与技术.对于接下来的示例,希望读者可以跟着笔者实际动手来写一下,这样不仅可以加深印象,而且也会对介绍的概念与技术有一个真切的体会.如果你还不是很熟悉Dart或者没有移动开发经验,不用担心,只要你熟悉面向对象和基本编程概念(

flutter兼论

Flutter是Google开发的一套全新的跨平台.开源UI框架,支持iOS.Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件.自从2017年5月发布 第一个版本以来,目前Flutter已经发布了近60个版本,并且在2018年5月发布了第一个 “Ready for Production Apps”的Beta 3版本,6月20日发布了第一个 “Release Preview”版本. 初识Flutter Flutter的目标是使同一套代码同时运行在Android和iOS系统上

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

初识数组排序!!!!

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初识数组排序</title> <!--调试成功--> <style type="text/css"> *{ padding:0; margin: 0; } li,ul{ list-style: none; } #p

初识操作系统和linux

初识操作系统和linux 1.计算机系统由硬件系统和软件系统两大部分组成:是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动.高速地处理,然后把处理结果输出的现代化智能电子设备. 2.世界上第一台计算机是1946年诞生在美国宾州大学. 3.冯·诺依曼体系结构:1946年数学家冯·诺依曼于提出计算机硬件系统由运算器.控制器.存储器.输入设备.输出设备.摩根定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍.现在计算机技术进本很难遵

JAVA 初识类加载机制 第13节

JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地

初识React

原文地址:北云软件-初识React 专注于UI 在MVC分层设计模式中,react常被拿来实现视图层(V).React不依赖于技术栈的其他部分,因此可以方便的在现有项目中尝试用它来实现一个小特性. 虚拟DOM React从DOM中抽象出来,给出一种更简洁的编程模型,且性能表现更好.能够通过NodeJS实现服务端渲染,通过React Native开发原生app. 数据流React实现单向.响应式数据流,减少boilerplate且比传统数据绑定更容易理解. 简洁的组件React的组件都实现了一个r