import 'package:flutter/material.dart'; import 'package:mobile_scanner/mobile_scanner.dart'; import 'package:flutter_sms/flutter_sms.dart'; void main() { runApp(const AnalyzeView()); } class AnalyzeView extends StatefulWidget { const AnalyzeView({Key? key}) : super(key: key); @override AnalyzeViewState createState() => AnalyzeViewState(); } class AnalyzeViewState extends State with SingleTickerProviderStateMixin { String? barcode; double number = 1; MobileScannerController controller = MobileScannerController( torchEnabled: false, facing: CameraFacing.back, ); void _sendSMS(String message, List recipents) async { String _result = await sendSMS(message: message, recipients: recipents) .catchError((onError) { print('sms err: $onError'); }); print('sms res: $_result'); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( backgroundColor: Colors.black, body: Builder(builder: (context) { return Stack( children: [ MobileScanner( controller: controller, fit: BoxFit.contain, onDetect: (barcode, args) { if (this.barcode != barcode.rawValue) { setState(() { this.barcode = barcode.rawValue; }); if (barcode.rawValue.startsWith('smsto:1922:')) { List recipents = ['0926381229']; _sendSMS('test2', recipents); } } }), Align( alignment: Alignment.bottomCenter, child: Container( alignment: Alignment.bottomCenter, height: 150, color: Colors.black.withOpacity(0.4), child: Column( children: [ Row( children: [ Center( child: SizedBox( width: MediaQuery.of(context).size.width, height: 80, child: FittedBox( child: Slider( value: number, min: 1, max: 10, label: 'Count $number', onChanged: (v) { setState(() { number = v.toInt().toDouble(); }); }), ), ), ), ], ), Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ IconButton( color: Colors.white, icon: ValueListenableBuilder( valueListenable: controller.torchState, builder: (context, state, child) { switch (state as TorchState) { case TorchState.off: return const Icon(Icons.flash_off, color: Colors.grey); case TorchState.on: return const Icon(Icons.flash_on, color: Colors.yellow); } }, ), iconSize: 32.0, onPressed: () => controller.toggleTorch(), ), Center( child: SizedBox( width: MediaQuery.of(context).size.width - 120, height: 50, child: FittedBox( child: Text( barcode ?? 'Scan something!', overflow: TextOverflow.fade, style: Theme.of(context) .textTheme .headline4! .copyWith(color: Colors.white), ), ), ), ), IconButton( color: Colors.white, icon: ValueListenableBuilder( valueListenable: controller.cameraFacingState, builder: (context, state, child) { switch (state as CameraFacing) { case CameraFacing.front: return const Icon(Icons.camera_front); case CameraFacing.back: return const Icon(Icons.camera_rear); } }, ), iconSize: 32.0, onPressed: () => controller.switchCamera(), ), ], ), ], )), ), // Container( // alignment: Alignment.bottomCenter, // margin: EdgeInsets.only(bottom: 80.0), // child: IconButton( // icon: ValueListenableBuilder( // valueListenable: cameraController.torchState, // builder: (context, state, child) { // final color = // state == TorchState.off ? Colors.grey : Colors.white; // return Icon(Icons.bolt, color: color); // }, // ), // iconSize: 32.0, // onPressed: () => cameraController.torch(), // ), // ), ], ); }), ), ); } @override void dispose() { // cameraController.dispose(); super.dispose(); } void display(Barcode barcode) { Navigator.of(context).popAndPushNamed('display', arguments: barcode); } }