Flutter啥基础都没有咋入门?指南来啦:开启跨平台开发行程#程序

卧云深处 2025-01-14 11:32:49

Flutter 呢,是谷歌推出来的一个能构建跨平台应用程序的开源 UI 框架。它是基于 Dart 语言的,就是想给咱提供高效、现代的开发体验,能支持像 iOS、Android、Web、Windows、macOS、Linux 还有 Fuchsia 好多平台呢。

一、Flutter介绍

Flutter 的过去能追溯到谷歌内部孵化的那个叫 Sky 的项目,到 2015 年就正式改名叫 Flutter 啦。它用的是自绘 UI 加上原生的实现办法,跟其他跨平台的方案比起来有独特的好处。比如说,跟 H5 加上原生还有 JavaScript 开发加上原生渲染这类方案不一样,Flutter 既不用 WebView,也不用操作系统本来就有的那些控件,而是用自己高性能的渲染引擎来画 widget,这样就能保证在不同平台上的 UI 表现能高度保真、高度一致,而且画 UI 的性能跟原生控件差不多。

在跨平台开发这一块,Flutter 能让开发的人用一个代码库就做出能在好几个平台上用的应用程序,大大减少了开发和维护的活儿。它那个热重载的功能能让开发的人实时就看到代码改了之后的结果,不用重新启动整个应用程序,这样开发的速度就快了。Flutter 提供了好多丰富的组件、接口,开发的人能高效地给 Flutter 加上 native 扩展。另外,Flutter 还用了 Native 引擎来渲染视图,能给用户不错的体验。

跟竞争对手比一比,React Native 用的是 JavaScript 和 React 库,虽说跨平台的能力强,但是学习的难度可能比较大;Xamarin 用的是 C#,是基于.NET 框架的,能跟.NET 应用共享代码,适合.NET 的开发者;Ionic 是基于 HTML、CSS 和 JavaScript 的,适合快速搭建有原生体验的移动应用,不过性能可能比不上原生应用。而 Flutter 用的是自定义的渲染器,能很快地更新 UI,给用户提供流畅的体验,同时是基于 Dart 语言的,提供了很强的类型安全性,容易学也容易维护。 总的来说,Flutter 凭着自己独特的优势在跨平台开发这个领域占了重要的位置。

二、环境搭建

(一)安装准备

要安装 Dart 和 Flutter,首先需要安装一些必备工具。

Flutter 的下载安装及环境变量配置方法如下:

(二)IDE 配置

至此,使用 VSCode 和 Android Studio 配置 Flutter 项目的方法介绍完毕。

三、Hello World 应用

(一)创建与运行

要弄出第一个 Flutter 应用,可以照下面这些步骤来操作。首先呢,把你选的集成开发环境(IDE)打开,比如说 Android Studio 。在 Android Studio 里,要是你刚打开这个软件,就能选 “Start a new Flutter project” ,点下一步;要是已经打开 Android Studio 了,那就选 File>New>New Flutter Project... 。接下来,选 Flutter Application ,点下一步,然后填上合适的 Project name ,再点下一步,最后点 finish 。等第一个应用的环境创建好以后,把 lib>main.dart 文件打开,这时候官方已经给咱们生成了一部分代码了。

咱们可以试试运行这个应用。一般来说,选打开一个手机模拟器,然后点运行按钮 “run” ,界面就能正常显示出来了。要是出问题了,比如说 flutter 一直卡在 Running Gradle task ‘assembleDebug’ ,能通过改项目里的 “android/build.gradle” 文件还有 Flutter 的配置文件来解决。具体步骤是这样的:

第一步,修改项目中的 “android/build.gradle” 文件。

