如何在同一层次结构路由中将 Shell Route 与 GoRoute 一起使用

2024-01-05

如何在同一层次结构路由中将 Shell Route 与 GoRoute 一起使用

如何使用导航栏按钮之一从 ShellRoute 推送到与 ShellRoute 同一层次结构中的 GoRoute?

目前GoRouter的路由有两个值:ShellRoute和GoRoute。 ShellRoute 中的 Child 代表 Home、Discover 和 Shop Widget。然而,除了上面提到的 Widget 的三个按钮之外,NavBar 还多了一个第四个按钮。这个按钮(MY)用于转到前面提到的 GoRoute。

正如您从下面附加的代码中看到的,我希望在 ShellRoute 上按下第四个按钮时显示登录小部件,因为 GoRoute 堆叠在 ShellRoute 上。但实际上,随着 ShellRoute 被删除,GoRoute 成为顶部堆栈,iOS 没有后退按钮,Android 在 BackPress 时关闭应用程序。

官方文档examples中没有这方面的例子,所以我迷失了很多。 我发现了类似的例子一万个https://github.com/flutter/packages/blob/main/packages/go_router/example/lib/shell_route.dart https://github.com/flutter/packages/blob/main/packages/go_router/example/lib/shell_route.dart在上面的示例中,GoRoute 依赖于 ShellRoute。 我不想要这个。我想让登录路线可以从任何地方访问。

我将在下面附上我的代码和操作屏幕。 我需要你的帮助。

预期成绩:当按下第四个按钮时,GoRoute 会堆叠在 ShellRoute 上,按下背面时 ShellRoute 会重新出现

实际结果:当按下第四个按钮时,ShellRoute 将被删除,创建一个 GoRoute 并将其堆叠在顶部,当您按 Back 时,应用程序将结束。

Performing hot restart...
Syncing files to device iPhone 12...
Restarted application in 368ms.
flutter: MyTest didPush: _PageBasedMaterialPageRoute<void>(MaterialPage<void>("/", [<'280748962'>], {}), animation: AnimationController#0adb5(⏭ 1.000; paused; for _PageBasedMaterialPageRoute<void>(/)))
flutter: MyTest didPush: _PageBasedMaterialPageRoute<void>(MaterialPage<void>("/login", [<'621841910'>], {}), animation: AnimationController#4775c(▶ 0.000; for _PageBasedMaterialPageRoute<void>(/login)))
flutter: MyTest didRemove: _PageBasedMaterialPageRoute<void>(MaterialPage<void>("/shop", [<'280748962'>], {}), animation: AnimationController#0adb5(⏭ 1.000; paused; for _PageBasedMaterialPageRoute<void>(/)))
Code sample

main.dart

void main() {
  runApp(const MyApp());
}

final _rootNavigatorKey = GlobalKey<NavigatorState>();
final _shellNavigatorKey = GlobalKey<NavigatorState>();

final _router = GoRouter(
  initialLocation: '/',
  navigatorKey: _rootNavigatorKey,
  observers: [
    GoRouterObserver(),
  ],
  routes: [
    ShellRoute(
        navigatorKey: _shellNavigatorKey,
        builder: (context, state, child) {
          return ScaffoldWithNavBar(child: child);
        },
        routes: [
          GoRoute(
            path: '/',
            builder: (context, state) {
              return const Home();
            },
          ),
          GoRoute(
            path: '/discover',
            builder: (context, state) {
              return const Discover();
            },
          ),
          GoRoute(
              path: '/shop',
              builder: (context, state) {
                return const Shop();
              }),
        ],
    ),
    GoRoute(
      path: '/login',
      builder: (context, state) {
        return const Login();
      },
    ),
  ],
);

class GoRouterObserver extends NavigatorObserver {
  @override
  void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
    print('MyTest didPush: $route');
  }

  @override
  void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
    print('MyTest didPop: $route');
  }

  @override
  void didRemove(Route<dynamic> route, Route<dynamic>? previousRoute) {
    print('MyTest didRemove: $route');
  }

  @override
  void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) {
    print('MyTest didReplace: $newRoute');
  }
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      title: 'Platform',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      routerConfig: _router,
    );
  }
}

