class 이름과 동일한 string 값이 있다.
class를 불러올때, 이 string 값을 class 이름으로 사용하고 싶다.
매우 간단할 줄 알았는데, 그냥 하면 안된다. (당연한건가..)
더 재밌는건, 패키지 중에, 이걸 또 변환해 주는 패키지가 있다는 점이다.
ClassBuilder 패키지 사용 예시이다.
나의 경우는, MaterialApp 부분에 route를 사용할때, 이름을 사전정의해야하는데,
이게 또 귀찮아서...
불러올 이름들을 stiring리스트로 만들고 불러오기 했다.
발영어는 조심하시길..
아주 ~~~ 약간 덜 귀찮게 해주는 신박한 패키지.
///
/// ##string 값을 class 이름으로 사용하기##
/// ClassBuilder Package 사용
///
/// class 이름을 list<string> 으로 선언
/// 초기화 할때, class builder 사용
/// ClassBuilder.fromString으로 사용
///
import 'package:class_builder/class_builder.dart';
import 'package:flutter/material.dart';
main() => runApp(MaterialApp(
home: Main(),
));
class Main extends StatefulWidget {
@override
_MainState createState() => _MainState();
}
class _MainState extends State<Main> {
final List<String> classList = ['SecondPage1', 'SecondPage2'];
@override
void initState() {
super.initState();
ClassBuilder.register(() => SecondPage1(classList));
ClassBuilder.register(() => SecondPage2());
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
FlatButton(
child: Text('go'),
onPressed: () => Navigator.of(context).push(MaterialPageRoute(
builder: (context) => ClassBuilder.fromString(classList[0]))),
),
FlatButton(
child: Text('go'),
onPressed: () => Navigator.of(context).push(MaterialPageRoute(
builder: (context) => ClassBuilder.fromString(classList[1]))),
),
],
),
),
);
}
}
class SecondPage1 extends StatelessWidget {
final List<String> classList;
SecondPage1(this.classList);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: Container(
width: 200,
height: 200,
color: Colors.red,
child: Text('${classList[0]}'),
),
),
);
}
}
class SecondPage2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: Container(
width: 200,
height: 200,
color: Colors.blue,
),
),
);
}
}