Closed30

Dart flutter 勉強

さいとーさいとー

命名規則

Dartでは3種類

  • UpperCamel
    • 単語の1文字目を大文字にする
  • lowerCamel
    • 最初の単語の1文字目は小文字、後の単語の1文字目は大文字
  • lowercase_with_underscores
    • 単語と単語の間を_(アンダースコア)で区切る
さいとーさいとー

UpperCamelCase

単語の1文字目を大文字にする。

使用するのは以下のもの

  • Class
  • enum
  • type(型)
  • typedef
  • type parameters(ジェネリクス等)
  • extensions
さいとーさいとー

lowercase_with_underscores

いわゆるスネークケース

単語と単語の間を_(アンダースコア)で繋ぐもの

使用するのは以下のもの

  • file names(ファイル名、ソース名)
  • package names (パッケージ名)
  • directory names(ディレクトリ名)
  • package prefix
さいとーさいとー

lowerCamelCase

  • クラスのメンバ
  • top-level definitions (いまいち何のこっちゃ)
  • 変数
  • パラメータ
  • (推奨)定数名

定数名を全部大文字にする(EXAMPLE_CONST_VALUE)みたいなのは基本非推奨

さいとーさいとー

2文字以上の頭字語や、略語は大文字にする

+ HttpSftp
+ HttpsFtp
- HTTPSFTP

ただし、2文字の頭字語は2文字とも大文字にする

+ IO ( input/ output)
- Io

2文字の略語の場合は通常の変数同様、頭文字のみ大文字

+ Id ( identification ) 
- ID

単語の意味が変わったら大文字にしていいっぽそう

さいとーさいとー

推奨

コールバックのパラメータのうち未使用のパラメータは___で受け取る

さいとーさいとー

プライベート識別子として_が使われる

プライベートではないクラスやメソッドに対して_は使わない

さいとーさいとー

型やスコープの情報を変数名の頭に付けない

+ String message
- String sMessage
さいとーさいとー
  1. packageインポート
  2. exportとimportが分離されている
  3. アルファベット順(昇順)
さいとーさいとー

httpクラスでpost

    var response = await http.post(
      Uri.parse('https://api.openai.com/v1/chat/completions'),
      headers: {
        'Authorization': 'Bearer AAAAAAAAAAAAAAAAAAAAAA'
        'Content-Type': 'application/json; charset=UTF-8',
      },
      body: jsonEncode({
        "model": "gpt-3.5-turbo-0613",
        "max_tokens": 256,
        "messages": [
          {
            "role": "system",
            "content":
                "Please make all responses in sentences of up to 256 tokens."
          },
          {"role": "user", "content": msg},
        ]
      }),
    );

この時、headerMap<String, String>で受け付けているがbodyEncodeされたものしか受け付けてないっぽいので今回は'dart:convert'を使ってJSONにエンコードする

POST先はChatGPT
256トークンを超えて文章を生成しないようにも指示しておく

さいとーさいとー

macOSの場合、network を使用する設定を書き込まないと通信できない
下記のファイルに下記のXMLを追記

  • macos/Runner/DebugProfile.entitlements
  • macos/Runner/Release.entitlements:
<key>com.apple.security.network.client</key>
<true/>
さいとーさいとー

受け取り後のreturn

return jsonDecode(utf8.decode(response.bodyBytes));

httpの受け取りデータだけ文字化けしていたため、bodyバイトコードをutf-8でエンコード

https://naokirin.hatenablog.com/entry/2022/10/18/214842

さらにjsonDecodeでMap型に変換し、return

レスポンスにUTF-8が指定されていれば必要ないのかもしれない
現状ではレスポンスのContent-Type にUTF-8は指定されていなかった

さいとーさいとー

呼び出し側

sendChatMessage(current).then((response) {
  // 成功時の処理
  String msg = response['choices'][0]['message']['content'];
})
.catchError( (onError) {
  // エラー時の処理
  appState.addHistory(ChatData(ChatMessageType.received, onError.toString()));
})
.whenComplete( () {
  // 成功・エラーに関わらず実行
});
さいとーさいとー

API通信したレスポンスをキャッシュとしてJSONオブジェクトのまま保持したい

パッケージ

さいとーさいとー

どっちもファイルにして保存していることに変わりはない・・・?

このスクラップは2023/06/22にクローズされました