iOS转向Flutter学习日记

这篇博客记录了作者从iOS转向Flutter的学习过程,包括Flutter的安装、Dart语言的学习、Widget的使用,特别是如何创建状态可变和不可变类型的Widget。作者通过创建一个带有导航栏和列表的HomePage,展示了如何使用Scaffold和ListView,并提到Flutter的快速运行优势。后续内容将涉及更多Flutter开发中的网络请求、异步处理、模型转换以及iOS中常见功能的实现。

1,flutter的安装和创建

这个可以去掘金专栏或flutter中文网 这里不再赘述,附网址:掘金:https://juejin.im/post/5b631d326fb9a04fce524db2#heading-1,flutter中文网:https://flutterchina.club/

2,关于开发语言,Dart语言还是挺好学的,光看文档的语法大概也能知道怎么用 如能抽出时间去学Dart进度更快。

3,最常见的Widget  类似于Viewcontroller和NSObject和UIView的结合体,它包含了已经做好的视图样式,包括带导航栏的控制器Scaffold,带tabbar的控制器Tabbar等。还有显示文本的控件叫Text 显示图片的Image等等,它又包含了动画绘制,手势交互,滚动的listView,事件的处理等框架的集成,可以说涵盖了OC里的Foundation很多功能和UIKit的很多功能,所以说它是上述3个的结合体,凡创建视图产生交互等等的处理的类都属于Widget,

4,创建类的时候分状态可变和不可变类型,通常用简写即可创建,创建statefulClass的时候直接敲stf 创建stateless的时候直接敲stl回车即可,之后补写类名

5,main.dart文件是程序入口,相当于main.m,进入根视图方法如下:

void main() => runApp(MyApp()); 

MyApp就是一个控制器的类名,这句话让APP启动之后进入MyApp的视图里。


6,进入主页,我这里让MyApp值当成一个中转站,目的是进入HomePageViewController,这里叫做homePage,homepage里加载一个列表,就是tableview,里面有很多个cell cell上下一段文字,加载一张网络图片,就这么一个需求:

import 'package:flutter/material.dart';
import 'package:testdemo/homepage.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(home: HomePage(),);
  }
}

当然之前已经创建好了homepage.dart文件,是空的,下面来写这个类

7,进入homepage,敲stf创建一个class 名为HomePage:

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return ;
  }
}

创建好之后return后面需要你返回一个组件,给这个页面使用更新state,因为我们需要一个导航栏,一个view,所以我使用了scaffold和一个listView

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      backgroundColor: Colors.blue,
      appBar: AppBar(
        title: Text("98765"),
      ),
      body: new ListView.builder(
        itemBuilder: (context,index){
          return new PageItem();
        },
        itemCount: 20,
      ),
    );
  }
}

scaffold在new之后的()里是赋值它的各个属性,具体有什么属性需要Ctrl+左键点进去看,一个视图正常当然有背景色,宽高,间距等等这些属性,作为已经封装完成给我们直接用的scaffold更多了几个导航的属性,可以看到叫做appbar的就是了。body就是这个视图的显示部分,我们初始化一个listview放进来,调用两个属性itemBuilder和itemCount,熟悉tableview的同学都知道,这就是tableviewdelegate的两个方法,cellforrow和numberofcell,是不,而itembuiler里面返回的pageItem就是每一个自定义的cell了

8,具体的pageItem:

class PageItem extends StatefulWidget {
  @override
  _PageItemState createState() => _PageItemState();
}

class _PageItemState extends State<PageItem> {
  @override
  Widget build(BuildContext context) {
    return Container(
       ///卡片包装
      child: new Card(
           ///增加点击效果
          child: new FlatButton(
              onPressed: (){print("点击了哦");},
              child: new Padding(
                padding: new EdgeInsets.only(left: 0.0, top: 10.0, right: 10.0, bottom: 10.0),
                child: new Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    ///文本描述
                    new Container(
                        child: new Text(
                          "这是一点描述",
                          style: TextStyle(
                            color: Colors.blue,
                            fontSize: 14.0,
                          ),
                          ///最长三行,超过 ... 显示
                          maxLines: 3,
                          overflow: TextOverflow.ellipsis,
                        ), 
                        margin: new EdgeInsets.only(top: 6.0, bottom: 2.0),
                        alignment: Alignment.topLeft),
                    new Padding(padding: EdgeInsets.all(10.0)),
                    ///三个平均分配的横向图标文字
                    new Row(
                      children: <Widget>[
                        new Icon(
                          Icons.star,
                          size: 16,
                          color: Colors.grey,
                        ),
                        new Image(
                            image: NetworkImage("https://yiqi-shenyang-test.oss-cn-beijing.aliyuncs.com/uploads/images/20191014/a6ead9d011a87ec96f32ad152173ebcf.jpg"),
                            height: 70,
                            fit: BoxFit.fitWidth,
                            filterQuality: FilterQuality.high,
                            alignment: Alignment.center,
                          ),
                      ],
                    ),
                  ],
                ),
              ))),

    );
  }
}

上面的代码就是向item内填充各个视图的代码,视图就是一个一个的图层堆上去的,这种的代码虽然量大但是比较容易理解。

这样你可以直接点IDE的⚡️图标直接运行了,效果如图:

 

话说使用flutter最方便的就是省了重新编译运行的时间,不用重新跑一遍代码。对于iOS来说省了十几秒,对于安卓来说可是飞起来了。

9:各控件的初始化,方法很多,属性也不尽一致,只是自己写例子时候一一用到并且为了加深印象而写的,方法记录如下(发现新的更方便的随时更改):https://blog.csdn.net/qq_27633421/article/details/103295385

10.余下的还有很多很多,刚刚入门flutter,网络请求,异步处理,模型转json,动画,音视频,像iOS原生的推送,地图,还有iOS上用的很习惯的布局masonry和rac啦等等,都要慢慢的发现并尝试移植到flutter中去。

...未完待续

其他文章请查看个人博客:http://zhangqq166.cn/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值