scaffold_with_nav_bar.dart

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

class ScaffoldWithNavBar extends StatefulWidget {
  const ScaffoldWithNavBar({super.key, required this.child});

  final Widget child;

  @override
  State<ScaffoldWithNavBar> createState() => _ScaffoldWithNavBarState();
}

class _ScaffoldWithNavBarState extends State<ScaffoldWithNavBar> {
  int _currentIndex = 0;

  static const List<MyCustomBottomNavBarItem> tabs = [
    MyCustomBottomNavBarItem(
      icon: Icon(Icons.home),
      activeIcon: Icon(Icons.home),
      label: 'HOME',
      initialLocation: '/',
    ),
    MyCustomBottomNavBarItem(
      icon: Icon(Icons.explore_outlined),
      activeIcon: Icon(Icons.explore),
      label: 'DISCOVER',
      initialLocation: '/discover',
    ),
    MyCustomBottomNavBarItem(
      icon: Icon(Icons.storefront_outlined),
      activeIcon: Icon(Icons.storefront),
      label: 'SHOP',
      initialLocation: '/shop',
    ),
    MyCustomBottomNavBarItem(
      icon: Icon(Icons.account_circle_outlined),
      activeIcon: Icon(Icons.account_circle),
      label: 'MY',
      initialLocation: '/login',
    ),
  ];

  @override
  Widget build(BuildContext context) {
    const labelStyle = TextStyle(fontFamily: 'Roboto');
    return Scaffold(
      body: SafeArea(child: widget.child),
      bottomNavigationBar: BottomNavigationBar(
        selectedLabelStyle: labelStyle,
        unselectedLabelStyle: labelStyle,
        selectedItemColor: const Color(0xFF434343),
        selectedFontSize: 12,
        unselectedItemColor: const Color(0xFF838383),
        showUnselectedLabels: true,
        type: BottomNavigationBarType.fixed,
        onTap: (int index) {
          _goOtherTab(context, index);
        },
        currentIndex: _currentIndex,
        items: tabs,
      ),
    );
  }

  void _goOtherTab(BuildContext context, int index) {
    if (index == _currentIndex) return;
    GoRouter router = GoRouter.of(context);
    String location = tabs[index].initialLocation;
    if (index == 3) {
      router.push(location);
    }

    setState(() {
      _currentIndex = index;
      router.go(location);
    });
  }
}

class MyCustomBottomNavBarItem extends BottomNavigationBarItem {
  final String initialLocation;

