-
Notifications
You must be signed in to change notification settings - Fork 1
/
SITCON_2022_R0_先學_Flutter_再去學_Android,和一般人相反的_App_經驗開發分享_RKhfYy5Bl3I.srt
1989 lines (1491 loc) · 34.3 KB
/
SITCON_2022_R0_先學_Flutter_再去學_Android,和一般人相反的_App_經驗開發分享_RKhfYy5Bl3I.srt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1
00:00:00,000 --> 00:00:11,000
接下來的議程是由吳克揚帶來的先學 Flutter 再學 Android 和一般人相反的 App 經驗開發分享
2
00:00:11,000 --> 00:00:13,000
讓我們歡迎吳克揚
3
00:00:18,000 --> 00:00:22,000
我的聲音夠大嗎?大家聽得到我的聲音嗎?
4
00:00:22,000 --> 00:00:24,000
大家早上好
5
00:00:24,000 --> 00:00:29,000
這是先學了 Flutter 再去學 Android 和一般人相反的 App 經驗開發分享
6
00:00:29,000 --> 00:00:31,000
我是主講者吳克揚
7
00:00:31,000 --> 00:00:34,000
大家應該蠻好奇我的標題的
8
00:00:34,000 --> 00:00:38,000
先來看一下我的經驗相反在哪裡
9
00:00:38,000 --> 00:00:41,000
一般人的話可能會先這個樣子學
10
00:00:41,000 --> 00:00:43,000
他們先學了 Android 再學 Flutter
11
00:00:43,000 --> 00:00:47,000
因為 Android 相較是一個比較廣為人知的作業系統
12
00:00:47,000 --> 00:00:50,000
大家就會想去學它的 App
13
00:00:50,000 --> 00:00:56,000
我再去看到了 Flutter 它是一個同時可以去開發 Android 和 iOS 的開發框架
14
00:00:56,000 --> 00:01:00,000
而且它會先去學習這些元件要怎麼去使用
15
00:01:00,000 --> 00:01:03,000
UI 資料要怎麼去溝通
16
00:01:03,000 --> 00:01:05,000
像是你按了一下你的 Button
17
00:01:05,000 --> 00:01:07,000
那你的文字會怎麼去改變等等
18
00:01:07,000 --> 00:01:10,000
然後你學習到這些知識之後
19
00:01:10,000 --> 00:01:12,000
你就會開始去創造自己的專案
20
00:01:12,000 --> 00:01:15,000
這是大部分人的 Role Map 大概是這樣子
21
00:01:15,000 --> 00:01:17,000
但是我是先這樣子
22
00:01:17,000 --> 00:01:20,000
我先學了 Flutter 再去學 Android
23
00:01:20,000 --> 00:01:23,000
而且我一開始要去做到的事情就是
24
00:01:23,000 --> 00:01:26,000
我想要把我的照片放在我的指定路徑
25
00:01:26,000 --> 00:01:28,000
聽起來是一個非常奇怪的一件事情
26
00:01:28,000 --> 00:01:31,000
但是我之後會去講解我的專案
27
00:01:31,000 --> 00:01:33,000
我的專案經驗大家之後會聽得懂
28
00:01:33,000 --> 00:01:35,000
我為什麼要做這件事情
29
00:01:35,000 --> 00:01:36,000
而且另外一件事情是
30
00:01:36,000 --> 00:01:38,000
Flutter 也可以拿來寫網頁
31
00:01:38,000 --> 00:01:42,000
所以我拿來寫我的網頁前端課程的期末專案
32
00:01:42,000 --> 00:01:44,000
而且拿了還蠻高分的成績
33
00:01:44,000 --> 00:01:46,000
然後最後我的 Android App
34
00:01:46,000 --> 00:01:50,000
是在我在學校上課的時候我才真的寫過的
35
00:01:50,000 --> 00:01:52,000
那這個是我的開發經驗
36
00:01:52,000 --> 00:01:54,000
和別人相反的點在這個地方
37
00:01:54,000 --> 00:01:57,000
好 那接下來就來做自我介紹
38
00:01:57,000 --> 00:02:01,000
還有如果大家在本議程有任何問題的話
39
00:02:01,000 --> 00:02:03,000
那就可以掃上方的 Slido
40
00:02:03,000 --> 00:02:07,000
然後在右上方的地方也有放著 Slido 的課程
41
00:02:07,000 --> 00:02:09,000
誒 議程代號
42
00:02:09,000 --> 00:02:11,000
然後我的名字叫吳克揚
43
00:02:11,000 --> 00:02:14,000
那我現在就讀台北科技大學資訊工程系
44
00:02:14,000 --> 00:02:16,000
然後我曾經是台北
45
00:02:16,000 --> 00:02:19,000
北科程式設計研究社的第五屆公關
46
00:02:19,000 --> 00:02:23,000
同時也是北科 2021-2022 的 GDSC Lead
47
00:02:24,000 --> 00:02:26,000
好 那就是接下來的
48
00:02:26,000 --> 00:02:28,000
今天這個議程的大概的目錄
49
00:02:28,000 --> 00:02:31,000
那我會先簡單介紹一下 Android 以及 Flutter
50
00:02:31,000 --> 00:02:34,000
接下來是介紹一下我這兩個的個人專案經驗
51
00:02:34,000 --> 00:02:37,000
接下來是 Android 以及 Flutter UI 作法
52
00:02:37,000 --> 00:02:39,000
以及邏輯與 UI 之間的溝通
53
00:02:39,000 --> 00:02:41,000
最後是來講結論
54
00:02:41,000 --> 00:02:45,000
好 那我就要開始剪接 Android 以及 Flutter 了
55
00:02:45,000 --> 00:02:48,000
那 Android 它是本身是一個作業系統
56
00:02:48,000 --> 00:02:51,000
那在本議程 我會用比較開發的角度去講解
57
00:02:51,000 --> 00:02:53,000
那它使用的程式語言呢
58
00:02:53,000 --> 00:02:55,000
大概有 Java 和 Kotlin
59
00:02:55,000 --> 00:02:57,000
那它可以運行的硬體裝置呢
60
00:02:57,000 --> 00:02:59,000
第一個有電視 然後手機平板
61
00:02:59,000 --> 00:03:01,000
穿戴式裝置以及車機
62
00:03:01,000 --> 00:03:03,000
這是它可以運行的硬體裝置
63
00:03:03,000 --> 00:03:05,000
那對應到 Flutter 的話
64
00:03:05,000 --> 00:03:08,000
那它是一個跨平台的開發框架
65
00:03:08,000 --> 00:03:10,000
那它所使用的程式語言是 Dart
66
00:03:10,000 --> 00:03:14,000
那可以運行的平台就有 Android 和 iOS
67
00:03:14,000 --> 00:03:16,000
還有網頁 桌面應用程式
68
00:03:16,000 --> 00:03:18,000
以及嵌入系統的程式
69
00:03:18,000 --> 00:03:21,000
那這兩個的大概介紹到這個地方
70
00:03:21,000 --> 00:03:23,000
接下來我會介紹我的 Android 專案
71
00:03:25,000 --> 00:03:27,000
好 那我的 Android 專案
72
00:03:27,000 --> 00:03:29,000
這個它的名字叫做 Notification Manager
73
00:03:29,000 --> 00:03:31,000
那它的背景想法呢
74
00:03:31,000 --> 00:03:33,000
第一個我想要去整理這個查亂的通知
75
00:03:33,000 --> 00:03:37,000
因為我是一個不會把 App 的通知全部關掉的人
76
00:03:37,000 --> 00:03:41,000
然後因為我覺得每則通知可能都會有重要的地方
77
00:03:41,000 --> 00:03:43,000
但是多了就會亂嘛
78
00:03:43,000 --> 00:03:45,000
所以我想要去整理它
79
00:03:45,000 --> 00:03:47,000
然後接下來是預期的時間有預期的通知
80
00:03:47,000 --> 00:03:50,000
那這部分可能比較難理解
81
00:03:50,000 --> 00:03:52,000
那我就帶入一個情境
82
00:03:52,000 --> 00:03:55,000
假設你在早上九點的時候去上班上課
83
00:03:55,000 --> 00:03:58,000
然後結果你收到一則通知
84
00:03:58,000 --> 00:04:01,000
可能你的購物網站在晚上九點的時候
85
00:04:01,000 --> 00:04:03,000
可能會有一些折扣什麼的啊
86
00:04:03,000 --> 00:04:06,000
然後如果你現在把這則通知滑掉
87
00:04:06,000 --> 00:04:08,000
那你就會忘記有這件事情了
88
00:04:08,000 --> 00:04:11,000
那我就希望在晚上九點的時候
89
00:04:11,000 --> 00:04:12,000
這則通知才發出來
90
00:04:12,000 --> 00:04:13,000
然後最後呢
91
00:04:13,000 --> 00:04:15,000
這是我 Android 課程期末專案
92
00:04:15,000 --> 00:04:16,000
那我也提到說
93
00:04:16,000 --> 00:04:18,000
我 Android 是在上課的時候才學的
94
00:04:18,000 --> 00:04:19,000
那它的功能呢
95
00:04:19,000 --> 00:04:22,000
我要對應到我的背景想法
96
00:04:22,000 --> 00:04:24,000
那第一個就是記錄每則通知
97
00:04:24,000 --> 00:04:25,000
因為我要去整理它嘛
98
00:04:25,000 --> 00:04:27,000
然後第二個是通知的排程
99
00:04:27,000 --> 00:04:29,000
就是我想在九點的時候
100
00:04:29,000 --> 00:04:32,000
再把這個通知發出來這個過程
101
00:04:34,000 --> 00:04:36,000
那我的 Android 專案大概介紹到這
102
00:04:36,000 --> 00:04:39,000
接下來我會介紹我的 Flutter 專案
103
00:04:39,000 --> 00:04:41,000
那我的 Flutter 專案呢
104
00:04:41,000 --> 00:04:43,000
它的名字叫 Picademy
105
00:04:43,000 --> 00:04:44,000
那它的背景想法就是
106
00:04:44,000 --> 00:04:47,000
上課時如果有拍黑板做筆記的時候
107
00:04:47,000 --> 00:04:48,000
照片不易整理
108
00:04:48,000 --> 00:04:51,000
那如果大家有經驗在
109
00:04:51,000 --> 00:04:52,000
老師寫在黑板上
110
00:04:52,000 --> 00:04:55,000
然後之後你把那些東西拍下來
111
00:04:55,000 --> 00:04:56,000
當作記錄的話
112
00:04:56,000 --> 00:04:59,000
然後之後你在你的相簿的預覽
113
00:04:59,000 --> 00:05:00,000
可能會發現說
114
00:05:00,000 --> 00:05:02,000
全部都是一些黑板的照片
115
00:05:02,000 --> 00:05:04,000
然後你其實是非常難從
116
00:05:04,000 --> 00:05:06,000
預覽圖上面看出說
117
00:05:06,000 --> 00:05:07,000
你寫了什麼字
118
00:05:07,000 --> 00:05:09,000
這張照片到底在做什麼
119
00:05:09,000 --> 00:05:10,000
所以我想去整理它
120
00:05:10,000 --> 00:05:12,000
那第二個是我認為課表是
121
00:05:12,000 --> 00:05:14,000
更好呈現資料夾的方式
122
00:05:14,000 --> 00:05:15,000
因為課程是一個
123
00:05:15,000 --> 00:05:18,000
有週期性的一個活動
124
00:05:18,000 --> 00:05:20,000
所以比起相簿這種
125
00:05:20,000 --> 00:05:23,000
直接按照著時間
126
00:05:23,000 --> 00:05:25,000
這樣一個一個排下來的方式
127
00:05:25,000 --> 00:05:26,000
我認為課表是一個
128
00:05:26,000 --> 00:05:28,000
較好的呈現方式
129
00:05:28,000 --> 00:05:29,000
那第三個呢
130
00:05:29,000 --> 00:05:31,000
它的想法是從 GoodNotes 來的
131
00:05:31,000 --> 00:05:33,000
那先來介紹一下什麼是 GoodNotes
132
00:05:33,000 --> 00:05:35,000
它是一個 iOS App
133
00:05:35,000 --> 00:05:36,000
那如果你有用 iPad 的話
134
00:05:36,000 --> 00:05:38,000
那你就可以把
135
00:05:38,000 --> 00:05:40,000
你的手寫筆記寫在上面
136
00:05:40,000 --> 00:05:42,000
那我覺得說手寫筆記
137
00:05:42,000 --> 00:05:44,000
如果已經有一個 App
138
00:05:44,000 --> 00:05:45,000
可以去整理的話
139
00:05:45,000 --> 00:05:46,000
那你的照片筆記
140
00:05:46,000 --> 00:05:47,000
應該也要有一個 App
141
00:05:47,000 --> 00:05:48,000
可以去整理
142
00:05:48,000 --> 00:05:50,000
因為手寫筆記和照片筆記
143
00:05:50,000 --> 00:05:51,000
都是一個
144
00:05:51,000 --> 00:05:53,000
現代人所有筆記的方式嘛
145
00:05:53,000 --> 00:05:54,000
好 接下來呢
146
00:05:54,000 --> 00:05:55,000
我要講到功能
147
00:05:55,000 --> 00:05:57,000
那第一個就是
148
00:05:57,000 --> 00:05:58,000
我拍下的照片
149
00:05:58,000 --> 00:06:00,000
能夠根據時間
150
00:06:00,000 --> 00:06:01,000
放到對應的資料夾
151
00:06:01,000 --> 00:06:03,000
那就是做到上面
152
00:06:03,000 --> 00:06:04,000
我想要去整理我的照片
153
00:06:04,000 --> 00:06:06,000
那假設如果你在早上
154
00:06:06,000 --> 00:06:08,000
你在禮拜三的
155
00:06:08,000 --> 00:06:10,000
九點到十點有數學課的話
156
00:06:10,000 --> 00:06:12,000
那你在這段時間
157
00:06:12,000 --> 00:06:14,000
把你的照片拍下來
158
00:06:14,000 --> 00:06:15,000
那就會存放到
159
00:06:15,000 --> 00:06:16,000
你的對應資料夾
160
00:06:16,000 --> 00:06:17,000
然後第二個就是
161
00:06:17,000 --> 00:06:20,000
用課表呈現資料夾的時間關係
162
00:06:20,000 --> 00:06:22,000
那這個就是 Picademy 的
163
00:06:22,000 --> 00:06:24,000
背景想法及功能
164
00:06:24,000 --> 00:06:26,000
大概介紹到這邊
165
00:06:26,000 --> 00:06:28,000
接下來我要講 Android 的 UI
166
00:06:28,000 --> 00:06:30,000
是要怎麼做的
167
00:06:30,000 --> 00:06:31,000
那第一個呢
168
00:06:31,000 --> 00:06:32,000
我要講 UI 結構
169
00:06:32,000 --> 00:06:34,000
那它是一個樹狀的結構
170
00:06:34,000 --> 00:06:36,000
那它第一層叫做 ConstraintLayout
171
00:06:36,000 --> 00:06:38,000
那它就是整個的 UI
172
00:06:38,000 --> 00:06:39,000
然後第二層呢
173
00:06:39,000 --> 00:06:40,000
它叫 RecyclerView
174
00:06:40,000 --> 00:06:42,000
那從上面可以看得出來
175
00:06:42,000 --> 00:06:43,000
它是一個
176
00:06:43,000 --> 00:06:45,000
會有很多的長方條的資訊卡
177
00:06:45,000 --> 00:06:47,000
上面放著通知的資訊
178
00:06:47,000 --> 00:06:48,000
那直觀的認為
179
00:06:48,000 --> 00:06:49,000
它會是一個
180
00:06:49,000 --> 00:06:51,000
可以滑動的一個狀態
181
00:06:51,000 --> 00:06:52,000
那這 RecyclerView
182
00:06:52,000 --> 00:06:54,000
就是在處理這個狀態
183
00:06:54,000 --> 00:06:56,000
那第三層叫 LinearLayout
184
00:06:56,000 --> 00:06:57,000
那它就是
185
00:06:57,000 --> 00:07:00,000
每個長方形的資訊卡的本體
186
00:07:00,000 --> 00:07:02,000
那第四個就是一些文字
187
00:07:02,000 --> 00:07:04,000
然後它就會構成這個
188
00:07:04,000 --> 00:07:06,000
通知的資訊卡
189
00:07:06,000 --> 00:07:08,000
接下來我要
190
00:07:08,000 --> 00:07:10,000
它如果實際寫成 Code 的話
191
00:07:10,000 --> 00:07:12,000
它會長成這個樣子
192
00:07:12,000 --> 00:07:13,000
那它是有 SML 一個
193
00:07:13,000 --> 00:07:14,000
這個標註語言
194
00:07:14,000 --> 00:07:16,000
所描述出來的 UI
195
00:07:16,000 --> 00:07:18,000
那它會
196
00:07:18,000 --> 00:07:20,000
從它的縮排可以看得出來
197
00:07:20,000 --> 00:07:21,000
它是一個樹狀結構
198
00:07:21,000 --> 00:07:23,000
那其實你不用去真的去
199
00:07:23,000 --> 00:07:26,000
把每一段文字寫出來
200
00:07:26,000 --> 00:07:28,000
然後你可以用這種方式
201
00:07:28,000 --> 00:07:30,000
就是原件可以用拉的
202
00:07:30,000 --> 00:07:32,000
那它拉好的原件會有 ID
203
00:07:32,000 --> 00:07:34,000
幫你自動修改 SML 的檔案
204
00:07:34,000 --> 00:07:37,000
那我們就看一個 Demo 影片
205
00:07:42,000 --> 00:07:43,000
然後首先呢
206
00:07:43,000 --> 00:07:46,000
就是我沒有任何的東西
207
00:07:46,000 --> 00:07:48,000
喔 其實有東西啦
208
00:07:48,000 --> 00:07:50,000
然後之後我再從
209
00:07:50,000 --> 00:07:53,000
這邊拉出一個 Button 的話
210
00:07:53,000 --> 00:07:55,000
那我就可以看到說
211
00:07:55,000 --> 00:07:57,000
我的 SML 這個地方
212
00:07:57,000 --> 00:07:59,000
就會自動幫我修改
213
00:07:59,000 --> 00:08:01,000
它這是 ID 幫我自動修改的
214
00:08:01,000 --> 00:08:03,000
那 Android UI 的寫法
215
00:08:03,000 --> 00:08:05,000
它大概會長這個樣子
216
00:08:12,000 --> 00:08:14,000
那 Android UI 大概講到這裡
217
00:08:14,000 --> 00:08:16,000
接下來我要講 Flutter 的 UI
218
00:08:16,000 --> 00:08:18,000
那它的 UI 長相呢
219
00:08:18,000 --> 00:08:20,000
我也是會用我的範例專案
220
00:08:20,000 --> 00:08:22,000
來做為講解
221
00:08:22,000 --> 00:08:24,000
然後因為課表是一個
222
00:08:24,000 --> 00:08:25,000
比較複雜的 UI
223
00:08:25,000 --> 00:08:27,000
所以我就 Focus 在這個
224
00:08:27,000 --> 00:08:30,000
這張課程的資訊卡上
225
00:08:32,000 --> 00:08:34,000
那它先有一個概念
226
00:08:34,000 --> 00:08:35,000
那 Flutter 的 UI 上
227
00:08:35,000 --> 00:08:37,000
每個東西都叫做一個 Widget
228
00:08:37,000 --> 00:08:39,000
那大家應該也可以從
229
00:08:39,000 --> 00:08:41,000
上面的鎖牌看出來
230
00:08:41,000 --> 00:08:43,000
它是一個 Widget Tree 的結構
231
00:08:43,000 --> 00:08:45,000
那實際上放在上面的 UI 呢
232
00:08:45,000 --> 00:08:47,000
就是這個綠色的 Card
233
00:08:47,000 --> 00:08:49,000
還有橘色的 Text
234
00:08:49,000 --> 00:08:52,000
它就會形成這種 Widget Tree 的結構
235
00:08:53,000 --> 00:08:57,000
然後如果它實際寫成 Code 的話
236
00:08:57,000 --> 00:08:58,000
它大概會講這樣
237
00:08:58,000 --> 00:09:00,000
那也是可以從這個鎖牌看得出來
238
00:09:00,000 --> 00:09:02,000
它是一個梳妝結構
239
00:09:02,000 --> 00:09:04,000
那它是由 Dart 所編寫而成的
240
00:09:04,000 --> 00:09:06,000
和剛剛的 XML 不一樣
241
00:09:06,000 --> 00:09:07,000
XML 是一個標注語言
242
00:09:07,000 --> 00:09:09,000
所以它不能做一些邏輯的事情
243
00:09:09,000 --> 00:09:11,000
但是 Dart 是一個程式語言
244
00:09:11,000 --> 00:09:14,000
也就是說如果有個按鈕
245
00:09:14,000 --> 00:09:16,000
然後之後你可以寫個函式
246
00:09:16,000 --> 00:09:19,000
然後之後它按下去的事件
247
00:09:19,000 --> 00:09:20,000
你可以把這函式
248
00:09:20,000 --> 00:09:22,000
直接賦予在這個事件上
249
00:09:22,000 --> 00:09:25,000
然後就可以讓邏輯和 UI 一起寫
250
00:09:25,000 --> 00:09:26,000
但是我們還是希望說