repositories {  // google()  // jcenter()  maven { url 'https://maven.aliyun.com/repository/google' }  maven { url 'https://maven.aliyun.com/repository/jcenter' }  maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }}dependencies {  classpath 'com.android.tools.build:gradle:3.5.0'  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"}

allprojects {  repositories {    // google()    // jcenter()    maven { url 'https://maven.aliyun.com/repository/google' }    maven { url 'https://maven.aliyun.com/repository/jcenter' }    maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }  }}

第二步,改 Flutter 的配置文件,这个文件是 “Flutter 安装目录 /packages/flutter_tools/gradle/flutter.gradle” 。

buildscript {  repositories {    //google()    //jcenter()    maven { url 'https://maven.aliyun.com/repository/google' }    maven { url 'https://maven.aliyun.com/repository/jcenter' }    maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }  }  dependencies {    classpath 'com.android.tools.build:gradle:3.5.0'  }}

当应用成功运行后,控制台会输出一些信息,手机或模拟器会显示应用的界面。

(二)代码解读

在 Flutter 应用中,入口点通常是 main () 函数。在 main () 函数中,会调用 runApp () 方法,传入一个 Widget 对象,这个对象通常是 MaterialApp 或 CupertinoApp。例如:

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

这里的 MyApp 是一个自定义的 StatelessWidget 或 StatefulWidget。

在 Flutter 里呀,类的继承关系挺复杂的。比如说,所有的 Widget 都从 Widget 类继承来的,而 Widget 类又有好几个子类,像 StatelessWidget 和 StatefulWidget 。StatelessWidget 就是那种没有状态的 Widget ,一旦创建好了,它的样子和行为就不会变了;StatefulWidget 呢就是有状态的 Widget ,能根据状态的变化来更新它的样子和行为。

以一个简单的 Flutter 应用为例,以下是对各个组件的作用分析:

通过理解这些组件的作用和继承关系,可以更好地构建 Flutter 应用。

四、UI 设计与布局

(一)基础 Widget

在 Flutter 里头,UI 的构建主要靠 Widget 类来实现。基础的 Widget 给构建复杂的用户界面提供了基础。

比如说,Text Widget 是用来显示文本内容的,可以设置字体的大小、颜色、样式啥的属性。下面是一个简单的使用例子:

import 'package:flutter/material.dart';void main() {  runApp(MyApp());}class MyApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return MaterialApp(      home: Scaffold(      body: Center(      child: Text(      '基础文本示例',      style: TextStyle(fontSize: 18, color: Colors.blue),      ),        ),          ),            );  }}

Container Widget 可以用来设置背景颜色、边框、内边距等属性,常用于布局和装饰。

import 'package:flutter/material.dart';void main() {  runApp(MyApp());}class MyApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return MaterialApp(      home: Scaffold(      body: Center(      child: Container(      width: 200,      height: 200,      color: Colors.green,      child: Text('容器内的文本'),      ),        ),          ),            );  }}

通过组合不同的基础 Widget,可以快速构建出简单而有效的用户界面。

(二)高级布局

Flex 布局是 Flutter 中用于布局的高级方式。它允许开发者根据屏幕大小动态分配空间,实现响应式布局。

例如,以下代码创建了一个垂直方向的 Flex 布局,其中包含三个 Expanded Widget,每个 Expanded Widget 会自动填充剩余的空间。

import 'package:flutter/material.dart';void main() {  runApp(MyApp());}class MyApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return MaterialApp(      home: Scaffold(      body: Column(      children: [      Expanded(      child: Container(      color: Colors.teal,      child: Center(      child: Text('上部区域'),      ),        ),          ),            Expanded(              child: Container(              color: Colors.blue,              child: Center(              child: Text('中部区域'),              ),                ),                  ),                    Expanded(                      child: Container(                      color: Colors.pink,                      child: Center(                      child: Text('下部区域'),                      ),                        ),                          ],                            ),                              ),                                );  }}

Grid 布局

Grid 布局用于更复杂的数据展示。可以通过 GridView.count 或 GridView.builder 创建网格布局。

Grid 布局用于更复杂的数据展示。可以通过 GridView.count 或 GridView.builder 创建网格布局。

以下是一个使用 GridView.count 的示例,展示了如何创建一个包含两列的网格布局:

