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.