内置在不同文件/类中的访问变量

时间:2020-05-20 21:51:46

标签: flutter dart

我有file.a,其中包含一个数组:

final _likes = <String>[];

根据用户选择的答案,将项目添加到此数组中。

然后,我希望能够通过按一下按钮向用户显示数组中的项目。

问题在于,我希望用户按下的按钮是在file.b中定义的(因为图标在AppBar上)。

当变量file.b驻留在_likes中时,如何赋予file.a查看变量file.a并访问其中的数据的能力?

import 'package:flutter/material.dart'; import './main.dart'; class Images extends StatefulWidget { @override _ImagesState createState() => _ImagesState(); } class _ImagesState extends State<Images> with SingleTickerProviderStateMixin { AnimationController _controller; Animation _animation; @override // ignore: must_call_super void initState() { _controller = AnimationController( vsync: this, duration: Duration(seconds: 1), ); _animation = Tween( begin: 0.0, end: 1.0, ).animate(_controller); } @override dispose() { _controller.dispose(); super.dispose(); } int index = 0; final likes = <String>[]; @override Widget build(BuildContext context) { _controller.forward(); return GestureDetector( onHorizontalDragEnd: (DragEndDetails dragEndDetails) { if (dragEndDetails.primaryVelocity == 0) return; if (dragEndDetails.primaryVelocity.compareTo(0) == -1) setState(() { _controller.reset(); dateIdeas.removeAt(index); }); else setState(() { _controller.reset(); likes.add(dateIdeas[index]['Description']); dateIdeas.removeAt(index); }); }, child: new Column( children: <Widget>[ Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ Column( children: <Widget>[ Padding( padding: const EdgeInsets.only(left: 8.0, right: 8.0), child: FadeTransition( opacity: _animation, child: Container( decoration: BoxDecoration( border: Border.all( color: Colors.pink[200], width: 7, ), borderRadius: BorderRadius.circular(9), ), child: new Container( child: new Image.asset(dateIdeas[index]['Image']), ), ), ), ), Container( alignment: Alignment.topCenter, child: Text(dateIdeas[index]['Description'], style: TextStyle( fontSize: 30, color: Colors.black, fontFamily: 'IndieFlower', )), ), ], ), ], ) ], ), ); } }

file.b

import 'package:flutter/material.dart'; import './surprises.dart'; import './images.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'SO Surprises', theme: ThemeData( primaryColor: Colors.pink[200], ), home: MyHomePage(title: ''), ); } } 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 ideaCount = 1; int _swipeCount = 0; void _swipe() { setState(() { _swipeCount++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( actions: <Widget>[ Container( height: 150, width: 150, child: IconButton( icon: Image.asset('assets/images/SO.png'), padding: const EdgeInsets.only(right: 40.0, top: 10, bottom: 10.0), ), ), GestureDetector( onTap: () => print(Images.likes), child: Padding( padding: const EdgeInsets.only(right: 10.0), child: Icon( Icons.star, color: Colors.white,// add custom icons also ), ), ), ], ), body: _swipeCount == 0 ? Stack( children: <Widget>[ GestureDetector( onHorizontalDragEnd: (DragEndDetails dragEndDetails) { if(dragEndDetails.primaryVelocity == 0) return; _swipe(); }, child: Container( color: Colors.transparent, alignment: Alignment.center, child: Text("Swipe to get started! $_swipeCount"), ), ), ], ) : Template(), ); } }

 //so lets say i have an Animal:
        public Animal()
        {
            name = null;
            age = 0;
            mass = 0;
        }

1 个答案:

答案 0 :(得分:1)

通过在您的likes列表前面加上下划线(_),这意味着您也使该方法也只能在其所属的类内部访问。

要在程序的其他部分中使用该方法,请删除下划线(_)。

删除_后,您将使likes列表可从代码的其他部分访问。