[英]Flutter : Navigator operation requested with a context that does not include a Navigator
[英]Get Error on Flutter - Navigator operation requested
我只想做一个简单的任务来打开文件资源管理器。 我尝试了 file_picker 但这不起作用(我尝试了大约 10 小时 - 几乎所有东西)所以我切换到 filesystem_picker。 按下按钮时,出现以下错误:
[VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: 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.
#0 Navigator.of.<anonymous closure> (package:flutter/src/widgets/navigator.dart:2553:9)
#1 Navigator.of (package:flutter/src/widgets/navigator.dart:2560:6)
#2 FilesystemPicker.open (package:filesystem_picker/src/picker_page.dart:58:22)
#3 _App._pickAFile (package:projekt/main.dart:26:41)
#4 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:989:21)
#5 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:198:24)
#6 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:608:11)
#7 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5)
#8 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:230:7)
#9 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:563:9)
#10 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:94:12)
#11 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:139:9)
#12 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:539:8)
#13 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:137:18)
#14 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:123:7)
#15 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:439:19)
#16 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:419:22)
#17 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:322:11)
#18 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:374:7)
#19 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:338:5)
#20 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:296:7)
#21 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:279:7)
#22 _rootRunUnary (dart:async/zone.dart:1444:13)
#23 _CustomZone.runUnary (dart:async/zone.dart:1335:19)
#24 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
#25 _invoke1 (dart:ui/hooks.dart:169:10)
#26 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:293:7)
#27 _dispatchPointerDataPacket (dart:ui/hooks.dart:88:31)
该代码是:
mport 'dart:io';
import 'package:filesystem_picker/filesystem_picker.dart';
import 'package:flutter/material.dart';
main () => runApp(App());
class App extends StatefulWidget{
@override
State<StatefulWidget> createState(){
return _App();
}
}
class _App extends State<App>{
Directory rootPath = new Directory('/');
String? filePath;
String? dirPath;
//FileTileSelectMode filePickerSelectMode = FileTileSelectMode.checkButton;
void _pickAFile() async{
String? path = await FilesystemPicker.open(
title: 'Open file',
context: context,
rootDirectory: rootPath,
fsType: FilesystemType.file,
folderIconColor: Colors.teal,
allowedExtensions: ['.pdf'],
fileTileSelectMode: FileTileSelectMode.wholeTile,
);
}
Widget build(BuildContext context){
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("FilePickerApp"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
newPadding(),
],
),
))
);
}
Padding newPadding() {
// ignore: unnecessary_new
return new Padding(
padding: const EdgeInsets.only(top: 50.0, bottom: 20.0),
child: ElevatedButton(
onPressed:_pickAFile,
// ignore: prefer_const_constructors
child: Text("Open File picker"),
),
);
}
}
我应该怎么解决这个问题? 或者有可能修复它吗?
试试这个,也许它可以帮助
main () => runApp(
MaterialApp(App()),
);
并且不要在这里返回填充。 也许是这样
newPadding() {
return Padding(
padding: const EdgeInsets.only(top: 50.0, bottom: 20.0),
child: ElevatedButton(
onPressed:_pickAFile,
child: const Text("Open File picker"),
),
);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.