Flutter - Попытка получить эшафот контекста виджета от редуктора - PullRequest
0 голосов
/ 06 сентября 2018

Я бью стену, так как пытаюсь использовать контекст (для вызова снэк-бара, когда выполняется асинхронное действие) виджета из редуктора.

Я пытался использовать 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(),
      ),
    )
   );

  }
}

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Наконец, я решил последовать совету @ Günter Zöchbauer и поместить Эшафот в конектор магазина, чтобы при обновлении магазина я проверял стоимость магазина и, соответственно, менял страницу.

0 голосов
/ 06 сентября 2018

Я немного понимаю вашу проблему.у вас проблемы с тем, чтобы показать закуски, поэтому у меня есть код для реализации закусочной.

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,
)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...