import 'package:flutter/material.dart';void main() {  runApp(MyApp());}class MyApp extends StatelessWidget {  List<String> items = ['苹果', '香蕉', '橙子', '葡萄'];@overrideWidget build(BuildContext context) {  return MaterialApp(    home: GridView.count(    crossAxisCount: 2,    children: items.map((item) {    return Card( child: Padding( padding: const EdgeInsets.all(8.0), child: Text(item), ), ); }).toList(), ), ); }}

Column 布局用于垂直堆叠组件。可以结合自定义主题和样式,为应用程序赋予独特的外观。

以下是一个自定义主题的示例:

import 'package:flutter/material.dart';void main() {  runApp(MyApp());}class MyApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return MaterialApp(      theme: ThemeData(      primarySwatch: Colors.blue,    ),      home: Scaffold(        appBar: AppBar(        title: Text('自定义主题'),        ),          body: Column(            children: [            Container(            color: Colors.teal,            child: Center(            child: Text('标题区域'),            ),              ),                Container(                  color: Colors.blueAccent,                  height: 100,                  child: Center(                  child: Text('内容区域'),                  ),                    ),                      ],                        ),                          ),                            );  }}

通过灵活运用这些高级布局方式,可以创建出美观、响应式的用户界面。

五、状态管理与事件处理

Provider 状态管理库简介

Provider 是 Flutter 中官方推荐的状态管理工具之一,它基于 InheritedWidget 组件进行封装,使其更简单易用。Provider 拥有一套完整的解决方案,能够解决开发者在开发过程中遇到的绝大多数状态管理问题,让开发者能够开发出简单、高性能、层次清晰的应用。

Provider 的使用示例

以一个简单的计数器应用为例,展示 Provider 的使用方法。

class CounterModel with ChangeNotifier {  int _count = 0;  int get count => _count;  void increment() {    _count++;    notifyListeners();  }}

import 'package:flutter/material.dart';import 'package:provider/provider.dart';void main() {  runApp(MyApp());}class MyApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return ChangeNotifierProvider(      create: (ctx) => CounterModel(),      child: MaterialApp(        home: CounterPage(),        ),          );  }}class CounterPage extends StatelessWidget {  @override  Widget build(BuildContext context) {    final counter = Provider.of<CounterModel>(context);    return Scaffold(      appBar: AppBar(      title: Text('Counter Example'),      ),        body: Center(          child: Text('${counter.count}'),          ),            floatingActionButton: FloatingActionButton(              onPressed: () => counter.increment(),              child: Icon(Icons.add),                ),                  );  }}

在这个示例中,我们使用 ChangeNotifierProvider 来提供 CounterModel 对象,在 CounterPage 中通过 Provider.of 获取 CounterModel 对象,并在按钮点击时调用 increment 方法增加计数器的值,同时自动更新 UI。

六、学习的资源和路线

在学 Flutter 的时候,自己评估评估、反思反思可太重要啦。能通过下面这些办法来评估和反思:做做练习题和小项目:通过做一些练习题,开发几个小项目,能检验检验自己对知识掌握得咋样。能在网上搜搜 Flutter 的练习题和项目案例,然后动手操作操作。

参加社区讨论和交流:加入 Flutter 开发的社区,参与讨论和交流,能知道其他开发者的学习经验和办法。能在社区里提出自己的问题,得到别人的帮忙和建议。

定期总结和反思:定期总结总结自己的学习进度和成果,反思反思自己的学习方法和过程。能把自己学习过程里碰到的问题和解决办法记下来,方便以后参考。

调整学习计划:依照自己评估和反思的结果,赶紧调整学习计划。要是发现自己某些方面掌握得不好,那就加强学学;要是发现学习进度太慢,那就适当加快学习速度。

反正,学 Flutter 得有耐心、有毅力,不停地实践、不停地探索。通过合理用学习资源、规划好学习进度、自己评估和反思,就能更好地掌握 Flutter 开发技术,把自己的开发能力提上去。

0 阅读:2