文章目录

      • 1、环境安装
      • 2、Dart语言基础
      • 3、flutter UI基础
      • 4、flutter 路由跳转
      • 5、后端http基础
      • 参考资料

1、环境安装

  • 1基础安装步骤教程
    Android Studio安装与配置
    https://juejin/post/6844904054569582605
    安装Android Studio前,需要先选择安装Java环境,Java需要到Oracle官网上下载安装,需要注册一个Oracle账号。
    https://www.oracle/java/technologies/javase/javase-jdk8-downloads.html
    Windows 10 配置Java 环境变量
    https://www.runoob/w3cnote/windows10-java-setup.html
    https://blog.csdn/qq_40670946/article/details/90200364
    Flutter安装诊断
    https://juejin/post/6844904054599106568#doctor
    Flutter doctor 问题
    https://wwwblogs/magic-world/p/14481107.html
    flutter 环境配置 Android sdkmanager tool not found(当安卓sdk目录没有tools文件夹用此解决方案)
    https://blog.csdn/qq_39849535/article/details/104961066

  • 2全程安装步骤教程
    win10配置Androidstudio+flutter移动端开发环境
    https://gwj1314.blog.csdn/article/details/124556246

  • 3超级无敌sb报错配置教程
    环境配置之flutter与Android Studio之间的爱恨情仇(上万字与数十种报错的解决方案)
    https://gwj1314.blog.csdn/article/details/125138267

2、Dart语言基础

  • dart与flutter的关系,就好比js与vue,react,native之间的关系。
  • 在跨平台开领域被 JS ⼀统天下的今天,Dart 语⾔的出现⽆疑是⼀股清流。
  • Dart 属于是强类型语⾔ ,但可以⽤ var 来声明变量
  • Dart 中 number 类型分为 int 和 double ,其中 java 中的 long 对应的也是
    Dart 中的 int 类型,Dart 中没有 float 类型
  • Dart 下只有 bool 型可以⽤于 if 等判断,不同于 JS 这种使⽤⽅式是不合法的
    var g = “null”; if(g){}
  • Dart 中,switch ⽀持 String 类型
  • Dart 中 final 和 const 表示常量,⽐如 final name = ‘GSY’; const value=
    1000000;
  • Dart 下的数值,在作为字符串使⽤时,是需要显式指定的。⽐如: int i = 0;
    print(“aaaa” + i); 这样并不⽀持,需要 print(“aaaa” + i.toString());

3、flutter UI基础

  • Flutter Widget
    在 Flutter 中⼀切的显示都是 Widget ,Widget 是⼀切的基础,利⽤响应式模式进⾏渲染。
    Widget 分为 有状态 和 ⽆状态 两种,在 Flutter 中每个⻚⾯都是⼀帧,⽆状态就是保持在那⼀帧,⽽有状态的 Widget 当数据更新时,其实是创建了新的 Widget,只是 State 实现了跨帧的数据同步保存。
    ⽆状态StatelessWidget
    有状态StatefulWidget

  • Flutter 布局
    Flutter 中拥有需要将近30种内置的 布局Widget,其中常⽤有 Container、Padding、Center、Flex、Stack、Row、Column、ListView 等,

  • Flutter ⻚⾯
    Flutter 中除了布局的 Widget,还有交互显示的 Widget 和完整⻚⾯呈现的Widget,其中常⻅的有 MaterialApp、Scaffold、Appbar、Text、Image、FlatButton等,下⾯简单介绍这些 Wdiget,并完成⼀个⻚⾯。

4、flutter 路由跳转

在 Flutter 中想要实现页面间的跳转和传值的话,离不开两种路由:

  • 基本路由(静态路由)
  • 命名式路由(动态路由)