  const MyCustomBottomNavBarItem(
      {required this.initialLocation,
      required Widget icon,
      String? label,
      Widget? activeIcon})
      : super(icon: icon, label: label, activeIcon: activeIcon ?? icon);
}
Logs
 info • Avoid `print` calls in production code • lib/main.dart:62:5 • avoid_print
   info • Avoid `print` calls in production code • lib/main.dart:67:5 • avoid_print
   info • Avoid `print` calls in production code • lib/main.dart:72:5 • avoid_print
   info • Avoid `print` calls in production code • lib/main.dart:77:5 • avoid_print
   info • Prefer const with constant constructors • lib/sections/discover/discover.dart:11:16 • prefer_const_constructors
   info • Avoid using private types in public APIs • lib/sections/exhibition/detail_exhibition.dart:10:3 • library_private_types_in_public_api
   info • Prefer const with constant constructors • lib/sections/exhibition/exhibition.dart:11:16 • prefer_const_constructors
   info • Unused import: 'package:knowd_platform/sections/discover/discover.dart' • lib/sections/home/home.dart:2:8 • unused_import
   info • Prefer const with constant constructors • lib/sections/home/home.dart:21:15 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/login/login.dart:11:16 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/login/login_router.dart:8:34 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/login/singup.dart:11:16 • prefer_const_constructors
   info • Avoid using private types in public APIs • lib/sections/main_tab_bar.dart:12:3 • library_private_types_in_public_api
   info • Private field could be final • lib/sections/main_tab_bar.dart:17:16 • prefer_final_fields
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:18:5 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:19:5 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:20:5 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:21:5 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:41:18 • prefer_const_constructors
   info • Prefer const literals as parameters of constructors on @immutable classes • lib/sections/main_tab_bar.dart:59:17 • prefer_const_literals_to_create_immutables
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:60:13 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:61:21 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:64:13 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:65:21 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:68:13 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:69:21 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:72:13 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:73:21 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/shop.dart:10:16 • prefer_const_constructors
 info • Avoid `print` calls in production code • lib/main.dart:62:5 • avoid_print
   info • Avoid `print` calls in production code • lib/main.dart:67:5 • avoid_print
   info • Avoid `print` calls in production code • lib/main.dart:72:5 • avoid_print
   info • Avoid `print` calls in production code • lib/main.dart:77:5 • avoid_print
   info • Prefer const with constant constructors • lib/sections/discover/discover.dart:11:16 • prefer_const_constructors
   info • Avoid using private types in public APIs • lib/sections/exhibition/detail_exhibition.dart:10:3 • library_private_types_in_public_api
   info • Prefer const with constant constructors • lib/sections/exhibition/exhibition.dart:11:16 • prefer_const_constructors
   info • Unused import: 'package:knowd_platform/sections/discover/discover.dart' • lib/sections/home/home.dart:2:8 • unused_import
   info • Prefer const with constant constructors • lib/sections/home/home.dart:21:15 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/login/login.dart:11:16 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/login/login_router.dart:8:34 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/login/singup.dart:11:16 • prefer_const_constructors
   info • Avoid using private types in public APIs • lib/sections/main_tab_bar.dart:12:3 • library_private_types_in_public_api
   info • Private field could be final • lib/sections/main_tab_bar.dart:17:16 • prefer_final_fields
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:18:5 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:19:5 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:20:5 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:21:5 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:41:18 • prefer_const_constructors
   info • Prefer const literals as parameters of constructors on @immutable classes • lib/sections/main_tab_bar.dart:59:17 • prefer_const_literals_to_create_immutables
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:60:13 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:61:21 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:64:13 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:65:21 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:68:13 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:69:21 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:72:13 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/main_tab_bar.dart:73:21 • prefer_const_constructors
   info • Prefer const with constant constructors • lib/sections/shop.dart:10:16 • prefer_const_constructors


使用时的注意事项context.go() from ShellRoute to GoRoute

  1. Specify parentNavigatorKey prop in each GoRoute
    • 如果页面是以下页面的子页面ShellRoute : parentNavigatorKey:_shellNavigatorKey
    • 如果页面是以下页面的子页面MainRoute : parentNavigatorKey:_rootNavigatorKey
  2. Use context.go()替换页面,context.push()将页面压入堆栈

代码结构如下:


final _parentKey = GlobalKey<NavigatorState>();
final _shellKey = GlobalKey<NavigatorState>();

|_ GoRoute
  |_ parentNavigatorKey = _parentKey   ???? Specify key here
|_ ShellRoute
  |_ GoRoute                            // Needs Bottom Navigation                  
    |_ parentNavigatorKey = _shellKey   
  |_ GoRoute                            // Needs Bottom Navigation
    |_ parentNavigatorKey = _shellKey   
|_ GoRoute                              // Full Screen which doesn't need Bottom Navigation
  |_parentNavigatorKey = _parentKey

您的代码中的错误

  1. 未指定parentNavigatorKey

  2. For backButton要想可见,你必须拥有appBar inside Scaffold.

  3. 这段代码

    if (index == 3) {
     router.push(location);
     }
     setState(() {
     _currentIndex = index;
     router.go(location);
     });
    }  
    

代码改进

  1. 可见后退按钮
  2. 导航回 ShellRoute
  3. 坚持Navigation单击后退按钮时的菜单
  4. 修复了使用时路线之间奇怪的转换navbar

