由于要尝试使用化简器中的小部件的上下文(在异步操作完成后调用小吃栏),所以我碰到了墙。
我曾经尝试过使用GlobalKey,但是当我得到这样的密钥并且尝试使用它的上下文调用窗口小部件Scaffold时,它会抛出一个错误,表明实际上没有此类上下文的Scaffold。>
很遗憾,我无法提供该代码,因为该代码是针对客户的,因此无法显示该代码,但是如果需要,我可以为您提供详细信息。
小吃栏/吐司本身并不那么重要,但是如果是小部件的上下文 无法从减速器上得到解决,这将是未来的重要问题。
谢谢
编辑: 这是@GünterZöchbauer建议的代码重现:
-密钥文件
import 'package:flutter/widgets.dart';
class Keys {
static final GlobalKey<MyWidgetState> myWidgetStateKey = new
GlobalKey<MyWidgetState>();
}
-小部件文件
import 'package:myapp/keys.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
class MyPage extends StatefulWidget{
@override
MyPageState createState()=>new MyPageState();
}
class MyPageState extends State<MyPage>{
@override
Widget build(BuildContext conext){
return new Scaffold(
key: Keys.myWidgetStateKey,
appBar:new AppBar(
title:new Text("My app bar")
),
body: new Text("My app body")
);
}
}
-Reducer文件
import 'package:flutter/material.dart';
import 'package:casinoadmiralapp/appState.dart';
import 'package:casinoadmiralapp/actions.dart';
import 'package:casinoadmiralapp/keys.dart';
AppState reducer(AppState state,action){
BuildContext context = Keys.myWidgetStateKey.currentContext;
if(action is TheAction){
Scaffold.of(context).showSnackBar(
new SnackBar(
content:new Text("You have done an action"),
action: new SnackBarAction(
label: "UNDO",
onPressed: () => Scaffold.of( context ).hideCurrentSnackBar(),
),
)
);
}
}
答案 0 :(得分:0)
我有点了解您的问题。您在显示小吃吐司时遇到问题,因此我拥有共享代码来实现小吃店。
class AprovedScreenState extends State<AprovedScreen> {
BuildContext buildContext;
final key = new GlobalKey<ScaffoldState>();
void navigationPage() {
key.currentState.showSnackBar(new SnackBar(
content: new Text("Sending Message"),
));
用脚手架方法编写关键代码,如下所示:
@override
Widget build(BuildContext context) {
// TODO: implement build
buildContext = context;
return new Scaffold(
key: key,
)}
答案 1 :(得分:0)
最后,我决定遵循@GünterZöchbauer的建议,并将脚手架放入商店存储区,以便在商店更新时,我检查商店的价值并因此更改页面。