고원빈

[frontend] bluetooth 연결 작업 중

...@@ -39,7 +39,7 @@ android { ...@@ -39,7 +39,7 @@ android {
39 defaultConfig { 39 defaultConfig {
40 // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 40 // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
41 applicationId "com.example.Smart_Medicine_Box" 41 applicationId "com.example.Smart_Medicine_Box"
42 - minSdkVersion 16 42 + minSdkVersion 19
43 targetSdkVersion 29 43 targetSdkVersion 29
44 versionCode flutterVersionCode.toInteger() 44 versionCode flutterVersionCode.toInteger()
45 versionName flutterVersionName 45 versionName flutterVersionName
......
...@@ -238,7 +238,7 @@ Widget ineerInformationpage(BuildContext context) { ...@@ -238,7 +238,7 @@ Widget ineerInformationpage(BuildContext context) {
238 children: <Widget>[ 238 children: <Widget>[
239 Container( 239 Container(
240 width: size.width * 0.43, 240 width: size.width * 0.43,
241 - height: size.width * 0.43, 241 + height: size.width * 0.45,
242 margin: const EdgeInsets.all(5.0), 242 margin: const EdgeInsets.all(5.0),
243 padding: const EdgeInsets.fromLTRB(10, 5, 10, 10), 243 padding: const EdgeInsets.fromLTRB(10, 5, 10, 10),
244 decoration: BoxDecoration( 244 decoration: BoxDecoration(
...@@ -265,7 +265,7 @@ Widget ineerInformationpage(BuildContext context) { ...@@ -265,7 +265,7 @@ Widget ineerInformationpage(BuildContext context) {
265 ), 265 ),
266 Container( 266 Container(
267 width: size.width, 267 width: size.width,
268 - height: size.height * 0.14, 268 + height: size.height * 0.145,
269 child: Center( 269 child: Center(
270 child: Row( 270 child: Row(
271 mainAxisAlignment: MainAxisAlignment.center, 271 mainAxisAlignment: MainAxisAlignment.center,
...@@ -276,7 +276,7 @@ Widget ineerInformationpage(BuildContext context) { ...@@ -276,7 +276,7 @@ Widget ineerInformationpage(BuildContext context) {
276 textScaleFactor: 1.0, 276 textScaleFactor: 1.0,
277 style: TextStyle( 277 style: TextStyle(
278 color: Colors.white, 278 color: Colors.white,
279 - fontSize: 80, 279 + fontSize: 76,
280 fontFamily: 'NotoSansKR', 280 fontFamily: 'NotoSansKR',
281 fontWeight: FontWeight.w800), 281 fontWeight: FontWeight.w800),
282 ), 282 ),
...@@ -299,7 +299,7 @@ Widget ineerInformationpage(BuildContext context) { ...@@ -299,7 +299,7 @@ Widget ineerInformationpage(BuildContext context) {
299 ), 299 ),
300 Container( 300 Container(
301 width: size.width * 0.43, 301 width: size.width * 0.43,
302 - height: size.width * 0.43, 302 + height: size.width * 0.45,
303 margin: const EdgeInsets.all(5.0), 303 margin: const EdgeInsets.all(5.0),
304 padding: const EdgeInsets.fromLTRB(10, 5, 10, 10), 304 padding: const EdgeInsets.fromLTRB(10, 5, 10, 10),
305 decoration: BoxDecoration( 305 decoration: BoxDecoration(
...@@ -377,7 +377,7 @@ Widget ineerInformationpage(BuildContext context) { ...@@ -377,7 +377,7 @@ Widget ineerInformationpage(BuildContext context) {
377 children: <Widget>[ 377 children: <Widget>[
378 Container( 378 Container(
379 width: size.width * 0.43, 379 width: size.width * 0.43,
380 - height: size.width * 0.43, 380 + height: size.width * 0.45,
381 margin: const EdgeInsets.all(5.0), 381 margin: const EdgeInsets.all(5.0),
382 padding: const EdgeInsets.fromLTRB(10, 5, 10, 10), 382 padding: const EdgeInsets.fromLTRB(10, 5, 10, 10),
383 decoration: BoxDecoration( 383 decoration: BoxDecoration(
...@@ -438,7 +438,7 @@ Widget ineerInformationpage(BuildContext context) { ...@@ -438,7 +438,7 @@ Widget ineerInformationpage(BuildContext context) {
438 ), 438 ),
439 Container( 439 Container(
440 width: size.width * 0.43, 440 width: size.width * 0.43,
441 - height: size.width * 0.43, 441 + height: size.width * 0.45,
442 margin: const EdgeInsets.all(5.0), 442 margin: const EdgeInsets.all(5.0),
443 padding: const EdgeInsets.fromLTRB(10, 5, 10, 10), 443 padding: const EdgeInsets.fromLTRB(10, 5, 10, 10),
444 decoration: BoxDecoration( 444 decoration: BoxDecoration(
......
...@@ -161,7 +161,7 @@ class _SettingPageState extends State<SettingPage> { ...@@ -161,7 +161,7 @@ class _SettingPageState extends State<SettingPage> {
161 )); 161 ));
162 }, 162 },
163 child: Text( 163 child: Text(
164 - ' 정보 수정', 164 + '회원 정보 수정',
165 textScaleFactor: 1.0, 165 textScaleFactor: 1.0,
166 style: TextStyle( 166 style: TextStyle(
167 color: Colors.white, 167 color: Colors.white,
......
...@@ -10,7 +10,42 @@ class Bluetooth extends StatefulWidget { ...@@ -10,7 +10,42 @@ class Bluetooth extends StatefulWidget {
10 FlutterBlue flutterBlue; 10 FlutterBlue flutterBlue;
11 11
12 class _BluetoothState extends State<Bluetooth> { 12 class _BluetoothState extends State<Bluetooth> {
13 + @override
14 + void initState() {
15 + super.initState();
16 + flutterBlue = FlutterBlue.instance;
17 + }
18 +
19 + void _startscan() {
20 + flutterBlue.startScan(timeout: Duration(seconds: 12));
21 + var subscription = flutterBlue.scanResults.listen((results) {
22 + // do something with scan results
23 + for (ScanResult r in results) {
24 + print(
25 + 'Device Name : ${r.device.name} // Device ID : ${r.device.id} // Device rssi: ${r.rssi}');
26 + }
27 + });
28 + }
29 +
13 Widget build(BuildContext context) { 30 Widget build(BuildContext context) {
31 + Widget _buildItem(ScanResult s) {
32 + return ListTile(
33 + leading: Text(s.rssi.toString()),
34 + title: Text(s.device.name),
35 + subtitle: Text(s.device.id.id),
36 + onTap: () =>
37 + Navigator.of(context).push(MaterialPageRoute(builder: (context) {
38 + return Device(device: s.device);
39 + })),
40 + );
41 + }
42 +
43 + Widget _buildList(List<ScanResult> scanResults) {
44 + return Column(
45 + children: scanResults.map((v) => _buildItem(v)).toList(),
46 + );
47 + }
48 +
14 return MaterialApp( 49 return MaterialApp(
15 title: 'Welcome to Flutter', 50 title: 'Welcome to Flutter',
16 home: Scaffold( 51 home: Scaffold(
...@@ -65,10 +100,80 @@ class _BluetoothState extends State<Bluetooth> { ...@@ -65,10 +100,80 @@ class _BluetoothState extends State<Bluetooth> {
65 ], 100 ],
66 ), 101 ),
67 ), 102 ),
68 - body: Center( 103 + body: SingleChildScrollView(
69 - child: Text('약병 내부 페이지 작업 영역'), 104 + child: StreamBuilder<List<ScanResult>>(
105 + stream: FlutterBlue.instance.scanResults,
106 + initialData: [],
107 + builder: (c, snapshot) {
108 + return _buildList(snapshot.data);
109 + }),
70 ), 110 ),
111 + floatingActionButton: StreamBuilder<bool>(
112 + stream: FlutterBlue.instance.isScanning,
113 + initialData: false,
114 + builder: (c, snapshot) {
115 + if (snapshot.data) {
116 + return FloatingActionButton(
117 + child: Icon(Icons.stop),
118 + onPressed: () => FlutterBlue.instance.stopScan(),
119 + backgroundColor: Colors.red,
120 + );
121 + } else {
122 + return FloatingActionButton(
123 + child: Icon(Icons.search),
124 + onPressed: () => FlutterBlue.instance
125 + .startScan(timeout: Duration(seconds: 4)));
126 + }
127 + },
128 + ),
129 + ),
130 + );
131 + }
132 +}
133 +
134 +class Device extends StatefulWidget {
135 + Device({Key key, this.device}) : super(key: key);
136 + final BluetoothDevice device;
137 + @override
138 + _DeviceState createState() => _DeviceState();
139 +}
140 +
141 +class _DeviceState extends State<Device> {
142 + void initState() {
143 + super.initState();
144 + widget.device.connect();
145 + }
146 +
147 + @override
148 + void dispose() {
149 + widget.device.disconnect();
150 + super.dispose();
151 + }
152 +
153 + Widget _buildIconButton() {
154 + return StreamBuilder<BluetoothDeviceState>(
155 + stream: widget.device.state,
156 + initialData: BluetoothDeviceState.connecting,
157 + builder: (c, snapshot) {
158 + if (snapshot.data != BluetoothDeviceState.connected)
159 + return Icon(Icons.warning);
160 + return IconButton(
161 + icon: Icon(Icons.bluetooth_searching),
162 + onPressed: () => widget.device.discoverServices(),
163 + );
164 + });
165 + }
166 +
167 + @override
168 + Widget build(BuildContext context) {
169 + return Scaffold(
170 + appBar: AppBar(
171 + title: Text(widget.device.name),
172 + actions: <Widget>[
173 + _buildIconButton(),
174 + ],
71 ), 175 ),
176 + body: Text('hello'),
72 ); 177 );
73 } 178 }
74 } 179 }
......