ModalRoute.of(上下文)!设置.实参为int;Everytime返回空值[SOLVED



我正在开发一个Flutter移动应用程序,我使用这个:

int elemanSayisi = ModalRoute.of(context)!.settings.arguments as int;

但是为什么每次都返回空值?

主类是:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_navigations/green_page.dart';
import 'package:flutter_navigations/orange_page.dart';
import 'package:flutter_navigations/red_page.dart';
import 'package:flutter_navigations/route_generator.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
int elemanSayisi = ModalRoute.of(context)!.settings.arguments as int;
print('Eleman Sayısı Alındı : $elemanSayisi');
return MaterialApp(
title: 'Material App',
home: AnaSayfa(),
onGenerateRoute: RouteGenerator.routeGenerator,
);
}
}
class AnaSayfa extends StatelessWidget {
const AnaSayfa({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Navigation Page"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
//YELLOW PAGE PUSH NAMED
ElevatedButton(
onPressed: () {
Navigator.pushNamed(context, '/yellowPage');
},
child: Text('Yellow Page'),
style: ElevatedButton.styleFrom(primary: Colors.yellow),
),
//CREATE LIST BUTTON
ElevatedButton(
onPressed: () {
Navigator.pushNamed(
context,
'/ogrenciListesi',
arguments: 60,
);
},
child: Text('Create List'),
style: ElevatedButton.styleFrom(primary: Colors.green),
)
],
),
),
);
}
}

路由生成器类是:

import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_navigations/main.dart';
import 'package:flutter_navigations/ogrenci_listesi.dart';
import 'package:flutter_navigations/orange_page.dart';
import 'package:flutter_navigations/yellow_page.dart';
class RouteGenerator {
static Route<dynamic>? _routeOlustur(
Widget gidilecekWidget, RouteSettings settings) {
if (defaultTargetPlatform == TargetPlatform.iOS) {
return CupertinoPageRoute(
builder: (context) => gidilecekWidget,
settings: settings,
);
} else if (defaultTargetPlatform == TargetPlatform.android) {
return MaterialPageRoute(
builder: (context) => gidilecekWidget,
settings: settings,
);
} else {
return CupertinoPageRoute(
builder: (context) => gidilecekWidget,
settings: settings,
);
}
}
static Route<dynamic>? routeGenerator(RouteSettings settings) {
switch (settings.name) {
case '/':
return _routeOlustur(AnaSayfa(), settings);
case '/orangePage':
return _routeOlustur(OrangePage(), settings);
case '/yellowPage':
return _routeOlustur(YellowPage(), settings);
case '/ogrenciListesi':
print(settings.arguments);
return _routeOlustur(OgrenciListesi(), settings);
default:
return MaterialPageRoute(
builder: (context) => Scaffold(
appBar: AppBar(title: Text("Error")),
body: Center(child: Text('Not Found')),
),
);
}
}
}

必须从目标页面的构建方法中获取参数值。这是一个简化的例子

static Route<dynamic>? routeGenerator(RouteSettings settings) {
switch (settings.name) {
case '/orangePage':
return MaterialPageRoute(
builder: (context) => OrangePage(),
settings: settings,
);
}
}
Navigator.pushNamed(context, '/orangePage', arguments: 50);
class OrangePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
int value = ModalRoute.of(context)!.settings.arguments as int;
return Scaffold(body: Center(child: Text(value)));
}
}

更多信息:https://flutter.dev/docs/cookbook/navigation/navigate-with-arguments

关于BuildContext对象:https://www.youtube.com/watch?v=rIaaH87z1-g

我有一个类似的问题,我通过在;之前添加?来解决我的问题

int elemanSayisi = ModalRoute.of(context)!.settings.arguments as int?;