20

Flutter newly created app gives error when using fire base.

How should i fix this problem as it is asking flutter app main activity cannot be cast to android app activity.

04-05 21:16:07.570 27391-27391/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.firestoreflutterchat, PID: 27391
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.firestoreflutterchat/com.example.firestoreflutterchat.MainActivity}: java.lang.ClassCastException: com.example.firestoreflutterchat.MainActivity cannot be cast to android.app.Activity
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2124)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
        at android.app.ActivityThread.access$800(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5097)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassCastException: com.example.firestoreflutterchat.MainActivity cannot be cast to android.app.Activity
        at android.app.Instrumentation.newActivity(Instrumentation.java:1084)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257) 
        at android.app.ActivityThread.access$800(ActivityThread.java:139) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5097) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
        at dalvik.system.NativeStart.main(Native Method) 

This is main dart file , no changes are made here.

import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.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,

        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);



  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {

      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(

        title: Text(widget.title),
      ),
      body: Center(

        child: Column(

          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), 
    );
  }
}

This is android src Main activity kotlin :

package com.example.firestoreflutterchat

import android.content.Context
//import androidx.multidex.MultiDex
import io.flutter.app.FlutterApplication
import io.flutter.embedding.android.FlutterActivity

class MainActivity : FlutterApplication() {


    }

I only opened a new flutter project and followed the fire base steps to add dependencies and google-services.json file to project.

It later was giving firebase in it error so i added multidex.

In the main dart file of flutter application and android module Main activity no changes were made.

Is it some thing i did wrong , i am new to flutter so i am not understanding.

demitri kozlov
  • 247
  • 1
  • 3
  • 14

9 Answers9

42

In order to solve this error, I had to update the package name in the MainActivity file in the Kotlin folder of my flutter app. From the output of the console I knew that somewhere the default name still existed somewhere in my app, and that this was causing an error. Updating the package name in the MainActivity file solved this.

Jon
  • 431
  • 4
  • 3
  • 4
    This is what the problem was for me as well, and `flutter clean` did not help in this case, but changing the package name in the MainActivity.kt file did. – Codin Moldovanu Nov 06 '20 at 18:32
  • This also solved the issue for me. I however went a few steps further. I erased the files for the android build in the build folder. I saw my project name, then updated the name in: android>app>src>main>AndroidManifest.xml, then also in android>app>src>debug>AndroidManifest.xml. And just to be safe in android>app>src>main>kotlin>com>example>my_app>MainActivity Doing this solved the issue. – Aadn Jul 29 '21 at 13:57
  • To handle this issue you can use this package: https://pub.dev/packages/change_app_package_name – Abbas Jafari Feb 13 '22 at 09:53
  • For future viewers, the package @Abbas mentions works *really* well, but for me it didn't catch absolutely everything, so do a manual cmd + f to ensure you get everything! – Matthew Trent Aug 13 '23 at 07:43
16

The error occurs when you change the package name. It doesn't sync with Kotlin

Steps:

  • Go to android>app>src>main>kotlin>MainActivity
  • Change the package name to the respective package name.
Raj A
  • 544
  • 9
  • 21
5

Because your MainActivity is child of FlutterApplication not FlutterActivity. Modify the MainActivity as following

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
}

Sanjay Sharma
  • 3,687
  • 2
  • 22
  • 38
  • This worked for me, thank you! During my last flutter update for some reason a bunch of other code was inserted in my MainActivity.kt file, so I just had to remove it and replace it with your code. – Haplo Jan 22 '21 at 04:06
2

In my case command flutter clean and flutter pub get works for me

Try it out.

Amazed
  • 49
  • 2
  • 2
2

One of the problems is bad V2 embedding. No need to change your package name. Try this in the manifest.xml in <activity> attribute

android:name="io.flutter.embedding.android.FlutterActivity"

and in the <application> attribute

android:name="${applicationName}"
1
<application android:allowBackup="false" android:name="${applicationName}">

In the AndroidManisfest.xml update the tag application with the property android:name with "${applicationName}" like the code above. For me this issue was solved with this.

1

2023:

I had the same issue. For me, it was because I had the Kotlin file (main activity) who had the wrong package name.The name was com.example.myapp instead of com.company.myapp. I have changed the name later, because I have to upload app to Play Store.

Solution:

Change the package name using this package - here (change_app_package_name)

This will change the package name of all places. It worked for me.

HoRiz
  • 706
  • 4
  • 15
0

Update the folders containing your MainActivity.kt with the package name in the MainActivity.kt enter image description here

Super Kai - Kazuya Ito
  • 22,221
  • 10
  • 124
  • 129
0

Thank you to everyone who has contributed an answer. I came across this error after overwriting files within cloud functions, later to discover that I had two of a certain folder and that I needed to delete the extra since it was there where Flutter was trying to run (incorrectly) ... Paying attention to Aadn's response, I also wanted to fix details within the three AndroidManifest files (there's one within android/app/src/debug, another within android/app/src/main, and another within android/app/src/profile) ... Whilst doing this I noticed that there's a folder that the MainActivity.kt file must refer to -- the package mentioned in MainActivity.kt must match this folder, like it is where things are going on ... To see the folder notice project_name/android/app/src/main/kotlin ... The folder there is the package that the MainActivity.kt file must mention, and it's the same package that the AndroidManifest.xml files should mention too ... For me, deleting the extra folder and then ensuring the correct package name would be called, solved this issue ... My apology for the lengthiness, but I hope it helps you to understand and to move forwards : )

mathems32
  • 115
  • 9