Code:

Router


final _rootNavigatorKey = GlobalKey<NavigatorState>();
final _shellNavigatorKey = GlobalKey<NavigatorState>();

final router = GoRouter(
  initialLocation: '/',
  navigatorKey: _rootNavigatorKey,
  routes: [
    ShellRoute(
      navigatorKey: _shellNavigatorKey,
      pageBuilder: (context, state, child) {
        print(state.location);
        return NoTransitionPage(
            child: ScaffoldWithNavBar(
          location: state.location,
          child: child,
        ));
      },
      routes: [
        GoRoute(
          path: '/',
          parentNavigatorKey: _shellNavigatorKey,
          pageBuilder: (context, state) {
            return const NoTransitionPage(
              child: Scaffold(
                body: Center(child: Text("Home")),
              ),
            );
          },
        ),
        GoRoute(
          path: '/discover',
          parentNavigatorKey: _shellNavigatorKey,
          pageBuilder: (context, state) {
            return const NoTransitionPage(
              child: Scaffold(
                body: Center(child: Text("Discover")),
              ),
            );
          },
        ),
        GoRoute(
            parentNavigatorKey: _shellNavigatorKey,
            path: '/shop',
            pageBuilder: (context, state) {
              return const NoTransitionPage(
                child: Scaffold(
                  body: Center(child: Text("Shop")),
                ),
              );
            }),
      ],
    ),
    GoRoute(
      parentNavigatorKey: _rootNavigatorKey,
      path: '/login',
      pageBuilder: (context, state) {
        return NoTransitionPage(
          key: UniqueKey(),
          child: Scaffold(
            appBar: AppBar(),
            body: const Center(
              child: Text("Login"),
            ),
          ),
        );
      },
    ),
  ],
);

底部导航栏

class ScaffoldWithNavBar extends StatefulWidget {
  String location;
  ScaffoldWithNavBar({super.key, required this.child, required this.location});

  final Widget child;

  @override
  State<ScaffoldWithNavBar> createState() => _ScaffoldWithNavBarState();
}

class _ScaffoldWithNavBarState extends State<ScaffoldWithNavBar> {
  int _currentIndex = 0;

  static const List<MyCustomBottomNavBarItem> tabs = [
    MyCustomBottomNavBarItem(
      icon: Icon(Icons.home),
      activeIcon: Icon(Icons.home),
      label: 'HOME',
      initialLocation: '/',
    ),
    MyCustomBottomNavBarItem(
      icon: Icon(Icons.explore_outlined),
      activeIcon: Icon(Icons.explore),
      label: 'DISCOVER',
      initialLocation: '/discover',
    ),
    MyCustomBottomNavBarItem(
      icon: Icon(Icons.storefront_outlined),
      activeIcon: Icon(Icons.storefront),
      label: 'SHOP',
      initialLocation: '/shop',
    ),
    MyCustomBottomNavBarItem(
      icon: Icon(Icons.account_circle_outlined),
      activeIcon: Icon(Icons.account_circle),
      label: 'MY',
      initialLocation: '/login',
    ),
  ];

  @override
  Widget build(BuildContext context) {
    const labelStyle = TextStyle(fontFamily: 'Roboto');
    return Scaffold(
      body: SafeArea(child: widget.child),
      bottomNavigationBar: BottomNavigationBar(
        selectedLabelStyle: labelStyle,
        unselectedLabelStyle: labelStyle,
        selectedItemColor: const Color(0xFF434343),
        selectedFontSize: 12,
        unselectedItemColor: const Color(0xFF838383),
        showUnselectedLabels: true,
        type: BottomNavigationBarType.fixed,
        onTap: (int index) {
          _goOtherTab(context, index);
        },
        currentIndex: widget.location == '/'
            ? 0
            : widget.location == '/discover'
                ? 1
                : widget.location == '/shop'
                    ? 2
                    : 3,
        items: tabs,
      ),
    );
  }

