在颤振中,我有一个用例,我想在屏幕顶部返回相同的路线(如果它已经存在),否则推送新路线。
例如,当前堆栈:(A -> B -> C -> D最顶层)
如果我推 B,我只想A -> C -> D -> B。我想将 B 及其状态带到前面。
我浏览了文档,但找不到执行此操作的方法。有人想出办法做到这一点吗?
当我将新路由添加到 router.dart 并运行构建运行程序时,我得到 Route必须有一个页面或一个重定向目标错误
下面是我在 router.drat 中的代码:
@MaterialAutoRouter(
replaceInRouteName: 'Page,Route',
routes: <AutoRoute>[
AutoRoute(
path: '/',
page: SplashPage,
),
AutoRoute(
path: 'signInPage',
name: 'SignInRouter',
page: SignInPage,
),
AutoRoute(
path: 'noteOverviewPage',
name: 'NoteOverviewRouter',
page: NoteOverviewPage,
),
AutoRoute(
path: 'todoFormPage',
name: 'todoFormRouter',
page: TodoFormPage,
),
],
)
class $AppRouter {}
Run Code Online (Sandbox Code Playgroud) 我正在使用go_router构建一个执行“虚拟”路由推送的应用程序(有点像 Twitter)。可以从一个页面开始/a,推送/b,然后/c,...然后再次推送/a。
当页面被推送两次时,会assert失败:assert(!keyReservation.contains(key));这确保了密钥在Navigator.
有没有办法能够使用 go_router 推送两次同一页面?
这是一个小代码片段:
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
void main() {
runApp(const MyApp());
}
final router = GoRouter(
initialLocation: '/a',
routes: [
GoRoute(
path: '/a',
builder: (_, __) => const MyWidget(path: '/a'),
),
GoRoute(
path: '/b',
builder: (_, __) => const MyWidget(path: '/b'),
),
],
);
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的 AutoTabsScaffold [bottom nav] 添加身份验证防护,但它不起作用,它可以在其他导航页面中工作,但不仅仅在我的登陆页面内 [其中 AutoTabsScaffold| 底部导航位于]我在这里遗漏了什么吗?
使用:auto_route: ^3.2.4 [pub.dev]
类登陆页面
return AutoTabsScaffold(
backgroundColor: Theme
.of(context)
.scaffoldBackgroundColor,
routes: const [
HomeRouter(),
CategoryRouter(),
OrderRouter(),
ProfileRoute(),
],
bottomNavigationBuilder: (_, tabsRouter) {return}
Run Code Online (Sandbox Code Playgroud)
类授权守卫:
class RouteGuard extends AutoRedirectGuard {
final AuthService authService;
RouteGuard(this.authService) {
authService.addListener(() {
if (!authService.authenticated) {
// should be called when the logic effecting this guard changes
// e.g when the user is no longer authenticated
reevaluate();
}
});
}
@override
void onNavigation(NavigationResolver resolver, StackRouter router) {
if (authService.authenticated) …Run Code Online (Sandbox Code Playgroud) 我有一个页面 A,它在每个时间间隔执行一些任务。我只想仅当页面 A 处于活动状态并显示在屏幕上时才执行这些任务。
如果屏幕显示页面 B,则不会执行任务。
我应该如何解决这个问题?
我目前正在尝试使用新的 Flutter web beta 构建一个 web 应用程序。问题是能够拥有历史记录,处理浏览器中的前进和后退按钮,并能够处理用户输入到需要新 Navigator 2.0 API 的 URL(至少从我的理解)。
目前只有少数可用资源,我正在尝试基于这些资源构建我的导航器。我使用的资源:
我设法让后退和前进按钮,以及历史工作。但是,我很难处理页面切换(在 Navigator() 中)。在 John 的示例中,他管理 Navigator 小部件的 'page:' 数组中的不同站点(在 routeDelegater 中)。这对我来说似乎很奇怪,但我像这样尝试过,但它并没有真正起作用(代码进一步向下)。
在“页面:[]”中,我首先尝试让布尔值触发(如 show404),但这不是很干净,所以我的下一次尝试是按如下方式获取当前页面(在数组中):
if(_currentPage.name == 'pages[0]') pageBuilds[0]
Run Code Online (Sandbox Code Playgroud)
这有点奏效,因为我可以输入段 /matchit/0 并加载正确的页面,但是由于某种原因,“/”路由不再起作用,我收到了错误
Navigator.onGenerateRoute was null, but the route named "/" was referenced
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用 'ongenerateRoute' 但这只是抛出了一堆错误。我有点新,所以也许我在那里做错了什么。但在我看来这不是正确的方法。这就是我目前陷入困境的地方。我不知道接下来该尝试什么,希望你们中的一些人可以帮助我。
我的 Route-Delegater 如下所示(我将在代码中包含我的注释,也许它可以帮助你们中的一些人,他们也希望了解 Navigator 2.0,了解正在发生的事情):
/**
* The RouteDelegate defines application specific behavious of how the router
* …Run Code Online (Sandbox Code Playgroud) navigator flutter flutter-navigation flutter-web flutter-routes
在flutter web中,如何通过完整地址打开特定页面?
场景是:
await Navigator.pushNamed(context, "classroom/detail/$id", arguments: {"data": someData});http://localhost/myschoolweb/classroom/detail/1F5刷新页面 -> ERROR 404这是我的onGenerateRoute代码:
onGenerateRoute: (RouteSettings settings) {
List<String> routes = settings.name?.split("/") ?? [];
final routeName = routes.isNotEmpty ? routes.first : null;
final routeSub1 = routes.length > 1 ? routes[1] : null;
final routeSub2 = routes.length > 2 ? routes[2] : null;
final args = {
...(settings.arguments as Map<String, dynamic>? ?? {}),
"sub1": routeSub1,
"sub2": routeSub2,
};
Widget …Run Code Online (Sandbox Code Playgroud) 我可以看到该MaterialApp应用程序可以接收路线。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
routes: {
'/page1': (context) => Page1(title: "Main page"),
...
Run Code Online (Sandbox Code Playgroud)
并从小部件显示它们,例如:
myKey.currentState.pushNamed("/page1");
Run Code Online (Sandbox Code Playgroud)
还有其他参数,例如onGenerateRoute和initialRoute使我更加困惑。
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是什么参数的含义,让这个“责任”的MaterialApp,为什么我们应该这样做,或许真的与内存管理或如何在Widget生命周期内的作品,还是什么?
1. 和 2. 之间有什么区别?
为了在改变屏幕时有动画,我正在使用page_transition: ^1.1.5
这是一个例子:
\nNavigator.push(context, PageTransition(type: PageTransitionType.rightToLeft, child: HandymanDocumentsOverview(), duration: Duration(milliseconds: 150)));\nRun Code Online (Sandbox Code Playgroud)\n昨天我安装firebase_core: ^0.5.0并更新了所有其他 Firebase 依赖项。不知何故,感觉动画速度Navigator.pop(context);比以前慢了很多,甚至与第一个动画速度不匹配。\n有人知道如何解决这个问题吗?
这里编辑的是我的flutter doctor -v
[\xe2\x9c\x93] Flutter (Channel stable, 1.22.0, on Mac OS X 10.15.4 19E287, locale de-DE)\n \xe2\x80\xa2 Flutter version 1.22.0 at /Users/bastianmeyer/flutter\n \xe2\x80\xa2 Framework revision d408d302e2 (3 days ago), 2020-09-29 11:49:17 -0700\n \xe2\x80\xa2 Engine revision 5babba6c4d\n \xe2\x80\xa2 Dart version 2.10.0\n\n \n[\xe2\x9c\x93] Android toolchain - develop for Android devices (Android SDK version 29.0.3)\n \xe2\x80\xa2 Android …Run Code Online (Sandbox Code Playgroud) 我有一个带有 2 个小部件/页面的 flutter 应用程序,即:
- 加载小部件/页面(在应用程序启动时立即出现)
- 主页小部件/页面
我想在加载页面完成加载后启动主页。基本上我的问题是 -我如何知道我的小部件何时完成加载?
以下是我的代码:
// My main.dart
import 'package:flutter/material.dart';
import 'package:routes/pages/home.dart';
import 'package:routes/pages/loading.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
routes: {
'/': (context) => Loading(),
'/home': (context) => Home(),
},
);
}
}
class Loading extends StatefulWidget {
@override …Run Code Online (Sandbox Code Playgroud) 我有一个简单的 Flutter 应用程序,我想删除所有以前的路由,但我想使用 GetX,该怎么做?
现在它与
Navigator.of(context).pushNamedAndRemoveUntil('/home', (Route<dynamic> route) => false);
Run Code Online (Sandbox Code Playgroud)
但我想知道正确的方法Get.to或类似的
我有一个 flutter 应用程序,可以使用屏幕中的文本表单字段捕获数据。我有第二个屏幕,我想在其中显示从第一个屏幕的文本表单字段捕获的数据。
但首先我想从第二个屏幕控制器将其打印到终端,并查看已传递的内容。我尝试使用 GetX naviagtion 并传递,但出现此错误
The method '[]' was called on null.
Receiver: null
Tried calling: [](0)
Run Code Online (Sandbox Code Playgroud)
这是我用来获取数据作为输入的文本表单字段
TextFormField(
controller: controller._phoneNumberController,
keyboardType: TextInputType.text,
validator: (value) => validatePhoneNumber(value!),
style: TextStyle(
color: accentColor,
fontSize: 15,
fontFamily: 'PoppinsRegular',
),
decoration: InputDecoration(
hintText: "Phone Number",
hintStyle: TextStyle(
fontSize: 14,
color: Colors.black45,
fontWeight: FontWeight.w500),
fillColor: Color(0xffEBEDF4),
filled: true,
border: InputBorder.none,
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8.0),
borderSide: BorderSide(
color: Color(0xff1D275C),
),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8.0),
borderSide: BorderSide(
color: formFieldColor,
width: 2.0,
),
),
), …Run Code Online (Sandbox Code Playgroud) 在颤动中使用底部导航栏中的三个图标时,我想移动到三个新页面(根据下面的代码)。我尝试了多种方法,但代码不起作用,也无法按照我的要求弄清楚。
在这种情况下,最重要的是使用现有代码并使用底部导航栏更改移动到新页面所需的更改。
如果有人知道如何使用底部导航栏(使用我现有的代码)导航到新页面,请告诉我。
先感谢您。
代码:
class dashboard extends StatefulWidget {
@override
_dashboardState createState() => _dashboardState();
}
// ignore: camel_case_types
class _dashboardState extends State<dashboard> {
int currentIndex = 1;
changeIndex(index) {
setState(() {
currentIndex = index;
});
}
@override
Widget build(BuildContext context) {
final authService = Provider.of<AuthService>(context);
return Scaffold(
body: SingleChildScrollView(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top: 80.0, right: 250),
child: Center(
child: Container(
width: 200.0,
height: 20.0,
decoration:
BoxDecoration(borderRadius: BorderRadius.circular(15.0)),
child: (const Text(
'Hello',
textAlign: TextAlign.center,
style: TextStyle( …Run Code Online (Sandbox Code Playgroud) flutter ×13
flutter-routes ×13
dart ×4
flutter-web ×2
flutter-getx ×1
getx ×1
navigator ×1
router ×1
routes ×1