Android 如何在flatter中更新屏幕

Android 如何在flatter中更新屏幕,android,ios,flutter,dart,Android,Ios,Flutter,Dart,我有一个颤振问题。 我想尝试更新我的屏幕后 setState(() => { widgetScreenBuilder = screenWidgets[currentScreen] }); 在我的类别选择器已被调用。我已经尝试过了,所以我有一个主屏幕,它有我的类别选择器的功能,然后我想有一个功能,当前的屏幕/小部件。然后,我可以通过更改功能来更改选择器下方的屏幕/小部件。在我更改了功能(类别选择器下面的小部件)后,我找不到刷新页面/主屏幕主体的方法 我的主屏幕: import 'pa

我有一个颤振问题。 我想尝试更新我的屏幕后

setState(() => {
   widgetScreenBuilder = screenWidgets[currentScreen]
});
在我的类别选择器已被调用。我已经尝试过了,所以我有一个主屏幕,它有我的类别选择器的功能,然后我想有一个功能,当前的屏幕/小部件。然后,我可以通过更改功能来更改选择器下方的屏幕/小部件。在我更改了功能(类别选择器下面的小部件)后,我找不到刷新页面/主屏幕主体的方法

我的主屏幕:

import 'package:flutter/material.dart';
import 'package:app/widgets/categorySelector.dart';
import 'package:app/data/appData.dart';

class MainScreen extends StatefulWidget {
    @override
    _MainScreen createState() => _MainScreen();
}

class _MainScreen extends State<MainScreen> {
  @override
  Widget build(BuildContext context) {
    
    return Scaffold(
      backgroundColor: Theme.of(context).primaryColorDark,
      appBar: AppBar(
        backgroundColor: Theme.of(context).primaryColorDark,
        elevation: 0.0,
        title: Center(
          child: Text(
            "Tournaments",
            style: TextStyle(
              fontWeight: FontWeight.bold,
              fontSize: 26.0,
              letterSpacing: 1.1
              )
          ),
        ),
      ),
      body: Column(
        children: <Widget>[
          CategorySelector(),
          widgetScreenBuilder
        ],
      ),
    );
  }
}
我对应用程序开发、dart和Flifter是新手,因此任何帮助都将不胜感激!
谢谢我不能很好地理解你的问题, 但我认为你应该试试看
选中它:

将您的MainScreen类更改为:

class MainScreen extends StatefulWidget {
    @override
    _MainScreen createState() => _MainScreen();
  }
  
  class _MainScreen extends State<MainScreen> {
    @override
    Widget build(BuildContext context) {
      return Scaffold(
        backgroundColor: Theme.of(context).primaryColorDark,
        appBar: AppBar(
          backgroundColor: Theme.of(context).primaryColorDark,
          elevation: 0.0,
          title: Center(
            child: Text("Tournaments",
                style: TextStyle(
                    fontWeight: FontWeight.bold,
                    fontSize: 26.0,
                    letterSpacing: 1.1)),
          ),
        ),
        body: CategorySelector(), // delete column and just put CategorySelector()
      );
    }
  }
class CategorySelector extends StatefulWidget {
      @override
      _CategorySelectorState createState() => _CategorySelectorState();
    }
    
    class _CategorySelectorState extends State<CategorySelector> {
      final List<String> categories = [
        'All games',
        'New game',
        "New player",
        "Top players"
      ];
    
      @override
      Widget build(BuildContext context) {
        return Column(
          children: <Widget>[
            Container(
              height: 75.0,
              color: Theme.of(context).primaryColorDark,
              child: ListView.builder(
                scrollDirection: Axis.horizontal,
                itemCount: categories.length,
                itemBuilder: (BuildContext context, int index) {
                  return GestureDetector(
                    onTap: () {
                      if (currentScreen != index) {
                        currentScreen = index;
                        setState(
                          () =>
                              {widgetScreenBuilder = screenWidgets[currentScreen]},
                        );
                      }
                    },
                    child: Center(
                      child: Padding(
                        padding:
                            EdgeInsets.symmetric(horizontal: 20.0, vertical: 20.0),
                        child: Text(
                          categories[index],
                          style: TextStyle(
                              fontSize: 24.0,
                              fontWeight: FontWeight.bold,
                              letterSpacing: 1.2,
                              color: index == currentScreen
                                  ? Colors.white
                                  : Colors.white54),
                        ),
                      ),
                    ),
                  );
                },
              ),
            ),
            widgetScreenBuilder, // add widgetScreenBuilder here
          ],
        );
      }
    }