  void _goOtherTab(BuildContext context, int index) {
    if (index == _currentIndex) return;
    GoRouter router = GoRouter.of(context);
    String location = tabs[index].initialLocation;

    setState(() {
      _currentIndex = index;
    });
    if (index == 3) {
      context.push('/login');
    } else {
      router.go(location);
    }
  }
}

class MyCustomBottomNavBarItem extends BottomNavigationBarItem {
  final String initialLocation;

  const MyCustomBottomNavBarItem(
      {required this.initialLocation,
      required Widget icon,
      String? label,
      Widget? activeIcon})
      : super(icon: icon, label: label, activeIcon: activeIcon ?? icon);
}

Output:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在同一层次结构路由中将 Shell Route 与 GoRoute 一起使用 的相关文章

  • UINavigationBar 滑开而不是留在原处

    我创建了演示项目来展示问题 我们在 UINavigationController 中有两个视图控制器 MainViewController这是根 class MainViewController UIViewController lazy
  • Android -room 持久库 - DAO 调用是异步的,因此如何获取回调?

    从我读到的Room 不允许您在主线程上发出数据库查询 因为可能会导致主线程延迟 所以想象一下我正在尝试更新 UI 主线程上的文本视图 其中一些数据我将如何得到回调 让我给你举个例子 想象一下 我想将我的业务模型数据存储到一个名为 事件 的对
  • 选项卡主机内的 Android Fragment 视图状态 [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Fragment 为 Android 中的每个选项卡单独的返回堆栈 https stackoverflow com questions 6987334 separate back stack f
  • 在新的 intel x86 android 模拟器中访问 google api

    我只是尝试在新的 x86 android 模拟器中运行我公司的应用程序 但是我们的应用程序依赖于 google 地图 API 而这在 google 随 android sdk 版本 17 提供的 x86 系统映像中不可用 我的直觉告诉我答案
  • 在后台运行 URL 请求

    我想在一定的时间间隔内发出 url 请求 例如 每 10 分钟应用程序应该发出一次 url 调用并获取一些 json 数据 应用程序在后台运行时应该能够执行此操作 这可以做到吗 如果是这样 这是否违反 Apple 服务条款 有什么限制吗 i
  • 如何使用 SharedPreferences 保存多个值?

    我正在开发一个字典应用程序 在我的应用程序中 我假设用户想要保存最喜欢的单词 我决定使用共享首选项保存这些值 我知道 SQLite 和文件更好 但我坚持使用 SharedPreferences 所以继续使用它 下面是我的代码 Overrid
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • 带有图像的 UITableView 滚动非常慢[重复]

    这个问题在这里已经有答案了 可能的重复 带图像的表格视图 加载和滚动缓慢 https stackoverflow com questions 4071497 table view with images slow load and scro
  • 移动设备上的 TensorFlow(Android、iOS、Windows Phone)

    我目前正在寻找不同的深度学习框架 特别是用于训练和部署卷积神经网络 要求是 它可以在带有 GPU 的普通 PC 上进行训练 但训练后的模型必须部署在三个主要的移动操作系统上 即 Android iOS 和 Windows Phone Ten
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 旋转 GPUImageTiltShiftFilter - GPUImage

    我想要一个非水平 GPUImageTiltShiftFilter 旋转 我想将其旋转到任意旋转角度 我还希望过滤器速度快 可以通过带有 UIRotationGestureRecongizer 的 UI 进行旋转 我该怎么做呢 啊 想通了 不
  • 在后台继续下载

    我正在创建一个应用程序 其中我从服务器下载一些数据 在后台运行时 我希望连接继续运行 以便可以下载数据 我知道有方法应用程序委托 void applicationDidEnterBackground UIApplication applic
  • Swift 错误:发出 SIGABRT 信号如何解决

    我只是 Swift 编码的初学者 我的想法很简单 就是一个有两个按钮的应用程序 单击时 文本字段将更改其文本 在 Main StoryBoard 中 我添加一个文本字段和两个按钮 在 ViewController swift 文件中 我这样
  • 如何在多个视图中显示相同的导航栏?

    我可以为一个视图重现以下导航栏 但是 一旦我单击按钮后移至下一个视图 我就会丢失最右边的两个图标 搜索 个人资料 据我所知 从故事板设置导航项目通常是按视图进行的 我可以为每个视图复制这些项目 但我想知道是否有更好的方法来完成一次 是否有教
  • Android 标记如何实现拖放?

    你好 我正在 Android 中开发 MapView 应用程序 我有三个标记 我希望稍后能够使用 Google Map API getlocation function 为了尝试一下 我想使用拖放功能移动标记 然后检查位置 任何人都可以通过
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • iOS 开发:如何强制 UIWebView 加载 Facebook 的非移动版本?

    我正在深入研究 iOS 开发 当我尝试在 UIWebView 中加载特定的 Facebook 粉丝页面时 它会加载该网站的移动版本 该版本仅加载粉丝页面的墙 而不是我需要加载的特定选项卡 在我的应用程序的 iPad 版本中 UIWebVie
  • 丢失应用程序的密钥库文件(但已启用 Google Play 应用程序签名)

    我已经失去了原来的keystore用于签署我的应用程序的文件 我的应用启用了 Google Play 应用签名 如果我联系 Google 支持人员 是否可以重置密钥 以便我可以继续上传到此包 我希望我可以做到这一点 因为应用程序签名已启用
  • 如何删除以前的 ViewController

    我是一名学生 对编程还很陌生 我正在尝试在业余时间学习 Objective C Swift 我使用 spriteKit 和 swift 制作了一个游戏 有多个菜单 场景 我正在尝试从一个视图控制器转换到另一个视图控制器 为此 我使用了以下代
  • Android MulticastSocket.joinGroup 不会触发发送 IGMP 消息

    Code MulticastSocket s new MulticastSocket InetAddress addr InetAddress getByName 230 230 230 1 s joinGroup addr 在 Ubunt

随机推荐

  • 从 Web API .NET Core get 操作返回字符串

    我有一个 get 操作 我想从中返回一个字符串 一个例子是 000875 当我从完整的 NET Web API 控制器中的控制器返回此字符串时 它的格式如下 Property 000875 当我在转换后的 NET Core 控制器中返回字符
  • webpack 对 *.js 的意外修改

    我是 webpack 和类似工具的新手 我想重新组织我的项目 目前我所有的 JS 代码都位于 App js 中 因此 在将其拆分为模块并进行改进之前 我只想设置复制它的工作流程 这是 webpack config js 的内容 const
  • 将ASP.Net Core 2.1preview2网站发布到本地IIS MSB3030 *.PrecompiledViews.dll

    Update 1 根据 Priyesh Kumar 的反馈 我使用了网站根文件夹中的以下命令 网站带有 csproj 的命令 这有效 然后我将 win10 x64 内容文件复制到 c www sigex com 中 dotnet publi
  • 在多阶段 docker 构建中使用变量

    我想在多阶段 docker 构建中使用变量 如同这个问题 https stackoverflow com questions 52904847 在撰写本文时尚未得到答复 我的具体用例是在builder阶段并保存目录 这是在变量中完成的 并在
  • React:创建 onClick HOC 而不使用额外的

    我想避免手动添加onClick我的自定义组件的属性 为此 我考虑了一个名为的高阶组件WithClick这将用集成的组件包裹我的组件onClick财产 我面临的问题是 为了包装它 我必须使用额外的 div div 标签来访问事件属性 这个标签
  • 如何以编程方式检测 ensemble 客户端中的哪个服务器连接到?

    如何以编程方式检测客户端连接到 ZooKeeper 集合中的哪台服务器 我正在使用阿帕奇策展人 http curator apache org API 和我正在通过注册监听连接状态变化连接状态监听器 https curator apache
  • ASP.NET WebAPI 中的模拟和异步

    Update 2 这个问题最初是 模仿可以与 Web API 一起使用吗 这个问题的问题是 是的 确实如此 但问题不在于 Web API 而在于模仿本身 问题描述如下 但现在我想告诉其他人解决方案 我的控制器是异步的 我错误的前提是模拟线程
  • 如何使用 C# 检查打印机是否已安装并准备就绪?

    如何使用 NET 3 5 和 Visual Studio 2008 在 C 中以编程方式检查打印机是否已安装 如果有 如何检查它是否已打开并准备好使用 提前致谢 此代码片段将检索有关已安装打印机的信息 using System Drawin
  • 读取或转换 word .doc 文件 iOS

    iOS 上的其他应用程序如何读取和写入 Word 文档 我看到其他一些与此相关的问题 并且接受的答案都是 这是不可能完成的 我不想只显示 Word 文档 我想阅读它及其格式 其他应用程序是如何做到这一点的 他们是否使用微软发布的发布标准自己
  • 如何实时处理音频流

    我有一个运行最新 jessie 的树莓派 3 的设置 其中安装了所有更新 其中我提供了一个 A2DP 蓝牙接收器 我可以在其中连接手机播放一些音乐 通过pulseaudio 源 电话 被路由到alsa 输出 接收器 这相当有效 我现在想使用
  • 可以在 SQLAlchemy 中执行没有子查询的 UNION 吗?

    另一个问题展示了如何在 SQLAlchemy 中进行联合 https stackoverflow com a 20032394 565879 是否可以在不使用子查询的情况下在 SQLAlchemy 中执行联合 例如 在链接的问题中 SQLA
  • Shopify option_selection.js - 如何修改?

    我遇到了一点麻烦 我正在重新设计我的商店 并尝试改变变体下拉菜单在前端的显示方式 据我所知 option selection js 是一个从 Shopifys 服务器托管和加载的全局资产 它改变了我的产品选项在我的主题中的显示方式 目前 它
  • 如何以 DRY 方式将“活动”类应用到基于 current_page 的导航? - 轨道3

    所以在我的application html erb我的导航结构看起来像这样 div ul class pills li li li li ul div
  • 多个API密钥

    我的公司帮助为多个客户开发谷歌地图网络应用程序 我个人不是开发人员 所以请原谅我问一个对其他人来说可能很明显的问题 我需要注册多个 API 密钥 因为我不希望我的一个 API 密钥超过 25K 那么是否可以注册多个 API 密钥 我的每个客
  • Hudson/maven 发布快照

    我希望能够使用 Maven 将快照发布到存储库 或者让 Hudson 在每次使用 Maven 构建后发布快照 我一直在阅读 POM 的 SCM 部分 并且有几个问题 抱歉 如果我在这里偏离了基地 这部分对我来说是新的 我不想将我的用户名和密
  • 堆栈上的内存泄漏

    C 中是否有可能造成内存泄漏没有堆分配 通过非常糟糕的设计 我想到的一个例子 如果它没有达到我的预期 请纠正我 include
  • 为什么带有 @Transactional 方法的类不能自动装配?

    我将 Spring Security 与 WAFFLE 过滤器结合使用 该过滤器根据 ActiveDirectory 服务器对用户进行身份验证 我创建了一个额外的过滤器 它还根据我的数据库对用户进行身份验证 它只是检查是否 先前经过身份验证
  • Rust/Diesel:如何查询并插入具有 uuid 的 postgres 表

    我有 Diesel 生成的以下架构 table user id id gt Uuid name gt Text 以及相关模型 use diesel self Queryable Insertable use diesel prelude u
  • 每种类型数据库的实际示例(真实案例)[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有多种类型的数据库用于不同的目的 但通常 MySQL 可以用于所有用途 因为它是最知名的数据库 举个例子 在我的公司 大数据的应用初期就有MyS
  • 如何在同一层次结构路由中将 Shell Route 与 GoRoute 一起使用

    如何在同一层次结构路由中将 Shell Route 与 GoRoute 一起使用 如何使用导航栏按钮之一从 ShellRoute 推送到与 ShellRoute 同一层次结构中的 GoRoute 目前GoRouter的路由有两个值 Shel