之前學(xué)習(xí)了復(fù)選框和開(kāi)關(guān),還有個(gè)單選框,這里看一下。
Radio
還是先看constructor
Radio<T>({
Key key,
@required T value,
@required T groupValue,
@required ValueChanged<T> onChanged,
Color activeColor,
MaterialTapTargetSize materialTapTargetSize
})
這個(gè)Widget的constructor很簡(jiǎn)單,這幾個(gè)屬性前邊都介紹過(guò),怎么用看demo。
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 new MaterialApp(
home: Scaffold(
body: RadioDemo()
)
);
}
}
enum SingingCharacter { lafayette, jefferson }
class RadioDemo extends StatefulWidget {
@override
_RadioDemoState createState() => new _RadioDemoState();
}
class _RadioDemoState extends State<RadioDemo> {
SingingCharacter _character = SingingCharacter.lafayette;
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.only(top: 20.0),
child: Column(
children: <Widget>[
Radio(
value: SingingCharacter.lafayette,
groupValue: _character,
activeColor: Colors.red,
onChanged: (SingingCharacter value) {
print(value);
setState(() {
_character = value;
});
},
),
Radio(
value: SingingCharacter.jefferson,
groupValue: _character,
onChanged: (SingingCharacter value) {
print(value);
setState(() {
_character = value;
});
},
)
]
)
);
}
}
這里有點(diǎn)陌生的東西,接下來(lái)看一下。
enum
枚舉類(lèi)型。
官方文檔挺詳細(xì)的http://dart.goodev.org/guides/language/language-tour
這里就不詳細(xì)說(shuō)了
Column
這里簡(jiǎn)單介紹一下,后邊再詳細(xì)說(shuō),這個(gè)Widget可以簡(jiǎn)單的理解成列表類(lèi)似于html里邊的ul,子節(jié)點(diǎn)是children一組Widget。
T
看constructor的時(shí)候應(yīng)該就發(fā)現(xiàn)了,多了個(gè)<T>,這個(gè)是泛型,<>里邊是數(shù)據(jù)類(lèi)型,例如想定義一個(gè)List里邊只能放String,可以這樣寫(xiě)
var str = new List<String>();
這里T是備用類(lèi)型,實(shí)際上就是一個(gè)占位符。
RadioListTile
const RadioListTile<T>({
Key key,
@required T value,
@required T groupValue,
@required ValueChanged<T> onChanged,
Color activeColor,
Widget title,
Widget subtitle,
bool isThreeLine: false,
bool dense,
Widget secondary,
bool selected: false,
ListTitleControlAffinity controlAffinity: ListTileControlAffinity.platform
})
demo
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 new MaterialApp(
home: Scaffold(
body: RadioDemo()
)
);
}
}
enum SingingCharacter { lafayette, jefferson }
class RadioDemo extends StatefulWidget {
@override
_RadioDemoState createState() => new _RadioDemoState();
}
class _RadioDemoState extends State<RadioDemo> {
SingingCharacter _character = SingingCharacter.lafayette;
@override
Widget build(BuildContext context) {
return Center(
child: Column(
children: <Widget>[
RadioListTile<SingingCharacter>(
value: SingingCharacter.lafayette,
title: Text('lafayette'),
groupValue: _character,
activeColor: Colors.red,
onChanged: (SingingCharacter value) {
print(value);
setState(() {
_character = value;
});
},
),
RadioListTile<SingingCharacter>(
value: SingingCharacter.jefferson,
title: Text('jefferson'),
groupValue: _character,
onChanged: (SingingCharacter value) {
print(value);
setState(() {
_character = value;
});
},
)
]
)
);
}
}
和單獨(dú)的Radio相比基本上沒(méi)啥區(qū)別。
相對(duì)于Radio多出來(lái)的屬性看這里:flutter筆記(七)-----復(fù)選框CheckBox、CheckboxListTile
CheckboxList里邊已經(jīng)詳細(xì)說(shuō)過(guò)了。