[英]Flutter - Trying to get the scaffold of a widget context from reducer
因為要嘗試使用化簡器中的小部件的上下文(在異步操作完成后調用小吃欄),所以我碰到了牆。
我曾嘗試使用GlobalKey,但是當我得到這樣的密鑰並且嘗試使用它的上下文調用窗口小部件Scaffold時,它會拋出一個錯誤,說實際上沒有這種上下文的Scaffold。
遺憾的是,我無法提供該代碼,因為該代碼是針對客戶的,因此無法顯示該代碼,但是如果需要,我可以為您提供詳細信息。
小吃吧/吐司本身並不那么重要,但是如果無法從reducer獲取小部件的上下文將是將來的重要問題。
謝謝
編輯:這是@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")
);
}
}
-減速器文件
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(),
),
)
);
}
}
我有點了解你的問題。 您在顯示小吃吐司時遇到問題,因此我擁有共享代碼來實現小吃店。
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,
)}
最終,我決定遵循@GünterZöchbauer的建議,並將腳手架放入商店中,以便在商店更新時檢查商店的價值,並更改頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.