首页 > 解决方案 > 容器颤动中的调用方法

问题描述

我有一个名为 A.dart 的课程,因为我使用的是 Interprogressbar,如下所示

new Container(
            margin: const EdgeInsets.fromLTRB(0, 10, 0, 0),
            child: IntervalProgressBar(
                direction: IntervalProgressDirection.horizontal,
                max: count,
                progress: count1,
                intervalSize: 2,
                size: Size(600, 10),
                highlightColor: Colors.pink,
                defaultColor: Colors.grey,
                intervalColor: Colors.transparent,
                intervalHighlightColor: Colors.transparent,
                reverse: false,
                radius: 0)),

一旦用户单击一个按钮,我将导航到另一个类,从 A.dart 到一个名为 B.dart 的类。一旦在 B.dart 类中完成使用过程,我将弹出 B.dart 类。A.dart 将再次对用户可见。所以我的问题是,一旦用户从 B.dart 到 A,dart,如何使用更新的值重新启动 IntervalProgressBar。

标签: flutteronresume

解决方案


您可以在下面复制粘贴运行完整代码然后
您可以await Navigator.push调用setState

void _gotoB() async {
    String parameter = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => RouteB()),
    );

    setState(() {
      count1 = int.tryParse(parameter);
    });
  }

...  
  
RaisedButton(
            child: Text('Go back'),
            onPressed: () {
              Navigator.pop(context, _textEditingController.text);
            },
          ),  

工作演示

在此处输入图像描述

完整代码

import 'package:flutter/material.dart';
import 'package:intervalprogressbar/intervalprogressbar.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int count = 10;
  int count1 = 3;

  void _gotoB() async {
    String parameter = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => RouteB()),
    );

    setState(() {
      count1 = int.tryParse(parameter);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
                margin: const EdgeInsets.fromLTRB(0, 10, 0, 0),
                child: IntervalProgressBar(
                    direction: IntervalProgressDirection.horizontal,
                    max: count,
                    progress: count1,
                    intervalSize: 2,
                    size: Size(600, 10),
                    highlightColor: Colors.pink,
                    defaultColor: Colors.grey,
                    intervalColor: Colors.transparent,
                    intervalHighlightColor: Colors.transparent,
                    reverse: false,
                    radius: 0)),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _gotoB,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

class RouteB extends StatefulWidget {
  @override
  _RouteBState createState() => _RouteBState();
}

class _RouteBState extends State<RouteB> {
  TextEditingController _textEditingController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
          body: Column(
        children: [
          TextField(
            controller: _textEditingController,
          ),
          RaisedButton(
            child: Text('Go back'),
            onPressed: () {
              Navigator.pop(context, _textEditingController.text);
            },
          ),
        ],
      )),
    );
  }
}

推荐阅读