Dart 如何在Flitter中使用quick_actions官方插件打开特定屏幕?
我在我的项目中实现了这个插件,我想打开一个特定的屏幕,但是在quickaction处理程序函数中导航器不起作用。通过一个Dart 如何在Flitter中使用quick_actions官方插件打开特定屏幕?,dart,flutter,dart-pub,Dart,Flutter,Dart Pub,我在我的项目中实现了这个插件,我想打开一个特定的屏幕,但是在quickaction处理程序函数中导航器不起作用。通过一个Try Catch,异常显示显示的上下文来自导航器,但我使用的是my MaterialApp的navigatorKey的上下文 如果我使用任何其他函数,比如print('some text')它可以工作,那么问题只会在我尝试使用导航器时出现 创建快速操作并添加处理程序函数 createQuickActions(){ quickActions.initialize( (字符串sh
Try Catch
,异常显示显示的上下文来自导航器,但我使用的是my MaterialApp的navigatorKey的上下文
如果我使用任何其他函数,比如print('some text')
它可以工作,那么问题只会在我尝试使用导航器时出现
创建快速操作并添加处理程序函数
createQuickActions(){
quickActions.initialize(
(字符串shortcutId){
开关(快捷键){
案例“设置”:
试一试{
导航器。推(
MyApp.NavigatoryKey.currentContext,
材料路线(
生成器:(上下文)=>SettingsScreen(系统屏幕),
),
);
}捕获(e){
印刷品(e);
}
打印('selected:$shortcutId');
打破
}
}
);
}
快速行动
quickActions.setShortcutItems(
[
常数短项(
键入:“设置”,
本地化标题:“设置”,
图标:“设置”,
),
],
);
所有这些代码都在我的SplashScreen
中,因为插件的文档中说,这应该是应用程序的早期状态
我希望应用程序打开设置屏幕
和打印“设置”
,但如果应用程序已经打开,则会打开主屏幕
和打印“设置”
,但如果应用程序没有打开,则会尝试打开某个内容,然后关闭自身(而不是强制关闭
消息)在下面的示例中,
在快速操作中使用MainView将打开登录小部件,直接单击应用程序将打开主页小部件您可以参考详细信息
完整代码
import 'package:flutter/material.dart';
import 'package:quick_actions/quick_actions.dart';
import 'dart:io';
class QuickActionsManager extends StatefulWidget {
final Widget child;
QuickActionsManager({Key key, this.child}) : super(key: key);
_QuickActionsManagerState createState() => _QuickActionsManagerState();
}
class _QuickActionsManagerState extends State<QuickActionsManager> {
final QuickActions quickActions = QuickActions();
@override
void initState() {
super.initState();
_setupQuickActions();
_handleQuickActions();
}
@override
Widget build(BuildContext context) {
return widget.child;
}
void _setupQuickActions() {
quickActions.setShortcutItems(<ShortcutItem>[
ShortcutItem(
type: 'action_main',
localizedTitle: 'Main view',
icon: Platform.isAndroid ? 'quick_box' : 'QuickBox'),
ShortcutItem(
type: 'action_help',
localizedTitle: 'Help',
icon: Platform.isAndroid ? 'quick_heart' : 'QuickHeart')
]);
}
void _handleQuickActions() {
quickActions.initialize((shortcutType) {
if (shortcutType == 'action_main') {
Navigator.push(
context, MaterialPageRoute(builder: (context) => Login()));
} else if(shortcutType == 'action_help') {
print('Show the help dialog!');
}
});
}
}
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'QuickActions Demo', home: QuickActionsManager(child: Home()));
}
}
class Home extends StatelessWidget {
const Home({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(body: Center(child: Text('Home')));
}
}
class Login extends StatelessWidget {
const Login({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(body: Center(child: Text('Login')));
}
}
导入“包装:颤振/材料.省道”;
导入“package:quick_actions/quick_actions.dart”;
导入“dart:io”;
类QuickActionsManager扩展StatefulWidget{
最后一个孩子;
QuickActionsManager({Key-Key,this.child}):超级(Key:Key);
_QuickActionsManager状态createState()=>\u QuickActionsManager状态();
}
类_QuickActionsManager状态扩展状态{
最终快速动作快速动作=快速动作();
@凌驾
void initState(){
super.initState();
_setupQuickActions();
_handleQuickActions();
}
@凌驾
小部件构建(构建上下文){
返回widget.child;
}
void _setupQuickActions(){
quickActions.setShortcutItems([
短发(
类型:'操作\主',
本地化标题:“主视图”,
图标:Platform.isAndroid?'quick_-box':'QuickBox'),
短发(
键入:“操作\帮助”,
本地化标题:“帮助”,
图标:Platform.isAndroid?'quick_heart':'QuickHeart')
]);
}
void_handleQuickActions(){
初始化((快捷键类型){
if(shortcutType=='action_main'){
导航器。推(
context,MaterialPageRoute(builder:(context)=>Login());
}else if(shortcutType=='action\u help'){
打印('显示帮助对话框!');
}
});
}
}
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“QuickActions演示”,主页:QuickActionsManager(子项:home());
}
}
类Home扩展了无状态小部件{
常量Home({Key}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(主体:中心(子对象:文本(“主”));
}
}
类登录扩展了无状态小部件{
常量登录({Key}):超级(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(主体:中心(子项:文本('Login'));
}
}
在下面的示例中,
在快速操作中使用MainView将打开登录小部件,直接单击应用程序将打开主页小部件您可以参考详细信息
完整代码
import 'package:flutter/material.dart';
import 'package:quick_actions/quick_actions.dart';
import 'dart:io';
class QuickActionsManager extends StatefulWidget {
final Widget child;
QuickActionsManager({Key key, this.child}) : super(key: key);
_QuickActionsManagerState createState() => _QuickActionsManagerState();
}
class _QuickActionsManagerState extends State<QuickActionsManager> {
final QuickActions quickActions = QuickActions();
@override
void initState() {
super.initState();
_setupQuickActions();
_handleQuickActions();
}
@override
Widget build(BuildContext context) {
return widget.child;
}
void _setupQuickActions() {
quickActions.setShortcutItems(<ShortcutItem>[
ShortcutItem(
type: 'action_main',
localizedTitle: 'Main view',
icon: Platform.isAndroid ? 'quick_box' : 'QuickBox'),
ShortcutItem(
type: 'action_help',
localizedTitle: 'Help',
icon: Platform.isAndroid ? 'quick_heart' : 'QuickHeart')
]);
}
void _handleQuickActions() {
quickActions.initialize((shortcutType) {
if (shortcutType == 'action_main') {
Navigator.push(
context, MaterialPageRoute(builder: (context) => Login()));
} else if(shortcutType == 'action_help') {
print('Show the help dialog!');
}
});
}
}
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'QuickActions Demo', home: QuickActionsManager(child: Home()));
}
}
class Home extends StatelessWidget {
const Home({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(body: Center(child: Text('Home')));
}
}
class Login extends StatelessWidget {
const Login({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(body: Center(child: Text('Login')));
}
}
导入“包装:颤振/材料.省道”;
导入“package:quick_actions/quick_actions.dart”;
导入“dart:io”;
类QuickActionsManager扩展StatefulWidget{
最后一个孩子;
QuickActionsManager({Key-Key,this.child}):超级(Key:Key);
_QuickActionsManager状态createState()=>\u QuickActionsManager状态();
}
类_QuickActionsManager状态扩展状态{
最终快速动作快速动作=快速动作();
@凌驾
void initState(){
super.initState();
_setupQuickActions();
_handleQuickActions();
}
@凌驾
小部件构建(构建上下文){
返回widget.child;
}
void _setupQuickActions(){
quickActions.setShortcutItems([
短发(
类型:'操作\主',
本地化标题:“主视图”,
图标:Platform.isAndroid?'quick_-box':'QuickBox'),
短发(
键入:“操作\帮助”,
本地化标题:“帮助”,
图标:Platform.isAndroid?'quick_heart':'QuickHeart')
]);
}
void_handleQuickActions(){
初始化((快捷键类型){
if(shortcutType=='action_main'){
导航器。推(
context,MaterialPageRoute(builder:(context)=>Login());
}else if(shortcutType=='action\u help'){
打印('显示帮助对话框!');
}
});
}
}
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“QuickActions演示”,主页:QuickActionsManager(子项:home());
}
}
类Home扩展了无状态小部件{
常量Home({Key}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(主体:中心(chi)