Rung Google Maps, Cố gắng tạo chế độ xem nền tảng đã được tạo, xem id: 0


17

Lần đầu tiên google maps rung, tải hoàn hảo nhưng khi khởi động lại nóng, nó đi đến ngoại lệ nền tảng

google_maps_flutter: ^ 0,5,21 + 15

Github [google_maps_flutter] Đang cố gắng tạo chế độ xem nền tảng đã được tạo # 45695

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: Trying to create an already created platform view, view id: 0

Bác sĩ rung -v

[] Flutter (Channel stable, v1.12.13+hotfix.5, on Linux, locale en_IN)Flutter version 1.12.13+hotfix.5 at /home/asus/Documents/Flutter_SDK/flutter
    • Framework revision 27321ebbad (2 weeks ago), 2019-12-10 18:15:01 -0800Engine revision 2994f7e1e6
    • Dart version 2.7.0


[] Android toolchain - develop for Android devices (Android SDK version 29.0.2)Android SDK at /home/asus/Android/SdkAndroid NDK location not configured (optional; useful for native profiling support)Platform android-29, build-tools 29.0.2Java binary at: /snap/android-studio/81/android-studio/jre/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)All Android licenses accepted.

[] Android Studio (version 3.5)Android Studio at /snap/android-studio/81/android-studio
    • Flutter plugin version 42.1.1Dart plugin version 191.8593Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[] Connected device (1 available)
    • vivo 172349269ad3 • android-arm64 • Android 9 (API 28)No issues found!

Câu trả lời:


7

Để giải quyết vấn đề này, tôi đã làm như sau thông qua thiết bị đầu cuối:

1- Thay đổi chi nhánh thành chi nhánh chính:

flutter channel master

2- Rung động nâng cấp

flutter upgrade

3- Làm sạch mã:

flutter clean


1
vâng, tôi đã thực hiện tương tự và tải lại nóng hiện đang hoạt động, đổi thành nhánh chính, nâng cấp rung và làm sạch, sau đó ứng dụng đang hoạt động
Lav Kushwaha

1
Chuyển sang kênh chính và nâng cấp rung sẽ giải quyết vấn đề. Cảm ơn +1 cho bạn.
Vinoth Vino

1
Đó là một ý tưởng tồi để chuyển sang chi nhánh chính. Chi nhánh chủ là không ổn định nhất trong số tất cả. Bất cứ ai tìm kiếm giải pháp tốt hơn nên xem xét câu trả lời khác cho câu hỏi này. github.com/flutter/flutter/wiki/Flutter-build-release-channels
fotonmoton

1
nó sẽ là flutter cleanchữ thường nếu ai đó có thể chỉnh sửa nó
Dimitar

1
@Dimitar Tôi không nhận thấy rằng đó là chữ hoa, tôi vừa chỉnh sửa nó, cảm ơn vì đã cho chúng tôi biết,
Yousef Gamal

7

Tôi cũng gặp vấn đề tương tự và sử dụng flutter cleankhông giải quyết được cho tôi ( phiên bản rung 1.12.13 + hotfix 8 )

Nhưng sau đó, việc thêm một khóa duy nhất vào widget (không phải trạng thái của nó) đã giải quyết vấn đề cho tôi.

mẫu mã làm việc tối thiểu để chứng minh điều này.

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Map not crashing demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: LocationScreen(),
    );
  }
}

class LocationScreen extends StatefulWidget 
{
  final Key _mapKey = UniqueKey();
  @override
  _LocationScreenState createState() => _LocationScreenState();
}

class _LocationScreenState extends State<LocationScreen> 
{
  @override
  Widget build(BuildContext context) 
  {
    return Scaffold(
      appBar: AppBar(title: const Text('Map not crashing demo')),
      body: TheMap(key:widget._mapKey)
    );
  }
}

class TheMap extends StatefulWidget 
{
  ///key is required, otherwise map crashes on hot reload
  TheMap({ @required Key key})
  :
  super(key:key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<TheMap> 
{
  GoogleMapController _mapController ;

  void _onMapCreated(GoogleMapController controller) {
    _mapController = controller;
  }
  @override
  Widget build(BuildContext context) 
  {
    return Scaffold(
      //also this avoids it crashing/breaking when the keyboard is up
      resizeToAvoidBottomInset: false,
      body: GoogleMap(
          onMapCreated: _onMapCreated,
          initialCameraPosition: CameraPosition(
            target: const LatLng(30.0925973,31.3219982),
            zoom: 11.0,
          ),
        )
    );
  }
}

Cảm ơn Eyad, Thêm khóa đã giúp giải quyết vấn đề
Charden Daxicen

Cho đến khi Flutter 1.17 phát hành ổn định, tôi nghĩ đây là câu trả lời chính xác cho một dự án đang sản xuất
Pablo Insua

Bạn có thể giải thích rằng tại sao chúng ta không sử dụng chìa khóa GoogleMap()không?
Shahzad Akram

4

Theo API ,

Không thay đổi máy ảnh với bản cập nhật máy ảnh này cho đến khi bản đồ đã trải qua bố cục (để phương pháp này xác định chính xác hộp giới hạn và mức thu phóng phù hợp, bản đồ phải có kích thước). Nếu không, một IllegalStateException sẽ bị ném.

Tôi đã có cùng một vấn đề và sau khi gỡ lỗi, có vẻ như bất cứ khi nào bạn tải lại trong khi bản đồ đang ở chế độ xem, nó sẽ báo lỗi.

Nhưng bạn có thể ngăn chặn lỗi nếu bạn tải lại nóng sau khi xử lý bản đồ.

Nói cách khác, nó ở đó để ngăn chặn nhiều trường hợp bản đồ được kích hoạt.

Vì vậy, tôi sẽ đề nghị loại bỏ bản đồ trước khi tải lại nóng trong khi đang phát triển.

Trong phiên bản sản xuất, người dùng sẽ không thể tải lại nóng do đó, họ sẽ không gặp phải sự cố nền tảng.


3

Vấn đề là do sử dụng cùng một bộ điều khiển trong nhiều tiện ích GoogleMaps. Chỉ xây dựng một tiện ích GoogleMap và sử dụng đối tượng GoogleMapControll để thực hiện bất kỳ thay đổi nào.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.