はじめに
前回はFlutter Widget of the Weekの「#52 ListView」、「#53 ListTile」、「#54 Container」を紹介しました。
今回はその続きで「#55 SelectableText」、「#56 DataTable」、「#57 Slider,RangeSlider,CupertinoSlider」の3つです。
前回の記事はこちら
Flutter Widget of the Week
環境
- Flutter 3.0.5
記事にした時点でのバージョンです。GitHubに公開しているのは常に最新の安定版(stable)を使う予定です。
#55 SelectableText
SelectableTextとは
その名の通り、選択できるテキストの際に利用するウィジェットです。
通常のTextウィジェットではコピー等するための選択ができませんがSelectableTextではそれができるようになります。
サンプルコード
import 'package:flutter/material.dart';
class SamplePage055 extends StatelessWidget {
const SamplePage055({
super.key,
});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('SelectableText'),
centerTitle: true,
),
body: SafeArea(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
Text('選択できないテキスト'),
SizedBox(height: 100),
SelectableText('選択できるテキスト'),
],
),
),
),
);
}
}
結果
動画
公式リファレンス
SelectableText class - material library - Dart API
API docs for the SelectableText class from the material library, for the Dart programming language.
#56 DataTable
DataTableとは
エクセルのようなテーブル表示をさせたい場合に使うウィジェットです。
セルの内容に応じて列のサイズを自動調整してくれたりします。
サンプルコード
import 'package:flutter/material.dart';
class SamplePage056 extends StatelessWidget {
const SamplePage056({
super.key,
});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('DataTable'),
centerTitle: true,
),
body: SafeArea(
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: DataTable(
sortColumnIndex: 1,
columns: const [
DataColumn(
label: Text('年'),
numeric: true,
),
DataColumn(
label: Text('試合'),
),
DataColumn(
label: Text('打席'),
),
DataColumn(
label: Text('打率'),
),
DataColumn(
label: Text('本塁打'),
),
],
rows: const [
DataRow(
cells: [
DataCell(
Text('2021'),
),
DataCell(
Text('155'),
),
DataCell(
Text('639'),
),
DataCell(
Text('0.257'),
),
DataCell(
Text('46'),
),
],
),
DataRow(
cells: [
DataCell(
Text('2020'),
),
DataCell(
Text('44'),
),
DataCell(
Text('175'),
),
DataCell(
Text('0.190'),
),
DataCell(
Text('7'),
),
],
),
],
),
),
),
);
}
}
結果
動画
公式リファレンス
DataTable class - material library - Dart API
API docs for the DataTable class from the material library, for the Dart programming language.
#57 Slider,RangeSlider,CupertinoSlider
Slider,RangeSlider,CupertinoSliderとは
ある範囲から値を選択できるスライダーが実装できるのがSliderウィジェットです。
RangeSliderは最初と最後の範囲が決められるスライダーで、CupertinoSliderはiOSデザインのスライダーが実装できます。
サンプルコード
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class SamplePage057 extends StatefulWidget {
const SamplePage057({
super.key,
});
@override
State<SamplePage057> createState() => _SamplePage057State();
}
class _SamplePage057State extends State<SamplePage057> {
double _sliderValue = 50;
RangeValues _rangeValues = const RangeValues(25, 75);
double _cupertinoSliderValue = 50;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Slider & RangeSlider & CupertinoSlider'),
centerTitle: true,
),
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('Slider'),
Slider(
value: _sliderValue,
max: 100,
onChanged: (value) {
setState(() {
_sliderValue = value;
});
},
divisions: 100,
label: '${_sliderValue.toInt()}',
),
const SizedBox(height: 20),
const Text('RangeSlider'),
RangeSlider(
values: _rangeValues,
max: 100,
onChanged: (values) {
setState(() {
_rangeValues = values;
});
},
divisions: 100,
labels: RangeLabels(
'${_rangeValues.start.toInt()}',
'${_rangeValues.end.toInt()}',
),
),
const SizedBox(height: 20),
const Text('CupertinoSlider'),
CupertinoSlider(
value: _cupertinoSliderValue,
max: 100,
onChanged: (value) {
setState(() {
_cupertinoSliderValue = value;
});
},
divisions: 100,
),
],
),
),
);
}
}
結果
動画
公式リファレンス
Slider class - material library - Dart API
API docs for the Slider class from the material library, for the Dart programming language.
RangeSlider class - material library - Dart API
API docs for the RangeSlider class from the material library, for the Dart programming language.
CupertinoSlider class - cupertino library - Dart API
API docs for the CupertinoSlider class from the cupertino library, for the Dart programming language.
さいごに
SelectableTextは今まで使う機会がなかったので覚えておきたいです。
おすすめ参考書
リンク
GitHub - nobushiueshi/flutter_widget_of_the_week
Contribute to nobushiueshi/flutter_widget_of_the_week development by creating an account on GitHub.
コメント