在Flutter中使用Pug和Sass与Flutter-view
尽管我很喜欢 Flutter,但当我第一次从 Web 开发领域接触到它时,我对它的结构感到有点不安。 逻辑、样式和标记都在一个地方,并混合在大量的括号和逗号中。 现在我发现了 flutter-view,它立即成为我使用 Flutter 时的主要工具之一。
flutter-view 不是 Dart 的替代品,也不是完全让我们在 Flutter 中使用 Pug 和 Sass。 通过让我们隔离视图并以更清洁的方式开发它,它是对我们工作流程的补充。 我们得到了 Pug 和 Sass(或 HTML 和 CSS)的语法,带有缩进、混合、循环和其他好东西,但我们仍然受限于我们正在使用的小部件的限制。 应该牢记这一点,因为至少对我来说,仍然很容易获得 CSS 允许的东西,并想知道为什么没有任何效果,例如使用 CSS Grid 或向列小部件添加宽度。
如果你对 Pug 不熟悉或者有点生疏,你可以 在这里 刷一下,或者仔细阅读 Sass 会让你在 这里 做的一些令人惊奇的事情。
安装和设置
flutter-view 仍然是一个相当新的包,所以我建议查看 最新版本 和 文档 以了解任何更改。
$ flutter create flutter_view_example
包.yml
dependencies:
flutter:
sdk: flutter
flutter_view_widgets: ^1.0.6
现在您需要打开两个终端,一个用于运行 flutter-view,另一个用于您的应用程序。 它所需要的只是我们要编译的代码的位置,通常是 lib 文件夹和监视标志。
$ flutter-view -w lib
哈巴狗/HTML
我们的文件结构与您在 React 或 Angular 中看到的类似,每个屏幕和组件都在我们的 Pug 和 Sass 文件所在的文件夹中。 flutter-view 会自动生成一个基于它们的新 Dart 文件。
* lib 📂
* screens 📂
* loader 📂
* loader.pug
* loader.sass
* main.dart
一旦我们导入了 flutter-view 包,我们就可以开始使用 Pug 语法创建 Flutter 小部件。 我们可以通过添加一个标签并传递它 (flutter-view) 来创建一个新的无状态小部件。
现在所有的小部件都是小写的,单词用连字符分隔,所以 appBar 变成了 app-bar。 创建一个新类将生成一个空容器,我们可以在 Sass 文件中引用它。 我们还可以使用 as 属性控制它在其父窗口小部件中的标记。
家.pug
home(flutter-view)
scaffold
app-bar(as='appBar')
.siteName(as='title') Welcome
当你保存它时,应该已经生成了一个新的 home.dart 文件,如果我们看一看,我们会发现一些很酷的东西。
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_view_widgets/flutter_view_widgets.dart';
Scaffold Home() {
return Scaffold( // project://lib\home\home.pug#4,2
appBar: AppBar( // project://lib\home\home.pug#5,3
title:
//-- TITLE ----------------------------------------------------------
Container( // project://lib\home\home.pug#6,4
child: Text(
'Alligator.io',
),
),
),
);
}
flutter-view 甚至可以注释所有内容,以便在调试时轻松找到某些内容。
如果编译器无缘无故地开始对缩进感到不满,请重新启动您的编辑器,有时会这样。
我们需要为小部件声明的任何属性都可以作为普通参数传入,遵循与小部件相同的命名格式。 如果你需要对函数做任何事情,你可以在前面加上 @ 以将其包裹在括号中,或者 :^ 按原样输出,这最适合用于箭头函数。
家.pug
import(package='flutter_view_widgets/flutter_view_widgets.dart')
loader(flutter-view)
scaffold
app-bar(as='appBar' center-title=true).bar
.siteName(as='title') Alligator.io
.bg(as='body')
column: array(as='children')
.logo
.slogan Front-End Web Development, Chewed Up
.subSlogan Angular 2+, Vue.js, React, Svelte JavaScript, CSS, Node.js...
.btnText: button(:^on-pressed="() => print('Hello World')") See all posts
萨斯
遗憾的是,这不是你所知道的 CSS,只是语法。 我们没有 CSS Grid,没有 Flexbox,甚至没有任何 rems 或百分比。 我们仅限于每个特定小部件上已经可用的属性。
我们可以直接选择我们的容器或使用它们的类/ID。
全球.sass
$solorized-light: #073642
$solorized-dark: #002b36
app-bar
background-color: $solorized-light
.bg
background-color: $solorized-dark
width: 500
对于某些属性,有一些修改会影响生成的内容,因此现在 background-image 可以采用 url() 或 asset() 来使用本地或外部源。 您可以在 此处 找到修改后属性的完整列表。
主页.sass
@import '../global.sass'
.logo
background-image: url("https://aws1.discourse-cdn.com/netlify/original/2X/3/3c2117abab23d3cb409b49f75ca0ef8f46bb005c.png")
height: 300
width: 300
.slogan
color: #fff
font-size: 30
text-align: center
.subSlogan
@extend .slogan
margin-top: 15
font-size: 15
width: 300
.btnText
margin-top: 40
font-size: 25
width: 200
height: 50
border-radius: 40
button
color: $solorized-light
text-color: white
一旦你习惯了这个过程,创建这样的东西将很容易花费标准 Dart 一半的时间。
额外配置
flutter-view 为我们提供了对生成文件的大量控制。 您只需要在项目的根目录中有一个 flutter-view.json 文件,就可以开始了。
在这里,我们只是告诉它默认将 Flutter-view 包添加到生成的文件中,并且我们将 button 从 RaisedButton 重新映射到 FlatButton。
颤振视图.json
{
"imports": [
"package:flutter_view_widgets/flutter_view_widgets.dart"
],
"tagClasses": {
"button": "FlatButton"
}
}
结束的想法
只需几行代码,我们就可以轻松生成 2-3 倍的 Dart 代码,而不必担心单个括号或类型错误。 此外,拥有创建 mixin、循环和条件的简洁方式使开发变得更快、更愉快。
Flutter-view 很快成为我所有个人项目的首选,我希望它也适合你。