---
# System prepended metadata

title: Flutter x RIVE(Flare)
tags: [RIVE, Flutter, Flare]

---

# Flutter x RIVE(Flare)

###### tags: `Flutter` `RIVE` `Flare`

## About 2D UI

### Flutter Create Highlight Reel
{%youtube WLvpROMUjYQ %}

### Flutter Clock Highlight Reel
{%youtube PaPUkxYHDUw %}

### [gskinner](https://flutter.gskinner.com/?fbclid=IwAR2uxTiH0McikzHHY9kB0kBlLMC9msg_j6GalkR6oOYSIVYqeHFmmbxFdXQ)



{%youtube MI7Rl2umeeU %}




## Why Flare?

所有在RIVE網站上的皆為開放資源，線上的即時編輯，用非常簡單的介面就可以入門高質感的動畫設計。
Flutter本身就是一個2D的程式設計工具，利用Flare輔助它，會讓使用你的App的使用者有更好的UI體驗。

![](https://i.imgur.com/zznh2FY.jpg)

## Flare操作

1. 登入之後點擊Your Files進行新增動畫
![](https://i.imgur.com/GRlduTF.png)

2. 若你不是付費會員，擬作的圖只能是公開的，因此在不違反智慧財產權的情況下，下面創作部分可以忽略，直接使用別人做好的即可。
![](https://i.imgur.com/bATSlIS.png)

3. 最後設計完成點擊Export輸出，選擇輸出Binary。
![](https://i.imgur.com/WQF6Xds.png)


### Disign

這邊就不細講操作方式，介面蠻清楚的，值得注意的是，記得要改圖案的時候，要切回Design模式，但是如果你是想在特定秒數或是指定的動畫變成你要的圖案，請在Animate進行設計。

| 熱鍵 | 用途 |
| - | - |
| T | Translate |
| S | Scale |
| R | Rotate |
| Space | 按住以移動螢幕 |
| ctrl + Z | 回上一動 |
| shift + ctrl + Z | 取消回上一動 |

![](https://i.imgur.com/Og5mQx9.png)

### Animate

在Animate模式需要提醒的是，紅色框框處為指定標的，你在選定的秒數將這個菱形的符號扁下去，他會變成藍色的，也就是鎖定了你這個秒數此圖的位置、形狀等等的資訊，因此在不同的秒數鎖定不同資訊，便會形成一個smooth的連續動畫。
![](https://i.imgur.com/WYdIX52.png)

在Flutter中，是用動畫名稱(Sting)作為呼叫，在下面講解程式的時候會再提到。
![](https://i.imgur.com/PzYZDEt.png)


## 程式部分

### 檔案位置
在Project中新增一資料夾，並將剛剛Export的檔案拉進去。
![](https://i.imgur.com/L5kfK32.png)

### yaml
在yaml檔裡新增兩個東西
1. dependencies 下方增加 `flare_flutter: ^2.0.2`
2. 在檔案最下面flutter下方增加`assets`，並加上你檔案位置 `- assets/eye.flr`

### 程式碼
1. `import 'package:flare_flutter/flare_actor.dart';`
2. 如上面所說，程式碼是用String去呼叫與該名字相同的動畫，因此在這邊先宣告動畫名稱，另外再宣告一個Function去做動畫。

```Dart=
String animationName = 'goleft';

  void _eyeTurns() {
    setState(() {
      if(animationName == 'goleft') {
        animationName = 'goright';
      } else {
        animationName = 'goleft';
      }
    });
  }
```
3. 在你想放動畫的地方加上FlareActor。
```Dart=
FlareActor(
    'assets/eye.flr',
    alignment: Alignment.center,
    fit: BoxFit.contain,
    animation: animationName,
),
```
4. 最後在增加一個觸發處，這邊Demo使用簡單的按鈕作為觸發方式。
```Dart=
floatingActionButton: FloatingActionButton(
    backgroundColor: Colors.grey,
    onPressed: _eyeTurns,
    tooltip: 'Increment',
    child: Icon(Icons.play_arrow,color: Colors.black,),
),
```

這樣便完成了一個很基本的Flutter搭配Flare的小程式，當然並不單純只能做到這樣，你可以利用這些動畫去作出動畫版的Navigation bar，或是讓動畫的視角跟著你的游標或你打的字移動...等等的，是個非常容易就能讓你的成品質感提升的工具。