Я бью стену, так как пытаюсь использовать контекст (для вызова снэк-бара, когда выполняется асинхронное действие) виджета из редуктора.
Я пытался использовать GlobalKey, но когда я получаю такой ключ и пытаюсь использовать его контекст для вызова виджета Scaffold, он выдает ошибку, в которой говорится, что для такого контекста не существует Scaffold, когда существует заражение.
К сожалению, я не могу предоставить код, потому что это для клиента, и код не может быть показан, но я могу предоставить вам подробную информацию, если это необходимо.
Закусочная / тост сама по себе не так важна, но если контекст виджета
Нельзя достать из редуктора и будет важным вопросом в будущем.
Спасибо
EDIT:
Вот репродукция кода, предложенного @ Günter Zö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 file
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(),
),
)
);
}
}