はじめに
Amazonで期間限定キャンペーンで安くなっていた本を買ったのですが、Flutterのバージョンが古かったのでFlutter 2.0 Null-Safetyでも動作するか勉強がてら検証してみました。
またGitHubに公開しているので、参考にしてみてください。
対象の本
今回購入したのは以下の「Flutter×Firebaseで始めるモバイルアプリ開発 (技術の泉シリーズ(NextPublishing)) Kindle版」です。
環境
- Flutter 2.0.6 Null-Safety
動かなかったポイント
プラグインが古い
pubspec.yamlのバージョンが古かったので、最新のものが使えるようにany記述に変更しました。
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
cloud_firestore: any
firebase_auth: any
firebase_core: any
fluttertoast: any
share: any
Null-Safety対応されていない
これは当たり前ですがNull-Safety対応されていないので地道に直す必要があります。
例)
onSaved: (String? value) {
if (value != null) {
_data.user = value;
}
},
またpubspec.yamlのDartのバージョンも変更が必要です。
environment:
sdk: ">=2.12.0-0 <3.0.0"
状態管理でエラー
一部、コードが動作時にエラーになってしまうので対応しました。
class Splash extends StatelessWidget{
@override
Widget build(BuildContext context) {
_getUser(context);
return Scaffold(
...
↓
class Splash extends StatefulWidget {
const Splash();
@override
_SplashState createState() => _SplashState();
}
class _SplashState extends State<Splash> {
@override
void initState() {
super.initState();
Future(() {
_getUser(context);
});
}
@override
Widget build(BuildContext context) {
return const Scaffold(
Firestoreのルールに誤植がある
Firestoreのルールが間違っています。自分も最初気が付かなくて、1時間位悩みました。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/promise/{file} {
allow read,create,delete,update: if request.auth.uid == userId;
}
}
}
↓
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/transaction/{file} {
allow read,create,delete,update: if request.auth.uid == userId;
}
}
}
ローカライズの対応がかなり変わっている
ローカライズプラグインのバージョンの影響で、導入方法がかなり変わっていました。
まずプラグインの名前が「Flutter i18n」から「Flutter Intl」に変わっています。
次にpubspec.yamlに以下を記入し
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
[Tools]->[Flutter Intl]->[Initialize for the Project]を実行することで、自動生成ファイルが作成されるようになります。
コード自体の変更はあまりないですが、MaterialAppに技術するコードが以下のように変わっています。
...
localizationsDelegates: [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
...
.arbファイルの場所もres/valuesフォルダからlib/l10nフォルダに変更になっています。
最後に、日本語を追加する際は[Tools]->[Flutter Intl]->[Add Locale]で簡単に追加できるようになっています。
主な対応は以上です。
今回、対応しなかった項目
あんまり意味なさそうだったので、以下の内容は対応しませんでした。
- 多言語化(正確には1つだけ対応しました)
- 起動画面での画像表示(方法知っていたので対応しませんでした)
- リリース系の設定(リリースするつもりがないので対応しませんでした。)
結果
無事、Flutter 2.0.6 Null-Safetyでも動作しました!
GitHub
自分が公開したコード
オリジナルのコード
さいごに
Firestoreに苦手意識があったのですが、この本のおかげで軽減された気がします。
ぜひ、みなさんも勉強してみて下さい。
コメント