Quantcast
Channel: 簡睿隨筆
Viewing all 897 articles
Browse latest View live

HackMD簡報模式全攻略

$
0
0

常用Markdown語法與HackMD的擴充

$
0
0

為想學習Markdown語法的朋友們準備了一個介紹影片,同時包含HackMD的擴充,希望可以讓各位簡單的進入Markdown的世界。除了觀看影片之外,直接編輯影片裡使用的簡報也是快速學習的另一個方法。

  • 簡報瀏覽:https://hackmd.io/@emisjerry/ByMQ0rWIB
  • 簡報編輯:https://hackmd.io/@emisjerry/ByMQ0rWIB/edit

解說影片

##

您可能也會有興趣的類似文章

HackMD書本模式的製作重點

$
0
0

介紹HackMD書本模式的製作重點。

書本模式的製作重點

  • 書本模式:左側是目錄,右側是筆記內容
  • 編輯重點
  • 如何進入書本模式
  • 其他注意事項
  • 書本範例

編輯重點

  • 書本模式要先建立一個主控筆記當做目錄頁
  • 主控筆記基本只有下列內容:
    • 標題
    • 連結
  • 缺點:目錄頁面是無法摺疊的單層結構

如何進入書本模式

  1. 在編輯狀態下,點擊右上角分享圖示,變更瀏覽模式為書本模式
  2. 按〔複製〕取得書本的連結網址

其他注意事項

  • 書本顯示時預設會取第一個連結的內容
  • 因此最好增加一個書本概述(Overview)的連結來說明書本的開場白

參考

解說影片

##

您可能也會有興趣的類似文章

使用IntelliJ IDEA開發Flutter App:開發環境設置

$
0
0

使用IntelliJ IDEA開發Flutter App:開發環境設置

✅ 簡報瀏覽:https://hackmd.io/@emisjerry/ByihNKs8B


✅ Flutter SDK下載:https://flutter.dev/docs/get-started/install
✅ IntelliJ IDEA下載:https://www.jetbrains.com/idea/
✔ 安裝步驟說明影片:https://youtu.be/Pw0LqNLsCDk

說明影片

##

您可能也會有興趣的類似文章

02. 用IDEA快速建立第一支Flutter程式

$
0
0

Widget與「微件」?

Flutter使用Dart語言來開發,Dart語言最重要的概念是:一切都是物件(Everything is
Object);而Flutter的最重要概念則是:一切都是Widget(Everything is Widget)。

「Widget」通常譯為組件或部件,做為UI組成的最基本單位。而在剛剛落幕的2019年Google Developer Days上海站則出現了「微件」一詞,微件與Widget的發音類似,也能表達做為組成Flutter UI所有內容的含意,算是不錯的翻譯:smile:。

▼ Google的Flutter工程師雙人相聲影片:《Flutter如何渲染微件》;2019/9/10 Google Developer Days上海站

Dart語言的具名參數

在開始撰寫Flutter的App之前,必須先了熟悉Dart的具名參數(Named Parameters)。

通常在調用函數(或在類別裡稱為方法)時是以順序來傳參數,如下例100傳給n1,200傳給n2:

int add(int n1, int n2) {
  print("add parameter n1=" + n1.toString() + ", n2=" + n2.toString());
  return n1 + n2;
}

void main() {
  int total = add(100,200);
  print("total is " + total.toString());
}

但只要我們在add函數的引數列開頭與結尾加上大括號,便形成具名參數,在調用時必須指定參數名稱:

int function add({int n1, int n2}) {
  print("add parameter n1=" + n1.toString() + ", n2=" + n2.toString());
  return n1 + n2;
}

void main() {
  int total = add(n2: 200, n1: 100);
  print("total is " + total.toSting());
}

因為「一切都是物件」,因此print要顯示數值就要用.toString()這樣的方法:

print("Number Sample: " + 123.toString());
print("Boolean Sample: " + true.toString());

最簡單的Flutter程式

  • 目標:在手機螢幕上顯示文字。
  • 作法:
    1. 用runApp()載入傳入的Widget當做根Widget
    2. 用Text()顯示文字在App裡;textDirection就是具名參數
    3. Flutter裡建立物件的new可省略
