Home

Dart: covariant キーワードの使い方

August 19, 2024

covariant キーワードについて # 以下のコードは SubClass の method の部分でエラーになります。エラーメッセージは以下です。 'SubClass.method' ('void Function(ArgumentOfSubClass)') isn't a valid override of 'SuperClass.method' ('void Function(ArgumentOfSuperClass)'). class SuperClassArg {} class SubClassArg extends SuperClassArg {} class SuperClass { ...

Dart: コンストラクタの種類が多すぎる

August 18, 2024

公式ドキュメントの案内によると Dart のコンストラクタは6種類あるようです。 Constructors | Dart https://dart.dev/language/constructors Dart implements many types of constructors. Except for default constructors, these functions use the same name as their class. Generative constructors: Creates new instances and initializes instance variables. Default constructors: Used ...

Flutter: BoxConstraints を理解する

August 17, 2024

Flutter の BoxConstraints について。 期待通りにはいかない表示 # 次のコードでは、画面に何が表示されるでしょうか? import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp( home: SizedBox( width: 100, height: 100, child: ColoredBox( color: Colors.orange, ), ), )); } 「一辺 1 ...

Flutter: 親から子ウィジェット、子から親ウィジェットへのアクセスの仕方

August 13, 2024

親から子のフィールドにアクセス # GlobalKey を使う # import 'package:flutter/material.dart'; void main() { runApp(MaterialApp( home: MyParentWidget(), )); } class MyParentWidget extends StatelessWidget { MyParentWidget({super.key}); final myChildWidgetKey = GlobalKey<MyChildWidgetState>(); @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [ Text('${myChildWidgetKey.currentState?.count ?? 0}'), IconButton( icon: const Icon(Icons.add), onPressed: () { myChildWidgetKey.currentState?.increment(); // myChildWidgetKey.currentState?.increment(); を呼び出し ...

Flutter: assert と throw の使い分け

July 15, 2024

Dart 言語には assert という機能があります。assert の第一引数が条件式で、こちらが true であれば何も起きず、false であれば例外が throw されます。ass ...

Flutter: ツリーシェイキングの動作を確認

July 14, 2024

参考 DevTools でのアプリケーションのサイズ確認について Measuring your app’s size | Flutter https://docs.flutter.dev/perf/app-size Use the app size tool | Flutter https://docs.flutter.dev/tools/devtools/app-size ツリーシェイキングについて Excluding Dart code from the release compiled executable | Flutter Community | Medium https://medium.com/flutter-community/excluding-dart-code-from-the-release-compiled-executable-7af8c18cd241 ビルド後の ...

Dart: Stream の使い方

July 13, 2024

Flutter において Dart の Stream はなくてはならない存在。たとえ開発者が意図的に使っていなかったとしても、ステート管理ライブラリの屋台骨は Stream が支えています。 StreamController() ...

Dart: 拡張メソッドの使い方

June 20, 2024

既存のクラスのコードそのものには手を入れる事なくメソッドを追加する方法が提供されています。 Extension methods | Dart https://dart.dev/language/extension-methods 使用例 # calculator.dart class Calculator { int value = 0; void add(int a, int b) { value = ...

Flutter: DevTools について

June 11, 2024

ほんとにただの1行メモで恐縮ですが、Flutter の DevTools の説明は以下の動画がヒジョーに分かりやすい! Dive into DevTools - YouTube https://www.youtube.com/watch?v=_EYk-E29edo 動画では DevTools でできる以下のことが ...

Dart: Self タイプの実現方法

June 9, 2024

現在 Dart には Self 型を表すようなキーワードはありません。キーワードはないものの、Self 型を実現することはでき、具体的には次のように書けば実現可能 ...

Flutter: ウィジェットテストの動きをシミュレータで表示する

June 8, 2024

通常のテスト方法 # flutter create でアプリを作成すると次のテストファイルが作られています。 myapp/test/widget_test.dart // This is a basic Flutter widget test. // // To perform an interaction with a widget in your test, use the WidgetTester // utility in the flutter_test package. For ...

Flutter: ライフサイクルメソッドの実行順番

June 7, 2024

次のメソッドの実行順番を確認するためにログを出力させてみた。 createState() build() setState() initState() didChangeDependencies() didUpdateWidget() deactivate() dispose() import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatefulWidget { const MyApp({ super.key, }); @override State<MyApp> createState() { print("MyApp.createState()"); return _MyAppState(); } } class _MyAppState extends State<MyApp> { int ...

Flutter: ChangeNotifier、ValueNotifier、Stream を使ったカウンターアプリ

June 3, 2024

こんな感じです。 ChangeNotifier # import 'package:flutter/material.dart'; class Counter with ChangeNotifier { int _count = 0; int get count => _count; void increment() { _count++; notifyListeners(); } } void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { MyApp({ super.key, }); final Counter _counter = Counter(); @override Widget build(BuildContext context) { return MaterialApp( home: MyWidget( counter: _counter, ), ); } } class MyWidget extends StatelessWidget ...

VMware Fusion Player で Ubuntu を起動する

April 20, 2024

Mac に VMware Fusion Player をインストールし、その上で Ubuntu を起動するところまでの手順をメモしていきたいと思います。 VMware Fusion は、Mac の仮想化ツールです。 VMware Fusion is a software hypervisor ...