StatefulWidget: операция Navigator запрошена с контекстом, который не включает Navigator

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

flutter: ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
flutter: The following assertion was thrown while handling a gesture:
flutter: Navigator operation requested with a context that does not include a Navigator.
flutter: The context used to push or pop routes from the Navigator must be that of a widget that is a
flutter: descendant of a Navigator widget.

ниже мой код

import 'package:flutter/material.dart';
import 'package:flutter_app/second.dart';

main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MyAppState();
  }
}

class _MyAppState extends State<MyApp> {
  var strings = ["Flutter", "Java", "SWift"];
  var displayText = "";

  void onPressed() {
    var list = List<int>.generate(3, (int index) => index); // [0, 1, 4]
    list.shuffle();
    print(list);

    setState(() {
      displayText = strings[list.first];
    });
  }

  @override
  Widget build(BuildContext context) {
    var scaffold = Scaffold(
      appBar: AppBar(
        title: Text('Flutter Second'),
      ),
      body: Container(
          child: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              displayText,
              style: TextStyle(
                  color: Colors.red,
                  fontStyle: FontStyle.normal,
                  fontWeight: FontWeight.bold,
                  fontSize: 30.0),
            ),
            Padding(
              padding: EdgeInsets.all(10.0),
            ),
            RaisedButton(
              child: Text('Change'),
              textColor: Colors.black,
              onPressed: () {
                Navigator.pushNamed(context, '/second'); // Fails here
              },
            )
          ],
        ),
      )),
    );
    return MaterialApp(
      home: scaffold,
      routes: {
        '/second': (context) => SecondScreen(),
      },
    );
  }
}

Ниже то, что я пробовал

  1. Используемый Navigator.of(контекст)

  2. Обернул statefulwidget как дома для материального приложения, созданного из виджета без сохранения состояния.

но не повезло.


person anoop4real    schedule 06.12.2018    source источник
comment
все решения говорят о виджетах без состояния ... почему-то я не могу применить указанные решения ... в виджетах с состоянием ....   -  person anoop4real    schedule 06.12.2018
comment
Решения не связаны с безгражданством/с сохранением состояния   -  person Rémi Rousselet    schedule 06.12.2018
comment
Хорошо... но я как-то не могу понять. мой код виджета находится в классе состояния, вы хотите, чтобы я переместил его в другой класс? Я пытался найти некоторые решения, и в итоге я столкнулся с некоторыми или другими проблемами ... я новичок во Flutter и учусь, создавая образцы приложений, поэтому, если вы можете дать мне несколько указателей на основе моего кода, это было бы здорово   -  person anoop4real    schedule 06.12.2018
comment
Проще всего добавить Builder над Container.   -  person Rémi Rousselet    schedule 06.12.2018
comment
Большое спасибо, чувак ... это сработало ... вы можете добавить в качестве ответа, если хотите, и я могу отметить это   -  person anoop4real    schedule 06.12.2018
comment
Просто проголосуйте за связанный ответ из дубликата :)   -  person Rémi Rousselet    schedule 06.12.2018
comment
Конечно, я сделаю это   -  person anoop4real    schedule 06.12.2018