0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Flutter】【解決】Flutter2.10.xにアップグレードするのは少し待った方がいいかもしれない件

Last updated at Posted at 2022-02-13

はじめに

あるアプリをアップデート中にFlutterが2.10.0アップグレードできるよーって来たので、アップグレードしてみたら、ハマったので共有です。

更新履歴

2020.2.14 初回投稿
2020.2.15 解決方法がわかったので修正

環境

  • Flutter (Channel stable, 2.10.0, on macOS 11.6 20G165 darwin-x64, locale ja-JP)
  • Android toolchain - develop for Android devices (Android SDK version 31.0.0)
  • Xcode - develop for iOS and macOS (Xcode 13.2.1)
  • Chrome - develop for the web
  • Android Studio (version 2021.1)
  • VS Code (version 1.64.1)

参考にしたサイト

package

やりたいこと

  • GoogleMapとAdMobを表示し、別の画面に遷移して、戻って来たい

現象

  • 以下のソースコードのように、AdMObとGoogleMapをメイン画面に表示させて、ボタンなどで別の画面に遷移させた後、メイン画面に戻るとクラッシュします。
  • 但し、これはAndroidだけでiOSはクラッシュしません。

試したソースコード

  • iOS/AndroidでのAdMob,GoogleMapの設定済みです。
main.dart

import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_sample_220/ad_banner/ad_banner.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: StartScreen(),
    );
  }
}

class StartScreen extends StatefulWidget {
  const StartScreen({Key? key}) : super(key: key);

  @override
  State<StartScreen> createState() => _StartScreenState();
}

class _StartScreenState extends State<StartScreen> {
  Completer<GoogleMapController> _controller = Completer();

  static final CameraPosition _kGooglePlex = CameraPosition(
    target: LatLng(37.42796133580664, -122.085749655962),
    zoom: 14.4746,
  );

  static final CameraPosition _kLake = CameraPosition(
      bearing: 192.8334901395799,
      target: LatLng(37.43296265331129, -122.08832357078792),
      tilt: 59.440717697143555,
      zoom: 19.151926040649414);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Start'),
        actions: [
          IconButton(
            icon: const Icon(Icons.menu),
            onPressed: () async {
              var result = await Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => FirstPage(),
                ),
              );
              debugPrint(result);
            },
          ),
        ],
      ),
      body: Center(
        child: Column(
          children: [
            Expanded(
              child: GoogleMap(
                mapType: MapType.hybrid,
                initialCameraPosition: _kGooglePlex,
                onMapCreated: (GoogleMapController controller) {
                  _controller.complete(controller);
                },
              ),
            ),
            !kIsWeb ? AdBanner(size: AdSize.banner) : Container(),
          ],
        ),
      ),
    );
  }
}

class FirstPage extends StatelessWidget {
  const FirstPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () {
        Navigator.of(context).pop("戻るアイコンからの遷移");
        return Future.value(false);
      },
      child: Scaffold(
        body: Center(
          child: TextButton(
            child: Text("戻る"),
            onPressed: () => Navigator.of(context).pop("戻るボタンからの遷移"),
          ),
        ),
      ),
    );
  }
}


解決方法

  • Flutterを10.8.1にダウングレードする
  • downgradeコマンドを使ってもダウングレードしてくれなかったので以下の方法でダウングレード
cd ~/flutter
git checkout 2.8.1
flutter doctor
flutter --version

結論

Flutter2.10.xのデグレですかね?
直るのを待つしかないですかねー

【2月15日追加】

2.10.1でも以下のようにすれば問題解決しました
https://qiita.com/yoshikoba/items/d8eae8781f902734a558

main.dart

void main() {
  if (defaultTargetPlatform == TargetPlatform.android) {
    AndroidGoogleMapsFlutter.useAndroidViewSurface = true;
  }
  runApp(MaterialApp(home: MapsDemo()));
}

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?