在modalBottomSheet

时间:2019-09-07 07:15:25

标签: flutter dart

我有一个主页,一个有状态的小部件和一个modalBottomSheet。 当我按下modalBottomSheet中的按钮时,我想在有状态小部件中更改一个变量。

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String variable;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        child: Text('Show Modal Bottom Sheet'),
        onPressed: (){
          showModalBottomSheet(
                  context: context,
                  builder: (context){
                    return Container(
                      child: RaisedButton(
                        child: Text('Change Variable in ListWidget'),
                        onPressed: (){
                          /// ??
                        },
                      ),
                    );
                  }
                );
        },
      ),
      body: Center(
        child: ListView.builder(
          itemCount: 5,
          itemBuilder: (context, index){
            return ListWidget();
          },
        )
      ),
    );
  }
}

当在modalBottomSheet中按下按钮时,我想在此ListWidget中将此变量分配新值。

class ListWidget extends StatefulWidget {
  @override
  _ListWidgetState createState() => _ListWidgetState();
}

class _ListWidgetState extends State<ListWidget> {

  String variable = 'Old Value';

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text(variable),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

使用变量将值传递到第二类文件,然后在主类中更改该变量的值

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String variable;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        child: Text('Show Modal Bottom Sheet'),
        onPressed: (){
          showModalBottomSheet(
                  context: context,
                  builder: (context){
                    return Container(
                      child: RaisedButton(
                        child: Text('Change Variable in ListWidget'),
                        onPressed: (){
                          variable = "new Value";
                        },
                      ),
                    );
                  }
                );
        },
      ),
      body: Center(
        child: ListView.builder(
          itemCount: 5,
          itemBuilder: (context, index){
            return ListWidget(variable : variable);
          },
        )
      ),
    );
  }
}

类文件2的代码

class ListWidget extends StatefulWidget {
  String variable;
  ListWidget({this.variable='Old Value'});
  @override
  _ListWidgetState createState() => _ListWidgetState(variable:this.variable);
}

class _ListWidgetState extends State<ListWidget> {

  String variable = 'Old Value';
  _ListWidgetState({this.variable});

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text(variable),
    );
  }
}