我试图从我的主页移动到另一个屏幕使用浮动操作按钮,但不幸的是,浮动操作按钮不工作。点击按钮后,下一个屏幕没有出现,控制台显示上下文问题,但我无法绕过它。
import 'package:flutter/material.dart';
import 'package:kitchen/Screen/kitchenscreen.dart';
import 'package:kitchen/Screen/FoodScreen.dart';
void main ()
{
runApp(myapp());
}
class myapp extends StatelessWidget
{
@override
Widget build(BuildContext context)
{
return MaterialApp(
home:Scaffold
(
backgroundColor:Colors.white60,
appBar: AppBar(
backgroundColor: Colors.green,
title: const Text('Teach'),
actions: [
IconButton(onPressed:(){},
icon: const Icon(Icons.favorite),)
] ,
),
body:const Center(
child: Text('Add Content here'),
),
floatingActionButton: FloatingActionButton(
onPressed: (){Navigator.push(context,
MaterialPageRoute(builder: (context)=>FoodScreen()),);},
backgroundColor:Colors.green,
child:const Icon(Icons.add),
),
)
);
}
}
import 'package:flutter/material.dart';
class FoodScreen extends StatelessWidget{
const FoodScreen({Key ? key}) :super(key:key);
Widget build(BuildContext context)
{
return const Scaffold(
body:Center(child:Text('hello')));
}
}
我试图在点击浮动操作按钮后获得一个屏幕,但不幸的是点击屏幕后没有出现。
3条答案
按热度按时间utugiqy61#
在您的代码中,您在
FloatingActionButton
的onPressed
函数中使用的上下文可能与Navigator
没有关联,导航可能无法按预期工作,因此您必须使用navigatorKey
或Builder
小部件提供适当的context
。您可以像这样使用
Builder
小部件:xtfmy6hx2#
因为传递给
Navigator.push
的context
是错误的。它是myapp
的上下文,而不是停留在Scaffold
小部件中。如果你想使用
Navigator
,那么你必须传递context
,它留在Scaffold中。尝试Builder
让context
留在Scaffold
内:mfpqipee3#
有两种不同的方法来解决您的问题,让我们逐一讨论。
1.第一个方法是可选参数,这意味着你不能给予上下文,你只是把_作为可选参数。
navigator_service.dart
但你需要为此创建路由生成器,工作将很容易。
route_generator.dart