美文网首页
flutter入门(1)初识flutter&例程解析

flutter入门(1)初识flutter&例程解析

作者: prophet__ | 来源:发表于2020-04-15 11:00 被阅读0次

这篇文章主要是关于我第一次写flutter的一些坑,如果你是一个新手建议你先去跟着官网走,遇到了问题可以来查一下有没有解决方案。

flutter的中文官网:https://flutterchina.club/

flutter是一种自动生成跨平台app的应用,由于可以通过一次编码实现多个平台的应用,加上它的编程也比较简单,在近几年受到了广泛的应用。由于我工作上要做一个android的app,而且之后有可能要扩展到ios平台上,所以最近开始学习flutter的相关知识。

之前有一段时间在ubuntu上工作,然后就先用ubuntu试着装了一下,感觉效果不太好,而且性能的利用率比较差,所以后来又转为在windows上进行开发了。

运行示例程序

坑0.首先我没有一个安卓终端,所以得自己先搞一个模拟器,这个android studio有提供,打开Tools-AVD manager然后create一个就可以了,我要适用的华为的M6平板,所以选的是Nexus10的屏幕,+android q 10.0的这个系统版本。

这个AVD模拟器跟运行程序是分开来开的,你在运行程序之前得先启动这个AVD,然后等设备那一栏出现了可以使用的设备,才能运行程序。

坑1.卡在grade assembDebug,由于中国GFW的原因,我们登不上google,所以要把gradle的获取地址更换一下,详情请见
https://segmentfault.com/a/1190000021451897?utm_source=tag-newest

自己开始制作小样例

flutter制作的东西基本上都是由widget构成的,widget可以看作是一种,内置了一些小程序的服务,这种理念我觉得类似于java把所有的变量都搞成一个类那个样子。

flutter工具包使用的是dart语言,这个语言还是比较全栈的,基本上什么应用都能覆盖,但是问题是语法跟之前我用的其他语言都不太一样。

难0.首先在这个样例里面有两种extend的类型1.StatelessWidget(不可变) 2.StatefulWidget(可变)
其中第二个可变的类型又由一个 StatefulWidget类和一个 State类构成,是不是有点绕...

我们可以看出来其实主要的修改工作都是在这个extend为State的类当中进行,Dart的某些语法跟Java大概是一脉相承吧,比如说这个final,就是写好了不能修改的意思,有点类似于C++里的const。

简单的架构

我大概看了2个小时才把这些类里面的每个东西都搞懂,其实不是很难,但是由于语法不太熟悉,比如说这种isOdd是判断奇偶,还有这种循环的方式。

难1.这个循环并不是像我们之前学过的那种for循环或者是while循环,它更像是一种迭代器,当需要显示新的单词的时候,就会调用_buildSuggestions这个函数,然后就会一层一层往下调用,通过index >= _suggestions.length来判断是否单词库里的单词都用完了,如果用完了就往里面加,这样就实现了无限循环。(但是这里具体怎么实现往下拉的时候调用这个函数,还不是特别清楚)

然后我们开始设计一个可以选择单词的交互,如果选中了会变成填充的心,没有选中就是一个空心,是否之前选择过,要通过一个bool量来进行判断。

     trailing: new Icon(
       alreadySaved ? Icons.favorite : Icons.favorite_border,
       color: alreadySaved ? Colors.pink : null,
    onTap: () {
       setState(() {
         if (alreadySaved) {
           _saved.remove(pair);
         } else {
           _saved.add(pair);
         }
       });
     },

这段程序隶属于buildRow这个函数底下,每次生成单词的时候才会调用,trailing是设置心形图标的,opTap是判断整个单词的方框是否被点击的,被点击会出现效果,并对这个单词的状态进行改变。

加上任务栏

我们把选中的单词进行一个保存,然后在这个新的界面上显示出来,调用新界面是通过按下一个icon(图标)来实现的。

Widget build(BuildContext context) {
    return new Scaffold (
      appBar: new AppBar(
        title: new Text('Startup Name Generator'),
        actions: <Widget>[new IconButton(icon: new Icon(Icons.list), onPressed: _pushSaved),
          ],
      ),
      body: _buildSuggestions(),
    );
  }

这是RandomWordsState当中的build函数,里面的action就是一个按压的动作,先是创建了一个icons.list的图标,然后按压之后就会调用_pushSaved这个函数。

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

      ),
    );
  }

这些就跟上面基本上是类似的了,就是通过保存单词的数组_saved生成一个列表,map这个遍历方式,有点类似于python的map,感觉这个语言的很多函数都是其他的语言挑出来的。

最后还附加了一个修改界面颜色的配置,在myApp类的build函数里加入下面这段程序就可以改变。

      theme: new ThemeData(
        primaryColor: Colors.red,

最终效果

相关文章

网友评论

      本文标题:flutter入门(1)初识flutter&例程解析

      本文链接:https://www.haomeiwen.com/subject/zwzgmhtx.html