void main() {
  runApp(Text("Hello, world. 哈囉,世界!!!", textDirection: TextDirection.ltr));
}

simple1

在IntelliJ IDEA或Android Studio裡操作的重點:
1. 在runApp上按〔Ctrl+Q〕顯示快速說明(Quick documentation)
2. 在runApp(參數裡按〔Ctrl+P〕顯示參數說明(Parameter Information)
3. 在Text上按〔Alt+Enter〕顯示可使用的動作(Context Actions)

置中文字並加上樣式

使用〔Alt+Enter〕再選用【Center widget】以插入Center Widget,再於Text加上第三個參數 style 即能變更顯示外觀:

void main() {
  runApp(Center(
      child: Text(
    "Hello, world. 哈囉,世界!!!",
    textDirection: TextDirection.ltr,
    style: TextStyle(color: Colors.red, fontSize: 30),
  )));
}

simple2

加上MaterialApp使用Material UI主題

將程式修改為使用MaterialApp Widget:

void main() {
  runApp(
      MaterialApp(
          title: "第一支Flutter App",
          home: Center(
              child: Text(
                "Hello, world. 哈囉,世界!!!",
                textDirection: TextDirection.ltr,
                style: TextStyle(color: Colors.red, fontSize: 30),
              )
          )
      )
  );
}

MaterialApp1

不是很美觀… 因為MaterialApp要再調用Scaffold(鷹架)才能組織出MaterialApp的外觀,如下我們就能建立一個簡單、完整的App了:

void main() {
  runApp(
      MaterialApp(
          title: "第一支Flutter App",
          home: Scaffold(
            appBar: AppBar(title: Text("第一支Flutter App")),
            body: Center(
                child: Text(
                  "Hello, world. 哈囉,世界!!!",
                  textDirection: TextDirection.ltr,
                  style: TextStyle(color: Colors.red, fontSize: 30),
                )
            ),
          )
      )
  );
}

materialApp2

實際操作影片


##

您可能也會有興趣的類似文章

微軟公佈了開源的等寬字型 Cascadia Code

$
0
0

微軟公佈了開源的等寬字型 Cascadia Code,適用於Terminal與編輯器,初次使用感覺和我慣用的Consolas差距不小,試用個幾天看看。

▼ 字體外觀:

cascadis-code

##

您可能也會有興趣的類似文章

03. 更多的Flutter範例:StatelessWidget、StatefulWidgett與其他Widgets

$
0
0

知識點

  1. 抽象類別:StatelessWidget, StatefulWidget
  2. Widgets: Column, RaisedButton, Container, Padding
  3. 類別:EdgeInsets, Random

兩大抽象類別

Widget的兩大類型:

  • StatelessWidget:無狀態的Widget,靜態內容
    • 初始化之後就無法改變
    • build只會執行一次
    • 如果想改變,便需要重新建立另一個StatelessWidget來替換
  • StatefulWidget:有狀態的Widget,適用於有變動內容之狀況
    • 簡單說就是會與使用者互動的就是StatefulWidget
    • 當狀態變動(透過setState標示本身狀態為dirty)時,系統下一次重繪檢查時調用build重繪Widget
    • 在State.setState((){})中寫什麼都可以,它只是用來標記其物件需要重新build,重新build後依據已變動的資料來建立新的Widget
    • StatefulWidget的系統消耗成本較高,應封裝成越小範圍的內容

IDEA的撰寫輔助,除了上次介紹的〔Alt+Enter〕、〔Ctrl+P〕、〔Ctrl+Q〕外,也可使用
〔Ctrl+Shift+I〕: Quick Definition。

解說影片


##

您可能也會有興趣的類似文章

一眼看到編輯中的檔名;IntelliJ IDEA的外掛介紹:Active Tab Highlighter

$
0
0

如果覺得IntellIJ 平台的編輯器頁籤背景顏色不夠明顯,那麼Active Tab Highlighter外掛能輕易地解決這個問題:安裝這個外掛後便能自訂頁籤的背景顏色了。

Active Tab Highlighter外掛也適用Android Studio等IntelliJ平台的編輯器。

解說影片

##

您可能也會有興趣的類似文章


IntelliJ IDEA與括號相關的操作並介紹括號識別外掛:Rainbow Brackets

$
0
0

括號識別外掛:Rainbow Brackets

在一層套一層的類別森林裡很容易就迷失透方向,尤其像「一切都是Widget」的Flutter(Dart)程式碼,要很快辨識身處那個Widget可是個技術活,在此推薦Rainbow Brackets外掛,它除了將不同階層的括號({}、()、[]與<>等四大類括號)用不同顏色標示之外,也有下列熱鍵可標示游標所在的括號範圍:

  • 〔Ctrl+滑鼠右鍵〕:游標位置最接近括號範圍高亮顯示
    • 高亮顯示的背景顏色是括號的稍淡顏色
  • 〔Alt+滑鼠右鍵〕:游標位置最接近括號以外區域變暗
  • 〔Esc〕:脫離上述高亮或變暗狀態

raibow brackets

括號相關操作

  • 〔Ctrl+Shift+M〕:移動游標到配對的括號位置
  • 〔Alt+↑〕、〔Alt+↓〕:前一個方法、後一個方法。Flutter程式則是前一個Widget與後一個Widget

解說影片


##

您可能也會有興趣的類似文章

04. 使用第三方Android模擬器來執行Android/Flutter App

$
0
0

Android官方模擬器使用qemu系統,較耗系統資源。其實我們也可以試試第三方的模擬器,通常執行效率與資料使用率都有不錯的表現。

我簡單的試了幾個,最後決定使用MuMu模擬器。對岸的產品,請自行決定是否要「冒險」一試… :smiling_imp:

模擬器 開發者 下載網址
MuMu模擬器 網易公司 https://MuMu.163.com/
Genymotion Desktop Genymotion公司 https://www.genymotion.com/download/
Droid4x 海馬玩 http://dl.haima.me/download/DXDown/win/Z001/Droid4XInstaller.exe
http://dl.haima.me/download/DXDown/mac/Z001/Droid4XInstaller.zip

連接MuMu模擬器的步驟

  1. 啟動MuMu模擬器

    start “MuMu” “C:\Program Files (x86)\MuMu\emulator\nemu\EmulatorShell\NemuPlayer.exe”

  2. 等待MuMu啟動完成
  3. 執行adb.exe
    > D:\Android-SDK\platform-tools\adb.exe connect 127.0.0.1:7555

MuMu模擬器使用重點

  1. 右上三橫線功能表有窗口置頂
  2. Flutter程式執行時會出現Skia錯誤,以下列步驟解決:
    • 功能表→【設置中心】→【高級設置】→將【顯卡渲染模式】由極速(DirectX)變更為兼容+(OpenGL)
  3. 共享目錄操作步驟
    1. 點擊最下方的【文件共享】
    2. 彈出的資料夾便是共享目錄,將檔案複製到此資料夾
    3. MuMu模擬器:設置中心的【基本設置】勾選【開啟root權限】
    4. MuMu模擬器:點擊應用中心,搜尋RE文件管理器並安裝
    5. MuMu模擬器:分享目錄是 /mnt/shared/MuMu shard folder

解說影片


##

您可能也會有興趣的類似文章

Flutter的學習輔助應用程式:FlutterGo

$
0
0

Flutter Go是阿里巴巴的阿里拍賣前端團隊建立的網站與App,能有效的輔助Flutter的學習。Flutter的140多個Widget說明、使用範例等分門別類,可搜尋並連結到官方說明網頁,非常適合剛進入Flutter環境的朋友們參考與學習。

Flutter Go App在GitHub有完整的原始程式,進階點的朋友也可下載來看看其App的程式架構與處理邏輯。

網站資訊

  • FlutterGo 網站:
  • GitHub Flutter Go:

Flutter Go App下載

下載:
* 1.0版:Google Play搜尋「Flutter Go」
* 2.0版
– 用桌機瀏覽 https://appstore.huawei.com/search/fluttergo並按下載,將.apk存入雲端硬碟
– 手機由雲端硬碟下載並安裝.apk檔
– 以GitHub帳號登入(登入右下方有遊客登錄),有登入則可將收藏加入個人中心

解說影片


##

您可能也會有興趣的類似文章

06. Flutter AlertDialog對話窗Widget使用重點

$
0
0

知識點

胖箭頭:只包含一個敘述的函數簡寫方式

🔆 => x 意為 {return x;}
🔆 =>> void_function(); 也可為不傳回值的函數

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


// 等於
void main() => runApp(MyApp());

// 另一個例子
void pn(num x) => print(x);

🔆 AlertDialog常用參數
✅content: 內容Widget
✅ actions: 使用者回應用按鈕
✅ shape: 對話窗形狀

🔆 showDialog範例:

    showDialog(
      barrierDismissible: false,
      context: context,
      builder: (BuildContext context) => dialog,
    );
  • RoundedRectangleBorder: 圓角shape
  • BorderRadius: 外框半徑位置
  • Radius.circular(i): 圓形半徑值
  • FlatButton: 平面按鈕
  • Row: 橫列Widget
  • Column: 直欄Widget

demo6.dart原始程式

解說影片


##

您可能也會有興趣的類似文章

Rainbow Brackets造成Matched Brace配色失誤

$
0
0

IntelliJ IDEA與括號相關的操作並介紹括號識別外掛:Rainbow Brackets所述安裝了
Rainbow Brackets,使用後發現游標移到配合括號處時的背景色和游標太接近,造成較難辨識的情況,因此在Settings→Editor→Color Scheme→General,將Matched Brace變更了背景色,設定後會使用新的配色,但新啟動IDEA後卻又回復到原先的配色… 最後找到解決方法:

  1. 編輯rainbow_brackets.xml
    編輯 C:\Users\jerry.IDEA版本設定資料夾\config\options\rainbow_brackets.xml
  2. 如下加上一行設定

<application>
  <component name="RainbowSettings">
    <option name="customNotifyShowed" value="true" />
    <option name="overrideMatchedBraceAttributes" value="false"/><!--加上此行-->
    <option name="version" value="5.22" />
  </component>
</application>

<

p>重啟IDEA後,配對括號的背景色就是設定好的Matched Brace的設定值了。

##

您可能也會有興趣的類似文章

07. 學習Flutter Widget的4個教學App

$
0
0

介紹4個學習Flutter Widget的App。透過觀摩高手的設計,實際展示效果並檢視原始碼,可以在較短的時間裡很快的進步。

Flutter Catalog

Flutter Widget Guide

Flutter UI Challenges (UIs)

Flutter UIKit

解說影片


##

您可能也會有興趣的類似文章

scrcpy:透過USB或WiFi用電腦遠端遙控Android手機,命令選項介紹

$
0
0

scrcpy是什麼

scrcpy是螢幕拷貝(screen copy)之意。Android移動設備開啟開發人員模式且啟用USB除錯模式後,在電腦端執行scrcpy.exe後,就能在Windows的Android視窗裡遠端操作移動設備。scrcpy同時也有Linux與MacOS的版本,開放原始碼、可免費使用。

scrcpy只要啟用USB偵錯,不需要安裝任何App,在Windows端只要執行scrcpy.exe就能連線。

以下說明是在Android 9環境下操作,可能不同的Android版本間會有些許差異。

1. 移動設備設定步驟

  1. 進入設定→系統→關於手機→軟體資訊
  2. 在版本號碼上連續點擊數次,再經確認後,系統畫面會增加開發者選項
  3. 進入開發者選項後啟用USB偵錯

2. Windows安裝

  1. Genymobile/scrcpy: Display and control your Android device下載需要的zip檔,解壓縮到個人工具資料夾。
  2. 確認資料夾裡有scrcpy.exe、adb.exe等檔案
  3. 執行scrcpy.exe

執行後Windows裡就會看到Android設備的畫面了。

無線連線的步驟

  1. 用USB線連接Android設備與電腦
  2. Android: 查出Android設備的IP位址,有兩個方法
    1. 【設定】→【系統】→【關於手機】→【狀態】→【IP位址】
    2. 在Google Play搜尋ipconfig或adb,安裝可查看IP位址的App。我使用的是ADB Wireless (no root) – Google Play 應用程式
  3. Windows: 執行下列指令使用5555通訊埠連線:
cd scrcpy的安裝資料夾
adb tcpip 5555
  1. 拔除USB連接線
  2. 以下列指令遠端連線:
adb connect Android設定的IP位址:5555
  1. 執行scrcpy.exe

至此Windows便會出現Android畫面。執行scrcpy時可加入下列參數以增加連線效能,這些參數會降低畫質:

rem 以2M bps bit-rate連線,預設是8 Mbps
rem 畫面解析度是800x600
rem   -m1024是1024x576
rem   -m1920是1920×1080
scrcpy -b2M -m800 

顯示觸控點

在Android設備上操作時要顯示觸控的點擊觸控點:

scrcpy -t

遠端連線時錄影

scrcpy -r mp4檔名
scrcpy -Nr mp4檔名

上列第二個指令在錄影時不做畫面同步,要結束錄時只要按下〔Ctrl+C〕即可,但Windows功能異常,存出的檔案無法播放。

同時連接多部設備

如果我已經用無線方式連線,又再接上USB時,對Windows而言便是有兩部可連接設備,此時scrcpy必須指定序號才能正確連到指定的設備。

  1. 先用 adb devices 列出所有已連接設備,第一個欄位就是序號
  2. 用 scrcpy -s 序號 連線指定的設備

附記

  • adb -d shell進入直接連接的設備的shell (USB連接)
  • adb -e shell模擬器連線

由Windows安裝apk

直接把.apk拖入Android設備視窗即可安裝。Windows v1.10測試失敗。

複製檔案到Android設備

直接把檔案拖入Android設備視窗即可安裝。Windows v1.10測試失敗。

變更預設存放資料夾:

scrcpy --push-target /sdcard/Download/

Windows快捷鍵

完整按鍵:Shortcuts

常用按鍵

功能 按鍵 說明
Home Ctrl+h或滑鼠輪滾 輪滾測試無效,用Ctrl+滾輪或Alt+滾輪正常
Back 滑鼠右鍵
Screen off 雙擊滑鼠左鍵
Screen on 雙擊滑鼠右鍵
音量大小 Ctrl+↑、Ctrl+↓

解說影片

相關連結

##

您可能也會有興趣的類似文章


11. AutoHotkey腳本產生網站介紹-用點選、拖拉和拼接迅速產生腳本!

$
0
0

逆道者:AutoHotKey 自動化工具語法產生器 v2.6

https://sites.google.com/view/ahktool/

逆道者:AutoHotKey 積木語法產生器 v1.3 beta(使用Google Blocky框架)

https://sites.google.com/view/ahktool/ahkblockly?authuser=0

autohotkey blocky

AHK Generator

https://www.ahkgen.com/

解說影片

##

您可能也會有興趣的類似文章

08. 成功組建由GitHub複製Flutter專案的關鍵步驟

$
0
0

關鍵步驟

  1. 用[JDK安裝資料夾]\bin\keytool建立 c:\Users\使用帳號\key.jks
  2. 建立 [flutter_catalog專案資料夾]\android\key.properties,內容為:


storePassword=步驟1輸入的密碼
keyPassword=步驟1輸入的密碼
keyAlias=key
storeFile=c:\Users\使用帳號\key.jks

解說影片


##

您可能也會有興趣的類似文章

09. Flutter的常用佈局Widget:Container

$
0
0

A convenience widget that combines common painting(繪製), positioning(定位), and sizing(大小) widgets.

它是DecoratedBox、ConstrainedBox、Transform、Padding、Align等Widget組合的多功能容器,我們只需通過它便可實现同時需要裝飾、變換、限制的場合。

  • 容器的基本佈局
    layout

Container常用參數

參數 說明
alignment 對齊,可使用Alignment.center等值
padding 容器內的填充值
margin 容器外的邊界值
width、height 寬度與高度
color 容器背景色,不能和decoration並存
decoration 繪製child之背景部份的裝飾
foregroundDecoration 繪製child之前景的裝飾
constraints 容器大小的限制條件
transform 設容器的變換矩陣,型別是Matrix4
child 容器的內容

decoration參數經常使用BoxDecoration class。

BoxDecoration

BoxDecoration提供了多種繪製盒子的方法。

BoxDecoration常用參數

參數 說明
color 背景色
backgroundBlendMode 背景混合模式
border 邊框;Border.all(Colors.red)
borderRadious 圓角角度
boxShadow 陰影; List [BoxShadow]
shape Box的形狀(圓或方)
gradient 漸層效果;LinearGradient(), RadialGradient
image 背景圖;DecorationImage

逐次添加Container的多個參數

  1. 先加color使容器易於觀察
  2. 加上容器的寬和高
  3. 讓子物件對齊(alignment)
  4. 加上邊界(margin)移動容器之位置
  5. 加上填充(padding)讓子物件移動位置
  6. 用transform旋轉容器
  7. 用Center置中容器
  8. 最後用decoration來裝飾:
    1. decoration與color不能同時存在,因此先刪去color
    2. 加上邊框(Border.all)
    3. 變更為圓角矩形(borderRadius)
    4. 加上color為背景色
    5. 變更為漸層背景色
    6. 加上陰影
    7. 加上容器的背景圖片

Flutter載入本機圖檔的寫法

  1. 本地圖檔使用AssetImage
image: DecorationImage(
  image: AssetImage("assets/images/flutter-demo7.png"),
  fit: BoxFit.contain,
),
  1. 遠端圖檔使用
image: DecorationImage(
  image: NetworkImage("https://flutter.dev/images/flutter-mono-81x100.png"),
  fit: BoxFit.none,
),
  1. 外部資源設定
    外部資源必須在 pubspec.yaml 設定檔裡設置。
    1. 將圖檔複製到專案根目錄下的 assests/images (目錄自訂)
    2. 搜尋pubspec.yaml assets設定,修改如下:
  assets:
    - assets/images/
  1. IDEA的pubspec.yaml分頁偵測到變更後,點選upgrade

demo9_container_test.dart

解說影片


##

您可能也會有興趣的類似文章

10. Flutter的彈性佈局:Expanded、Column與Row

$
0
0

  • 使用到的Widget:Expanded、Row、Column、SizedBox、GestureDetector

Expanded Widget

Expanded擴展其子物件以填滿可用空間。下列的Widget1會依Expanded的flex係數自動伸縮:

Row / Column / Flex
 └──→children: Expanded(flex: 數值)
          └──→ child: Widget1

範例程式

  1. 建立一個橫列
  2. 在橫列裡添加三個容器,分別設定容器之背景色
  3. 容器內的Text顯示自身的flex係數值
  4. 改寫三個容器為for迴圈
  5. 變更StatelessWidget為StatefulWidget
  6. 加上觸擊事件:容器區域加大flex係數
  7. 加上觸擊事件:容器文字還原flex係數為1

▼ demo10_expanded.dart

解說影片


##

您可能也會有興趣的類似文章

10. 使用AutoGUI的設計模式來建立螢幕符號表

$
0
0

AutoGUI的設計模式是什麼?

AutoHotkey有一組視窗控制組件,可以用來建立Windows對話窗,讓AutoHotkey除了熱鍵、熱字串之外,又多出一個「熱視窗」。

AutoGUI的設計模式是方便我們以「所視即所得」的元件拖拉方式快速搭建對話窗的功能。

AutoHotkey GUI範例

  1. 放置字型
  2. 放置一個【關閉】按鈕
  3. 放置一個分頁控制,第一個分頁是【常用符號】,第二個分頁是【系統資訊】
  4. 在常用符號分頁放入多個按鈕,按鈕皆命名為gButton
  5. 在系統資訊分頁放入多個按鈕,依功能分別命名,皆以 g 開頭
  6. 修改腳本
    1. 用Gui +AlwaysOnTop設置為置頂
    2. 設定公用變數g_ID與g_Title
    3. 設定啟用熱鍵,取得作用中的程式ID與標題
    4. 撰寫按鈕處理程式

腳本內容

參考連結

解說影片

##

您可能也會有興趣的類似文章

Viewing all 897 articles
Browse latest View live