当用户从边缘滑动到弹出路线时,我试图关闭键盘。
目前,键盘不会关闭,直到路线完全弹出,弄乱其他一些页面布局,直到它关闭
我确实尝试使用 aWillPopScope来确定用户何时要弹出路线,但不幸的是,这会禁用 iOS 或CupertinoPageRoute.
我只是想知道是否可以确定用户何时从边缘滑动到弹出或点击应用程序栏上的后退按钮并在执行此操作时关闭键盘。
如果可能的话,我会尝试在键盘开始滑动弹出时立即关闭键盘,就像许多应用程序中发生的那样。
我附上一个 gif 来显示我想要达到的效果。
当用户单击返回或我Navigator.pop()在第二个屏幕中使用时,我试图运行某种方法。
我有两个屏幕。
编辑后,我将用户弹出到第一秒。现在在第一个屏幕中我使用SharedPreference. 但是当用户回到第一个屏幕时,我需要重新运行一个方法。我怎样才能做到这一点?
我想创建一个通用的公共方法,如果有任何响应,则将应用程序导航到登录屏幕:unauthenticated。
问题是我没有context在我的Navigator.
在Android中我曾经使用:getApplicationContext(),我如何在Flutter中做到这一点?
我用来Overlay.of(context)在单击按钮时显示一些内容。但有两个问题:
当前输出在此屏幕截图中。
那么,如何在导航时删除覆盖层并正确显示下拉列表呢?如果无法使用覆盖,有什么解决方法吗?
PS:我用来NavigatorKey在单击固定侧栏中的名称时更改表格,如屏幕截图所示。
我正在尝试实现 Navigator 2.0 方法。我唯一无法工作的是按下后退按钮。当我按下后退按钮时,应用程序只是退出而不会转到上一页。我尝试了 WillPopPage 小部件,但后退按钮绕过了它。
这是一个不适用于背压的示例代码。
import 'package:flutter/material.dart';
main(List<String> args) {
runApp(TestApp());
}
class TestApp extends StatefulWidget {
@override
_TestAppState createState() => _TestAppState();
}
class _TestAppState extends State<TestApp> {
bool go = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Navigator(
pages: [
// page 1
MaterialPage(
child: W1(onTapped: () {
setState(() => go = true);
}),
),
// page 2
if (go) MaterialPage(child: W2()),
],
onPopPage: (route, result) {
if (!route.didPop(result)) return false;
go = false;
return …Run Code Online (Sandbox Code Playgroud) 抱歉提前发了这么大的帖子……
我的应用程序是一个与 Instagram 非常相似的社交网络。
图案:
Navigator.push()选择照片(打开包含照片/播放视频的页面这就像一个无限的“轮廓 - 进给”循环。按照这样的逻辑,在遇到错误之前,我使用 Navigator.push() 到达了大约 30 页OutOfMemory。
Flutter 工具只是说lost connection to device,但我使用的越多Navigator,应用程序变得越迟缓,最终崩溃,所以我 99% 确定这是由于内存使用造成的。
这种情况 100% 发生,由于帖子列表中的滚动,或多或少会出现 1 页差异。
如果我不在图片/视频列表中滚动太多,则每个页面的内存使用量或多或少会增加 20MB。
我已经计划缩小我的图像,但这充其量只是推迟了问题的解决。
问题:
OutOfMemory这种“无限页面”是否可能永远不会遇到异常?deactivate()方法StateFul Widgets可以在Navigator.push被调用后使用(dispose()没有被调用,因为我们没有从树中删除任何东西),也许应该在那里做一些工作?Navigator堆栈吗?我不想打开pop()旧页面,因为我需要返回到第一个页面打开在这种情况和这种逻辑下,这意味着如果我可能浏览 Instagram 中的 100 个页面,这也会以 100% 的速度崩溃。
我不确定是否有人会走那么远,也许这就是他们所指望的...如果没有办法阻止OutOfMemory,唯一的解决方案可能是延迟它,直到用户看到至少 100 个页面...
我在理论上找到了解决方法,但不确定这在代码中是否可能:
到目前为止我想到的唯一解决方案是允许用户访问push()一定数量的页面,并在Navigator堆栈中最多保留 20 …
我曾经使用 IconButton 的onpressed从我的 AppBar 导航到设置页面,这是有效的。现在我试图从 PopupMenuItem 的onTap触发导航,但页面不导航。两个小部件都位于同一层次结构中,我无法找出不同行为的原因。不会抛出任何错误。
这是我的 appBar 的代码,其中包含操作:
Widget build(BuildContext ctx) {
return Container(
child: Scaffold(
appBar: AppBar(
title: const Text('MyApp'),
actions: [
PopupMenuButton(
itemBuilder: (context) => [
// THE NAVIGATION IN onTap DOES NOT WORK
PopupMenuItem(
child: Text(AppLocalizations.of(context).settings),
onTap: () => _openSettings(ctx),
),
],
icon: Icon(
Icons.settings,
),
),
// THIS WORKS
IconButton(onPressed: () => _openSettings(ctx),
icon: Icon(Icons.settings))
],
),
body: Text("")
),
);
}
Run Code Online (Sandbox Code Playgroud)
这里的导航调用只能在 IconButton 的onpressed内部工作。我可以确认该函数在这两种情况下都被触发:
Future<void> _openSettings(BuildContext ctx) …Run Code Online (Sandbox Code Playgroud) 在我的 Flutter 应用程序中,如果将新页面推送到导航堆栈,我希望暂停动画。
问题:从小部件的角度来看,有没有办法知道小部件是否位于导航堆栈的顶部?
例子:
while (isTopOfNavigationStack) {
// Do the animation
}
Run Code Online (Sandbox Code Playgroud)
编辑1:更多细节
我使用库widget_marquee来创建水平滚动条。在将新页面推送到导航堆栈之前,该库一直运行良好。发生这种情况时,while-loop变得无限并且应用程序冻结。
library widget_marquee;
import 'dart:developer';
import 'package:flutter/material.dart';
/// Rotates the [child] widget indefinitely along the horizontal axis if the
/// content extends pass the edge of the render area.
///
/// [delayDuration] - One time delay to wait before starting the text rotation
/// [gap] - Spacing to add between widget end and start
/// [loopDuration] - Time for one full …Run Code Online (Sandbox Code Playgroud) 我需要从OverlayState无法访问当前上下文的服务中引用当前内容。我尝试使用BuildContext从导航键获取我的“技巧”,但是虽然这适用于对话框和导航,但对于此用例似乎无效。我尝试过以下方法:
Overlay.of(navigatorKey.currentContext, rootOverlay: false);
Overlay.of(navigatorKey.currentState!.context, rootOverlay: false);
Overlay.of(navigatorKey.currentState!.overlay!.context, rootOverlay: false);
Run Code Online (Sandbox Code Playgroud)
并且全部返回 null。从小部件 () 调用的同一代码段Overlay.of(context)会返回一个有效的OverlayState. 有什么方法可以实现这一点吗?
使用 flutter_bloc 和 go_router 实现基于身份验证更改的导航。
我需要做的是,如果用户经过身份验证,则应将其重定向到主屏幕,并能够导航身份验证流程...(HomeScreen,TestScreen1,TestScreen2)
如果用户在任何时候未经身份验证,则应将其重定向到登录屏幕,如果未知,则应重定向到启动屏幕。
我已经解决了许多 stackoverflow 问题和 github 问题,但没有一个提供我们如何实现这一目标的最佳实践。
问题:
提供以下资产:
Tried to listen to a value exposed with provider, from outside of the widget tree.
This is likely caused by an event handler (like a button's onPressed) that called
Provider.of without passing `listen: false`.
To fix, write:
Provider.of<$T>(context, listen: false);
It is unsupported because may pointlessly rebuild the widget associated to the
event handler, when the widget tree …Run Code Online (Sandbox Code Playgroud)