Slide 1

Slide 1 text

FlutterでiOSアプリを作って In-House配布した @espresso3389 クミナス株式会社 川崎 高志

Slide 2

Slide 2 text

誰?  川崎高志 @espresso3389  クミナス株式会社 CEO  恵比寿の小さい会社です  C/C++歴30年程度(初心者)  C#歴10年程度  JS歴不明(入門以前) Flutter歴6カ月(初心者)

Slide 3

Slide 3 text

iOS向けアプリを作った  iPadで複数のワコム製タブレットとBLE通信  落書きをPDFに合成してSVG/PDF/JPEGでサーバーに送信  タブレットと通信する部分もDartで書いた  ワコムのSDK使ってない  tuhiproject/tuhi + BLEパケットモニタで独自解析  サーバー詳細は知らん AWSの何か

Slide 4

Slide 4 text

FlutterBlue (flutter_blue)  Bluetooth LEライブラリ(Android/iOS)  https://pub.dartlang.org/packages/flutter_blue  バグはかなりある(ユーザーコードで回避できる)  async/awaitで簡単に書ける!Swiftで書くよりは断然楽!

Slide 5

Slide 5 text

PDF処理 with iOS Core Graphics  Platform Channelを利用  PDFのテンプレートに落書きを合成  PDFを画像としてFlutter側に渡す  Writing custom platform-specific code with platform channels  https://flutter.io/platform-channels/  CGPDFDocument (Core Graphics; iOS)  dart:ui.Image  dart:ui.decodeImageFromPixels(Uint8List RGBA) (#9184)  RawImage  プレビューは、RawImageとCanvasをStackで重ねた PDF Vector PDF,画像

Slide 6

Slide 6 text

PDFを画像としてFlutter側 に渡す(Swift側)  CGPDFDocument/CGPDFPageで普通にRGBA画像を描画  CGContext→Data →NSData →FlutterStandardTypedData

Slide 7

Slide 7 text

PDFを画像としてFlutter側 に渡す(Swift側)  CGPDFDocument/CGPDFPageで普通にRGBA画像を描画  CGContext→Data →NSData →FlutterStandardTypedData

Slide 8

Slide 8 text

PDFを画像としてFlutter側 に渡す(Flutter側)  RGBAのデータをUint8Listとして受け取る  dart:ui.decodeImageFromPixelsでdart:ui.Imageに変換  WidgetのRawImageに渡す

Slide 9

Slide 9 text

PDFを画像としてFlutter側 に渡す  pdf_render  https://pub.dartlang.org/packages/pdf_render  汎用処理にできるので、Flutterプラグインとして切り出し  AppDelegateが綺麗になる!  現状はiOSのみ対応  Androidは、PDFiumで実装予定

Slide 10

Slide 10 text

Flutterの生産性  良いところ  ListView.builder最高だぜ  async/await最高だぜ  Hot Reload最高だぜ  悲しいところ  地雷踏みまくり/master常用  デバッグできなくなる(#20184)  ビルド中にSIGSEGV(#21685)  -exportArchiveできなくなる(#22306)  中華フォント関連(#21667 and others)  なんかよくわからん奴※  applicationWillTerminateをハンドルできない  Listのメモリ消費が不安  なんか微妙にType-unsafe  context, this.context, await

Slide 11

Slide 11 text

Flutterの生産性  良いところ  ListView.builder最高だぜ  async/await最高だぜ  Hot Reload最高だぜ  悲しいところ  地雷踏みまくり/master常用  デバッグできなくなる(#20184)  ビルド中にSIGSEGV(#21685)  -exportArchiveできなくなる(#22306)  中華フォント関連(#21667 and others)  なんかよくわからん奴※  applicationWillTerminateをハンドルできない  Listのメモリ消費が不安  なんか微妙にType-unsafe  context, this.context, await