0

I'm trying to build a ListView as a Card with Flutter to list all of the installed Apps on a Smartphone. Creating the Card works well but onTap()gives me the following error:

The following assertion was thrown while handling a gesture:
Navigator operation requested with a context that does not include a Navigator.
The context used to push or pop routes from the Navigator must be that of a widget that is a
descendant of a Navigator widget.

When the exception was thrown, this was the stack:
#0      Navigator.of.<anonymous closure> (package:flutter/src/widgets/navigator.dart:2636:9)
#1      Navigator.of (package:flutter/src/widgets/navigator.dart:2643:6)
#2      Navigator.push (package:flutter/src/widgets/navigator.dart:2100:22)
#3      _IsumisAppState.build.<anonymous closure> (package:vulnerability_scanner/main.dart:42:42)
#4      _InkResponseState.handleTap (package:flutter/src/material/ink_well.dart:1154:21)
#5      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:275:24)
#6      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:654:11)
#7      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:311:5)
#8      BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:281:7)
#9      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:167:27)
#10     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:469:20)
#11     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:445:22)
#12     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:331:11)
#13     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:400:7)
#14     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:363:5)
#15     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:320:7)
#16     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:293:9)
#17     _invoke1 (dart:ui/hooks.dart:158:13)
#18     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:382:7)
#19     _dispatchPointerDataPacket (dart:ui/hooks.dart:91:31)

Handler: "onTap"
Recognizer:
  TapGestureRecognizer#82f50

class _IsumisAppState extends State<IsumisApp> {
  ApiService apiService = new ApiService();
  late Future<File> uploader;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ISuMiS',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Vulnerability Scanner Test'),
        ),
        body: ListView(
          children: [
            // Show installed Apps
            Card(
              child: Padding(
                padding: const EdgeInsets.all(8),
                child: ListTile(
                  title: Text("Installierte Apps"),
                  subtitle: Text("Alle installierten Apps auf Deinem Gerät."),
                  onTap: () => Navigator.push(
                    context,
                    MaterialPageRoute(
                        builder: (context) => AppList(),
                    ),
                  ),
                ),
              )
            ),
            // Next Card
          ]
        ),
      ),
    );
  }
}
class AppList extends StatelessWidget {

   @override
   Widget build(BuildContext context) {
      return Scaffold(
      appBar: AppBar(
        title: Text('Installierte Apps'),
      ), // AppBar
      body: FutureBuilder<List<AppInfo>>(
        future: InstalledApps.getInstalledApps(true, true),
        builder:
            (BuildContext buildContext, AsyncSnapshot<List<AppInfo>> snapshot) {
        return snapshot.connectionState == ConnectionState.done
            ? snapshot.hasData
                  ? ListView.builder(
                      itemCount: snapshot.data!.length,
                      itemBuilder: (context, index) {
                        AppInfo app = snapshot.data![index];
                        return Card(
                          child: ListTile(
                            leading: CircleAvatar(
                              backgroundColor: Colors.transparent,
                              child: Image.memory(app.icon!),
                            ),
                            title: Text(app.name!),
                            subtitle: Text(app.getVersionInfo()),
                            onTap: () =>
                                InstalledApps.startApp(app.packageName!),
                            onLongPress: () =>
                                InstalledApps.openSettings(app.packageName!),
                          ), // ListTile
                        ); // Card
                       }, // itemBuilder
                   ) //ListView
                : Center(
                      child: Text(
                          "Error occurred while getting installed apps ...."))
              : Center(child: Text("Getting installed apps ...."));
            }, // builder
          ), // FutureBuilder
      ); // Scaffold
    }
}

The error isn't very specific and I'm not sure where the error comes from and how I can fix it.

Jan
  • 93
  • 9

0 Answers0