android - Flutter - 试图从 reducer 获取小部件上下文的脚手架

标签 android ios mobile dart flutter

我遇到了麻烦,因为我正在尝试使用来自 reducer 的小部件的上下文(在异步操作完成时调用 snackbar )。

我尝试过使用 GlobalKey,但是当我获得这样的 key 并尝试使用它的上下文来调用小部件 Scaffold 时,它会抛出一个错误,表示没有此类上下文的 Scaffold,而事实上确实存在。

遗憾的是,我无法提供代码,因为该代码是针对客户的,因此无法显示代码,但如果需要,我可以为您提供详细信息。

snackbar / toast 本身并不那么重要,但是如果小部件的上下文 无法从 reducer 中获取将是 future 的重要问题。

谢谢

编辑: 以下是 @Günter Zöchbauer 建议的代码重现:

- key 文件

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(),
      ),
    )
   );

  }
}

最佳答案

我有点理解你的问题。你在 View 中显示小吃 toast 时遇到问题,所以我有共享代码来实现 snackbar 。

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,
)}

关于android - Flutter - 试图从 reducer 获取小部件上下文的脚手架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52203271/

相关文章:

java - 连接到 MySQL Web 数据库并使用 Pictures Android 列出结果

ios - 在一天中的特定时间安排本地通知

ios - 如何使用参数执行选择器?

css - 在桌面上强制移动 CSS

javascript - 如何为此脚本编写其他内容

java - Android 连接到 http 服务器 : Eclipse throws exception about localhost even though I state my online server?

android - 如何从Android中的其他包中引用类?

java - NDK 找不到标准 C++ 库

ios - 如何在无类型成功的情况下使用 Alamofile 的标准结果类型?

android - 用于移动应用程序的 PhoneGap