如何简化这些变量?

问题描述

import 'package:Flutter/material.dart';

class Example extends StatefulWidget {
  @override
  _ExampleState createState() => _ExampleState();
}

class _ExampleState extends State<Example> {
  GlobalKey _keyRed = GlobalKey();
  GlobalKey _keyPurple = GlobalKey();
  GlobalKey _keyGreen = GlobalKey();
  Offset positionGreen;

  _getSizes(){
    RenderBox renderBoxRed = _keyRed.currentContext.findRenderObject();
    Size sizeRed = renderBoxRed.size;
    print("red size is: $sizeRed");

    RenderBox renderBoxPurple = _keyRed.currentContext.findRenderObject();
    Size sizePurple = renderBoxPurple.size;
    print("purple size is: $sizePurple");


    RenderBox renderBoxGreen = _keyGreen.currentContext.findRenderObject();
    Size sizeGreen = renderBoxGreen.size;
    print("green size is: $sizeGreen");
  }

  _getPositions(){
    final RenderBox renderBoxRed = _keyRed.currentContext.findRenderObject();
    final positionRed = renderBoxRed.localToGlobal(Offset.zero);
    print("red position is: $positionRed");

    final RenderBox renderBoxPurple = _keyPurple.currentContext.findRenderObject();
    final positionPurple = renderBoxPurple.localToGlobal(Offset.zero);
    print("purple position is: $positionPurple");

    final RenderBox renderBoxGreen = _keyGreen.currentContext.findRenderObject();
    positionGreen = renderBoxGreen.localToGlobal(Offset.zero);
    print("green position is: $positionGreen");
  }


  @override
  Widget build(BuildContext context) {
    double limit = MediaQuery.of(context).size.height*.75;

    return Scaffold(
      floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,floatingActionButton: FloatingActionButton(
        backgroundColor: Colors.orange,onpressed: (){
          _getSizes();
          _getPositions();

          print("\npositionGreen in dy is ${positionGreen.dy} and limit is $limit");

          if(positionGreen.dy > limit){
            print("screen resizes");
          } else {
            print("screen doesn't resize");
          }

        },),body: SingleChildScrollView(
        child: Column(
          children: [
            Container(
              height: 400,key: _keyRed,color: Colors.red,Container(
              height: 600,key: _keyPurple,color: Colors.purple,Container(
              height: 800,key: _keyGreen,color: Colors.green,],);
  }
}

我尝试了下面的代码,但得到了意想不到的结果。

$Feed1 = new SimplePie();
$Feed2 = new SimplePie();
$Feed3 = new SimplePie();
$Feed4 = new SimplePie();

$Feed1->enable_cache(false);
$Feed2->enable_cache(false);
$Feed3->enable_cache(false);
$Feed4->enable_cache(false);

解决方法

您可以使用函数和数组。创建一个数组来保存所有实例并创建一个函数来完成所有重复性工作。

function createSimplePies(int $numberOfPies,bool $enableCache): array
{
    $pies = [];
    for ($i = 0; $i < $numberOfPies; $i++) {
        $pie = new SimplePie();
        $pie->enable_cache($enableCache);
        $pies[] = $pie;
    }

    return $pies;
}

$feeds = createSimplePies(4,false);

然后你可以很容易地通过数组索引引用任何实例:

$feeds[0]->someMethod(...)