子小部件发送动态数据

时间:2019-12-05 11:20:06

标签: flutter

我有一个两页的应用程序。在第一个页面上,我正在显示一个UUID,它每1秒更改一次。它使用listview显示。用户单击列表视图后,将转到第二页并显示该卡上的数据。

应该是正在更改的UUID。但显示的数据是静态UUID。如何将第1页上更改的数据传递到第2页上?

<property expression="base64Decode(get-property('registry','conf:customresource/test-file.json'))" name="JsonContent" scope="default" type="STRING"/>
<payloadFactory description="Build Payload Response" media-type="json">
  <format>$1</format>
  <args>
    <arg evaluator="xml" expression="$ctx:JsonContent" xmlns:payload="http://ws.apache.org/commons/ns/payload"/>
    </args>
</payloadFactory>
<property expression="json-eval($.mappings.mapping.ep_1)" name="endpointUrl" scope="default" type="STRING"/>

https://imgur.com/VqRfcZY

    import 'dart:async';
import 'package:uuid/uuid.dart';
import 'package:uuid/uuid_util.dart';

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

List<EuropeanCountries> europeanCountries = [];

class EuropeanCountries {
  String myText;

  String myUuid;

  EuropeanCountries({
    this.myText,
    this.myUuid,
  });
}

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 _counter = 0;
  int _perPage = 50;
  ScrollController _myScrollController = ScrollController();

  void _incrementCounter() async {
    const ThreeSec = const Duration(seconds: 1);
    this._counter++;
    europeanCountries.insert(
        0,
        EuropeanCountries(
          myText: this._counter.toString(),
        ));
    print(europeanCountries[0].myText);

    setState(() {});
  }

  void getMoreData() {
    print('adding More Product ');

    europeanCountries.add(EuropeanCountries(
      myText: this._counter.toString(),
    ));
    //europeanCountries.insert(0, EuropeanCountries(myText:this._counter.toString(), myButtonText: "", myColor: Colors.blue));
    setState(() {});
  }

  void generateUUID() async {
    var uuid = Uuid();

    for (int i = 0; i < 6000; i++) {
      await new Future.delayed(new Duration(milliseconds: 1000));
      for (EuropeanCountries currCountry in europeanCountries) {
        currCountry.myUuid = uuid.v1();
      }
      setState(() {});
    }
  }

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    generateUUID();

    _myScrollController.addListener(() {
      double maxscroll = _myScrollController.position.maxScrollExtent;
      double currentScroll = _myScrollController.position.pixels;
      double delta = MediaQuery.of(context).size.height * 0.25;
      print("mac Scroll Controller - " + maxscroll.toString());
      print("Current  Scroll Controller - " + currentScroll.toString());
      print("delta  Scroll Controller - " + delta.toString());

      if ((maxscroll - currentScroll) < delta) {
        getMoreData();
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: _myListView(context),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

  Widget _myListView(BuildContext context) {
    // backing data

    return Container(
      child: europeanCountries.length == 0
          ? Center(
              child: Text('No Product to Display'),
            )
          : ListView.builder(
              controller: _myScrollController,
              itemCount: europeanCountries.length,
              reverse: false,
              itemBuilder: (context, index) {
                return myContainer(index: index);
              },
            ),
    );
  }
}

class myContainer extends StatefulWidget {
  final int index;
  const myContainer({Key key, this.index}) : super(key: key);

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

class _myContainerState extends State<myContainer> {
  @override
  Widget build(BuildContext context) {
    return Container(
      height: 120,
      decoration: BoxDecoration(
        border: Border.all(color: Colors.blue[700]),
        shape: BoxShape.rectangle,
        borderRadius: BorderRadius.all(Radius.circular(8)),
      ),
      margin: EdgeInsets.all(20),
      child: Column(
        children: <Widget>[
          Text(europeanCountries[widget.index].myText),
          SizedBox(
            height: 15,
          ),
          RaisedButton(
            child: Text('Detail'),
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                    builder: (context) => SecondRoute(
                          myCountry: europeanCountries[widget.index],
                        )),
              );
            },
            color: Colors.blue[700],
            textColor: Colors.white,
            padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
            splashColor: Colors.black,
          ),
          Text(europeanCountries[widget.index].myUuid != null
              ? europeanCountries[widget.index].myUuid
              : 'Default')
        ],
      ),
    );
  }
}

class SecondRoute extends StatefulWidget {
  final EuropeanCountries myCountry;

  const SecondRoute({Key key, this.myCountry}) : super(key: key);

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

class _SecondRouteState extends State<SecondRoute> {
  @override
  void didUpdateWidget(SecondRoute oldWidget) {
    // TODO: implement didUpdateWidget
    super.didUpdateWidget(oldWidget);
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Second Route"),
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () {
            Navigator.pop(context);
          },
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Center(
                child: Text(widget.myCountry.myUuid != null
                    ? widget.myCountry.myText
                    : 'default'),
              ),
              SizedBox(height: 15),
              Center(
                child: Text(widget.myCountry.myUuid != null
                    ? widget.myCountry.myUuid
                    : 'default'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

0 个答案:

没有答案