Неопределенный с именем 'context' во время навигации - PullRequest
0 голосов
/ 09 мая 2020
import 'package:flutter/material.dart';
import 'fruits_listing_card.dart';
import 'fruits_page.dart';

Map<String, Widget> fruits = {
  "banana": FruitsListingCards(
    fruitBGColor: 0xFFF8A8B5,
    fruitImagePath: 'images/fruits/banana.png',
    fruitName: 'Banana',
    fruitPrice: 'Rs. 105',
    fruitShortDescription: 'Ripe & Tasty',
    onTap: () {
      Navigator.push(context, MaterialPageRoute(builder: (context) => FruitsPage()),);
    },
  ),
}

// Второй файл

import 'package:flutter/material.dart';
class FruitsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Container(),
      ),
    );
  }
}

Оба кода находятся в разных файлах. FruitsListingCards - это виджет, который имеет функцию детектора жестов. onTap - это параметр, который принимает функцию. Я использую FruitsListingCards в основном файле, и всякий раз, когда пользователь нажимает на него, на экране FruitsPage должен отображаться go. Но ошибка не дает мне этого сделать. Любое решение с правильным объяснением мне очень поможет.

РЕДАКТИРОВАТЬ: Для правильного понимания кода проверьте мое репо: https://github.com/RaghavTheGreat1/fruits_delivery/tree/master/lib

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Вы должны каким-то образом предоставить контекст, чтобы он мог соединить последний экран и следующий экран.

Для этого вы можете обернуть внутри функцию.

Следующий минимальный код поможет вам больше, чтобы понять.

class DeleteWidget extends StatefulWidget {   
@override  
_DeleteWidgetState createState() => _DeleteWidgetState(); 
}

class FruitsPage extends StatelessWidget {   
final Function call;   
FruitsPage({this.call});   
@override   
Widget build(BuildContext context) {
        return Container(
          child: RaisedButton(
            child: Text("press"),
            onPressed: call,
          ),
        );   
} 
}

    class NewPage extends StatelessWidget {   
    @override   
    Widget build(BuildContext context) {
            return Scaffold(
              body: Center(
                child: Container(
                  child: Text("FruiysPage"),
                ),
              ),
            );   
} 
}




    callme(context) {   
Map<String, Widget> fruits = {
        "banana": FruitsPage(
          call: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => NewPage()),
            );
          },
        )   
};   
return fruits; 
}
0 голосов
/ 10 мая 2020

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

Быстрое решение или исправление заключалось в добавлении Navigator.push(context, MaterialPageRoute(builder: (context) => fruitsPage)); внутри анонимной функции GestureDetector в FruitsListingCards с последующим возвратом плодов (которая является переменной c динамического типа, которая принимает объект класса в качестве параметра).

...