Dart 如何在Flitter中使用quick_actions官方插件打开特定屏幕?

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

我在我的项目中实现了这个插件,我想打开一个特定的屏幕,但是在quickaction处理程序函数中导航器不起作用。通过一个
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)