Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 提供程序在另一个页面中使用flatter返回NULL_Flutter_Dart_Provider - Fatal编程技术网

Flutter 提供程序在另一个页面中使用flatter返回NULL

Flutter 提供程序在另一个页面中使用flatter返回NULL,flutter,dart,provider,Flutter,Dart,Provider,我有一个送货应用程序,在开始的时候有这个,如果公司有2家餐厅,它会显示按钮,让用户选择他想要连接的餐厅,如果没有2家餐厅,他会直接进入页面并连接到他从API获得的第一家餐厅 我的供应商只在屏幕上选择餐厅,在我的另一个不选择中,我现在将显示: 这是我的启动屏幕中启动应用程序的代码 @override void initState() { super.initState(); loadData(); } void loadData() { int count

我有一个送货应用程序,在开始的时候有这个,如果公司有2家餐厅,它会显示按钮,让用户选择他想要连接的餐厅,如果没有2家餐厅,他会直接进入页面并连接到他从API获得的第一家餐厅

我的供应商只在屏幕上选择餐厅,在我的另一个不选择中,我现在将显示:

这是我的启动屏幕中启动应用程序的代码

  @override
  void initState() {
    super.initState();
    loadData();
  }

  void loadData() {
    int counter = 0;
    _con.progress.addListener(() {
      double progress = 0;
      _con.progress.value.values.forEach((_progress) {
        progress += _progress;
      });
      if (progress == 100) {
        try {
          counter++;
          if(counter == 2) {
            _con.iniApp();
          }
        } catch (e) {}
      }
    });
  }
这个屏幕在控制器中运行这个,也就是公司调用函数

  iniApp() {
    if(ConfigApp.instance.data['company_id'] != '1') {
      listenForListOfRestaurants();
    } else {
      Navigator.of(context).pushReplacementNamed('/Restaurants');
    }
  }
现在我将讨论我的屏幕,它正在使用(context.pushReplacementNamed('/Restaurants')的Navigator.of(context.pushreplacement)。当用户进入此屏幕时,他选择要连接的餐厅,这是我构建的小部件,用于显示以下内容:

_con.listOfRestaurant.length > 0
                ? Column(
                    children: List.generate(_con.listOfRestaurant.length, (i) {
                      return Container(
                        width: double.infinity,
                        child: Center(
                          child: Container(
                            width: screenWidth * 0.8,
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: <Widget>[
                                Container(
                                  width: screenWidth * 0.8,
                                  child: RaisedButton(
                                    onPressed: () => _con.chooseRestaurant(
                                        _con.listOfRestaurant[i]),
                                    child: Text(
                                      _con.listOfRestaurant[i].name,
                                      style: TextStyle(
                                        fontSize: 16,
                                        letterSpacing: 1.3,
                                        color: ThemeColor.kYellow600,
                                      ),
                                    ),
                                    padding: EdgeInsets.symmetric(
                                      horizontal: 10.0,
                                      vertical: 12.0,
                                    ),
                                    shape: RoundedRectangleBorder(
                                      borderRadius: BorderRadius.circular(30.0),
                                    ),
                                    color: ThemeColor.AppSecundaryColor,
                                    textColor: Colors.white,
                                    elevation: 5,
                                  ),
                                ),
                                SizedBox(
                                  height: screenHeight * 0.12,
                                ),
                              ],
                            ),
                          ),
                        ),
                      );
                    }),
                  )
\u con.listofRestarant.length>0
? 纵队(
子项:List.generate(_con.listofRestarant.length,(i){
返回容器(
宽度:double.infinity,
儿童:中心(
子:容器(
宽度:屏幕宽度*0.8,
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
容器(
宽度:屏幕宽度*0.8,
孩子:升起按钮(
按下时:()=>\u继续选择Estaurant(
_存货清单[i],
子:文本(
_con.listofRestarant[i].名称,
样式:TextStyle(
尺寸:16,
字母间距:1.3,
颜色:ThemeColor.kYellow600,
),
),
填充:EdgeInsets.symmetric(
水平:10.0,
垂直线:12.0,
),
形状:圆形矩形边框(
边界半径:边界半径。圆形(30.0),
),
颜色:ThemeColor.AppSecundaryColor,
textColor:Colors.white,
标高:5,
),
),
大小盒子(
高度:屏幕高度*0.12,
),
],
),
),
),
);
}),
)
请参见此功能\u cont.选择设置?当用户按下时,我调用此函数:

class RestaurantController extends ControllerMVC {
  Restaurant restaurant;
  RestaurantService restaurantService = new RestaurantService();
  List<Restaurant> listOfRestaurant = <Restaurant>[];
  List<Gallery> galleries = <Gallery>[];
  List<Food> foods = <Food>[];
  List<Food> trendingFoods = <Food>[];
  List<Food> featuredFoods = <Food>[];
  List<Review> reviews = <Review>[];
  GlobalKey<ScaffoldState> scaffoldKey;

  RestaurantController() {
    this.scaffoldKey = new GlobalKey<ScaffoldState>();
  }

  void chooseRestaurant(Restaurant restaurant) {
    restaurantService = Provider.of<RestaurantService>(context, listen: false);
    restaurantService.selectRestaurant(restaurant);
    Navigator.of(context).pushReplacementNamed('/Pages', arguments: 2);
  }
类RestaurantController扩展了ControllerMVC{
食肆;;
RestaurantService RestaurantService=新的RestaurantService();
存货清单=[];
列表库=[];
列出食物=[];
列出趋势食品=[];
列出特性食品=[];
清单审查=[];
GlobalKey脚手架;
餐厅控制员(){
this.scaffoldKey=new GlobalKey();
}
void chooseRestaurant(餐厅){
restaurantService=Provider.of(上下文,侦听:false);
餐厅服务。选择餐厅(餐厅);
Navigator.of(context.pushReplacementNamed('/Pages',参数:2);
}
这很好,在另一页,我有一个测试行,看看我是否得到这个变量,他得到的值没有问题

现在的问题是,当用户不需要选择要连接的餐厅时,也就是说,这个listenForListOfRestaurants();

  listenForListOfRestaurants() async {    
    final restaurantService = Provider.of<RestaurantService>(context, listen: false);
    final Stream<List<Restaurant>> stream = await getAllRestaurants();
    await for (List<Restaurant> _restaurantList in stream) {
      restaurantService.selectRestaurant(_restaurantList[0]);
    }
    print(restaurantService.getRestaurant().name);
    Navigator.of(context).pushReplacementNamed('/Pages', arguments: 2);
  }
listenForListOfRestaurants()异步{
final restaurantService=Provider.of(上下文,listen:false);
final Stream=等待getAllRestaurants();
等待(列表中的餐厅列表){
restaurantService.选择Restaurant(_restaurantList[0]);
}
打印(restaurantService.getRestaurant().name);
Navigator.of(context.pushReplacementNamed('/Pages',参数:2);
}
它和另一个一样,但有一点不同,它通过一个流来获得第一家餐厅,并直接设置在我的提供商上,然后更改页面

执行此操作时,我总是在此处获取值print(restaurantService.getRestaurant().name);但在新页面中,我从另一个页面的测试函数中获取NULL,即:

class HomeController extends ControllerMVC {
  RouteArgument routeArgument;
  RestaurantService restaurantService = new RestaurantService();
  List<Category> categories = <Category>[];
  List<Restaurant> topRestaurants = <Restaurant>[];
  List<Restaurant> popularRestaurants = <Restaurant>[];
  List<Review> recentReviews = <Review>[];
  List<Food> trendingFoods = <Food>[];
  List<Food> featuredFoods = <Food>[];

  HomeController();

  void iniHome() {    
    listenForFeaturedFoods();
    // listenForTopRestaurants();
    listenForTrendingFoods();
    listenForCategories();
    listenForPopularRestaurants();
    listenForRecentReviews();
  }

  Future<void> listenForFeaturedFoods() async {   
    restaurantService = Provider.of<RestaurantService>(context, listen: false);
    print(restaurantService.getRestaurant().name);
    /*
    final Stream<Food> stream = await getFeaturedFoodsOfRestaurant(
        restaurantService.getRestaurant().id);
    stream.listen((Food _food) {
      setState(() => featuredFoods.add(_food));
    }, onError: (a) {
      print(a);
    }, onDone: () {
      print(featuredFoods);
    });
    */
  }
class HomeController扩展了ControllerMVC{
常规的常规的;
RestaurantService RestaurantService=新的RestaurantService();
列表类别=[];
列出顶级餐厅=[];
列出受欢迎的员工=[];
列表recentReviews=[];
列出趋势食品=[];
列出特性食品=[];
家庭控制器();
void iniHome(){
listenForFeaturedFoods();
//listenForTopRestaurants();
listenForTrendingFoods();
listenForCategories();
listenfopularrestarants();
listenForRecentReviews();
}
Future listenForFeaturedFoods()异步{
restaurantService=Provider.of(上下文,侦听:false);
打印(restaurantService.getRestaurant().name);
/*
最终流=等待getFeaturedFoodsOfRestaurant(
restaurantService.getRestaurant().id);
流。听((食物){
设置状态(()=>featuredFoods.add(_food));
},onError:(a){
印刷品(a);
},onDone:(){
印刷品(特色食品);
}