flutter - 如何在 Flutter Web 中导航到其他屏幕
问题描述
我创建了一个简单的代码练习flutter web。
我一直在尝试在颤振网络中的两个屏幕之间导航。但是我单击第一个屏幕中的按钮并导航到第二个屏幕,第二个屏幕显示为空白,右上角有调试标志。一旦我刷新第二个屏幕数据就来了。
如何解决这个问题?
这是代码
import 'package:temp/providers/Increment_provider.dart';
import 'package:temp/screens/Detail_screen.dart';
import 'package:provider/provider.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<IncrementProvider>(
create: (btx) => IncrementProvider(),
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: '/',
routes: {
DetailScreen.routeName: (ctx) => DetailScreen(),},
home: MyHomePage(),
),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final counter = Provider.of<IncrementProvider>(context, listen: false);
return Scaffold(
appBar: AppBar(
title: Text('Main Screen'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Consumer<IncrementProvider>(builder: (ctx,counter,ch)=>Text(
'${counter.count}',
style: Theme.of(context).textTheme.headline4,
),
),
FloatingActionButton(
onPressed: () {
Navigator.pushNamed(context,DetailScreen.routeName);
},
tooltip: 'Press the button',
child: Icon(Icons.view_agenda),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => counter.incrementor(),
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:temp/providers/Increment_provider.dart';
class DetailScreen extends StatelessWidget {
static const routeName='/Detail_screen';
@override
Widget build(BuildContext context) {
final counter=Provider.of<IncrementProvider>(context);
return Scaffold(
body: Center(child:Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('The incremented value is ${counter.count}'),
],
),),
);
}
}
import 'package:flutter/material.dart';
class IncrementProvider with ChangeNotifier{
int _count=0;
int get count=> _count;
void incrementor (){
_count+=1;
notifyListeners();
}
}
解决方案
将您的导航器更改为:
Navigator.of(context).pushNamed(DetailScreen.routeName);
并且您的DetailScreen不需要该列,因为Center Widget 正在执行您的逻辑。
此外,对于这种“奇怪”的行为,在这里发布你的总是好的,flutter doctor -v
这样我们就可以判断你是否使用了不同版本的Flutter,插件是否是最新的等等。
另外,我建议您先从 DetailScreen中删除您的提供程序,看看这是否会影响行为。我在没有您的 Provider 类的情况下尝试了您的代码,并使用 iOS 模拟器工作。另外,要仔细检查,请在文本上强制使用TextStyle颜色,以确保设备中的深色/浅色主题也不会影响它。
推荐阅读
- python - 如何读取某个位置最新且名称中包含特定单词的 excel 文件
- c++ - 有没有办法让“make_unique< T[ ] >”可以将参数转发给 T 的构造函数?
- angular - 如何为adal Login支持的应用编写端到端测试?
- c# - 除非以管理员身份运行,否则 PrintVisual 不会打印
- reactjs - RNFB_ANDROID_PERMISSIONS=true 命令在 Windows 上显示错误
- spring-boot - 未使用 springboot 在 DB 中创建表
- unity3d - 如何在 unity-5 中删除“无法合并 android manifest”错误
- python - Python:将列添加到与另一列相关的数据框
- java - 如何在json中获取特定元素
- openshift - 如何确定 OpenShift 3 中是否已经存在卷?