class主屏幕扩展StatefulWidget{
@凌驾
_MainScreen createState()=>\u MainScreen();
}
类_主屏幕扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景色:主题。背景色。原色深,
appBar:appBar(
背景色:主题。背景色。原色深,
标高:0.0,
标题:中心(
子项:文本(“锦标赛”,
样式:TextStyle(
fontWeight:fontWeight.bold,
字体大小:26.0,
字母间距:1.1),
),
),
body:CategorySelector(),//删除列并仅放置CategorySelector()
);
}
}
并将您的CategorySelector类更改为:

class MainScreen extends StatefulWidget {
    @override
    _MainScreen createState() => _MainScreen();
  }
  
  class _MainScreen extends State<MainScreen> {
    @override
    Widget build(BuildContext context) {
      return Scaffold(
        backgroundColor: Theme.of(context).primaryColorDark,
        appBar: AppBar(
          backgroundColor: Theme.of(context).primaryColorDark,
          elevation: 0.0,
          title: Center(
            child: Text("Tournaments",
                style: TextStyle(
                    fontWeight: FontWeight.bold,
                    fontSize: 26.0,
                    letterSpacing: 1.1)),
          ),
        ),
        body: CategorySelector(), // delete column and just put CategorySelector()
      );
    }
  }
class CategorySelector extends StatefulWidget {
      @override
      _CategorySelectorState createState() => _CategorySelectorState();
    }
    
    class _CategorySelectorState extends State<CategorySelector> {
      final List<String> categories = [
        'All games',
        'New game',
        "New player",
        "Top players"
      ];
    
      @override
      Widget build(BuildContext context) {
        return Column(
          children: <Widget>[
            Container(
              height: 75.0,
              color: Theme.of(context).primaryColorDark,
              child: ListView.builder(
                scrollDirection: Axis.horizontal,
                itemCount: categories.length,
                itemBuilder: (BuildContext context, int index) {
                  return GestureDetector(
                    onTap: () {
                      if (currentScreen != index) {
                        currentScreen = index;
                        setState(
                          () =>
                              {widgetScreenBuilder = screenWidgets[currentScreen]},
                        );
                      }
                    },
                    child: Center(
                      child: Padding(
                        padding:
                            EdgeInsets.symmetric(horizontal: 20.0, vertical: 20.0),
                        child: Text(
                          categories[index],
                          style: TextStyle(
                              fontSize: 24.0,
                              fontWeight: FontWeight.bold,
                              letterSpacing: 1.2,
                              color: index == currentScreen
                                  ? Colors.white
                                  : Colors.white54),
                        ),
                      ),
                    ),
                  );
                },
              ),
            ),
            widgetScreenBuilder, // add widgetScreenBuilder here
          ],
        );
      }
    }
class CategorySelector扩展StatefulWidget{
@凌驾
_CategorySelectorState createState()=>U CategorySelectorState();
}
类_CategorySelectorState扩展状态{
最终名单类别=[
“所有游戏”,
“新游戏”,
“新玩家”,
“顶级球员”
];
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
容器(
身高:75.0,
颜色:主题。背景。原色深,
子项:ListView.builder(
滚动方向:轴水平,
itemCount:categories.length,
itemBuilder:(构建上下文,int索引){
返回手势检测器(
onTap:(){
如果(当前屏幕!=索引){
当前屏幕=索引;
设定状态(
() =>
{widgetScreenBuilder=screenWidgets[currentScreen]},
);
}
},
儿童:中心(
孩子:填充(
衬垫:
边缘组。对称(水平:20.0,垂直:20.0),
子:文本(
类别[索引],
样式:TextStyle(
字体大小:24.0,
fontWeight:fontWeight.bold,
字母间距:1.2,
颜色:索引==currentScreen
?颜色:白色
:颜色。白色54),
),
),
),
);
},
),
),
widgetScreenBuilder,//在此处添加widgetScreenBuilder
],
);
}
}
您的代码现在工作正常:)

setState()只能在自己的类中进行更改


我没有正确阅读问题,但我认为您正在尝试从CategorySelector更新主屏幕。如果是这样的话,这应该回答你: