无法使用setState

时间:2019-03-17 14:19:55

标签: dart flutter

在我的项目中,我使用Sub indicators() lastrowlist1 = Range("C1000000").End(xlUp).Row lastrowlist2 = Range("K1000000").End(xlUp).Row For i = 5 To lastrowlist1 Range("C" & i).Value = findval For j = 5 To lastrowlist2 If Range("K" & j).Value <> Range("C" & i).Value Then Range("K" & j).Interior.ColorIndex = 4 Range("C" & i).Interior.ColorIndex = 4 Else Range("K" & j).Interior.ColorIndex = 2 Range("C" & i).Interior.ColorIndex = 2 End If Next j Next i End Sub 在两个页面之间切换。 开关的代码是标准代码,使用index和setState在两个页面之间切换,并使用ButtomNavigationBar数组访问每个页面。

(取自Widget

  

最终Scaffold <List>正文= [     Widget(),     firstPage(),   ];

     

body:body [_currentIndex],

,在我的secondPage中,我想用FAB制作一个secondPage(),并在每次点击时添加一个图块。 我要保证,我需要使用setState更新ListView.Builder,但这不是正确的继承方式 我做错了什么,我该如何纠正?

ItemCounter

enter image description here

3 个答案:

答案 0 :(得分:1)

您正在使用无状态窗口小部件。您的secondpage()应该是一个有状态的Widget。解决此问题的最简单方法是使用类而不是函数:

class SecondPage extends StatefulWidget {
  @override
  _SecondPageState createState() => _SecondPageState();
}

class _SecondPageState extends State<SecondPage> {
 int _itemCount = 5;
  return Scaffold(
    body: ListView.builder(
      itemCount: _itemCount,
      itemBuilder: (context, int index){
        return Padding(
          padding: EdgeInsets.all(3.0),
          child: Card(
            child: Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text(index.toString(), style: TextStyle(fontSize: 30.0),
              textAlign: TextAlign.center,),
            ),
          ) ,
        );
      },
    ),
    floatingActionButton: FloatingActionButton(
      onPressed:(){
        setState((){
            _itemCount++;
        });
      },
    child: Icon(Icons.add),
    ),
  );
}

并在列表中:

final List<Widget> body = [ new firstPage(), new secondPage(), ];

答案 1 :(得分:0)

解决了。只需将Widget函数替换为StafulWidget

答案 2 :(得分:0)

将_itemCount变量设置为全局变量,然后使用setState增加_itemCount值

int _itemCount = 5;
Widget build(BuildContext context) {
return Scaffold(
  body: ListView.builder(
    .....
  ),
  floatingActionButton: FloatingActionButton(
    onPressed:(){
      setState(() {
        _itemCount++;
      });
    },
    child: Icon(Icons.add),),
);;

}