基本路由(静态路由)

  • 使用push跳到指定的页面,然后再使用pop回到原来的页面
  • 不过当你跳转过去的时候,默认会有一个返回的箭头按钮,点击就可以返回
  • Navigator是一个路由管理的组件,它提供了打开和退出路由页方法。Navigator通过一个栈来管理活动路由集合。通常当前屏幕显示的页面就是栈顶的路由。Navigator提供了一系列方法来管理路由栈。
  • 跳转页面
    RaisedButton(
    child: Text(‘跳到详情页面’),
    onPressed: (){
    //跳转页面
    Navigator.of(context).push(
    MaterialPageRoute(
    //没有传值
    builder: (context)=>Detail()
    )
    );
    },
  • 还可以传入参数
    //跳转页面
    Navigator.of(context).push(
    MaterialPageRoute(
    //传值
    builder: (context)=>Detail(Test:‘我是参数’)
    //没传值
    //builder: (context)=>Detail()
    )
    );

命名式路由

  • 类似于 Vue 中的路由
  • 新建了几个页面Main.dart、Page1.dart、Page1.dart和Page3.dart
    //定义路由
    routes: {
    //需要使用context指定上下文
    ‘/page1’: (context) => Page1(),
    ‘/page2’: (context) => Page2(),
    ‘/page3’: (context) => Page3(),
    },
  • 然后调用
    //定义按钮
    RaisedButton(
    child: Text(“跳转到Page1”),
    onPressed: () {
    //需要使用pushNamed方法
    Navigator.pushNamed(context, “/page1”);
    },
    ),
    SizedBox(height: 20),
    RaisedButton(
    child: Text(“跳转到Page2”),
    onPressed: () {
    Navigator.pushNamed(context, “/page2”);
    },
    ),

5、后端http基础

  • 在Flutter中进行网络请求通常使用http和dio来处理。http是dart开发的多平台网络请求,而dio是flutter中文社区开发的。

  • 使用http(get,post)
    import ‘package:http/http.dart’ as http;
    var url = ‘https://example/whatsit/create’;
    var response = await http.post(url, body: {‘name’: ‘doodle’, ‘color’: ‘blue’});
    print(‘Response status: ${response.statusCode}’);
    print(‘Response body: ${response.body}’);

  • json数据处理
    可以使用 dart:convert手动序列化JSON
    通过调用JSON.decode方法来解码JSON ,使用JSON字符串作为参数。
    JSON.decode()仅返回一个Map<String, dynamic>,这意味着我们直到运行时才知道值的类型。
    在小项目中,也可以直接List=(get到的数据),然后显示的时候调用该List即可。

  • 文件上传
    import ‘package:http/http.dart’;
    _uploadFile(String filePath) async{
    String url = “http://39.106.158.176:9010/user/upload_headpic?uid=725304943665217536&token=1”;
    print(“YM------->上传的路径:$url”);
    var uri = Uri.parse(url);
    var request = new MultipartRequest(“POST”,uri);
    var multipartFile = await MultipartFile.fromPath(“headpic”,filePath);
    request.files.add(multipartFile);
    StreamedResponse response = await request.send();

参考资料

Github

  • gsy_github_app_flutter
  • Flutter豆瓣客户端 全网最100%还原豆瓣客户端。
  • alibaba/flutter-go: 包含 flutter 常用 140+ 组件
  • Flutter 练习项目:https://github/simplezhli/flutter_deer
  • wanandroid:https://github/ngu2008/wanandroid
  • novel-fpg: 小说开源项目(py+go):https://github/black-currant/novel-fpg
  • 高德地图flutter定位组件:https://github/best-flutter/flutter_amap_location
  • Johnson8888/learn_flutter

环境报错

  • Flutter中没有为类MyApp错误定义方法’setState’ - Thinbug
  • 升级 pre 1.12 Android 项目 · flutter/flutter Wiki

功能实现(博客文章)

  • Flutter学习笔记(二)登陆注册界面的实现_我在拉我的博客-CSDN博客_flutter登录注册
  • flutter学习三:实现登录界面,登录成功后跳转到首页,从我的界面退出登录_週莫的博客-CSDN博客_flutter login
  • Web 开发简介 | 白月黑羽
  • 【Flutter 3-1】Flutter进阶教程——底部导航栏BottomNavigationBar使用 - SegmentFault 思否
  • flutter text 最大长度_超详细!关于Flutter文本组件Widget的全面解读_weixin_39632728的博客-CSDN博客
  • Flutter开发入门 - 掘金
  • 【老孟Flutter】强大的空安全 - 云+社区 - 腾讯云
  • 路由:https://juejin/post/6844903950345306125

网课视频

  • Dart Flutter入门实战视频教程-大地老师【2022】_哔哩哔哩_bilibili

  • Dart Flutter教程_Dart Flutter3.x入门实战视频教程-第15讲以后是Flutter教程-2022年3月更新_哔哩哔哩_bilibili

  • 2021Flutter从零到app上架_哔哩哔哩_bilibili

更多推荐

flutter基础入门教程(Dart语法+UI布局+页面路由+后端连接)