簡體   English   中英

Flutter-試圖從reducer獲取小部件上下文的支架

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM