From f0759467a82993e998bab691cc04b9e7695eee9f Mon Sep 17 00:00:00 2001 From: Ivan Murashov Date: Tue, 11 Jul 2017 17:19:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B8=D0=BC=D0=B8=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D1=81=D1=82=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D0=BA=D0=B0,=20=D1=81=20=D0=BF=D1=80=D0=BE=D0=BA?= =?UTF-8?q?=D1=80=D1=83=D1=87=D0=B8=D0=B2=D0=B0=D1=8E=D1=89=D0=B8=D0=BC?= =?UTF-8?q?=D1=81=D1=8F=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=BE=D0=BC=20?= =?UTF-8?q?=D0=B8=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=BE=D0=B2=D1=8B=D0=BC?= =?UTF-8?q?=20=D0=B2=D0=B2=D0=BE=D0=B4=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 10 ++ .../com/yourcompany/checker/MainActivity.java | 2 +- lib/main.dart | 146 +++++++++++------- restart_adb | 4 + 4 files changed, 102 insertions(+), 60 deletions(-) create mode 100644 .gitignore create mode 100755 restart_adb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb15c3d --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +.atom/ +.idea +.packages +.pub/ +build/ +ios/.generated/ +packages +pubspec.lock +.flutter-plugins diff --git a/android/app/src/main/java/com/yourcompany/checker/MainActivity.java b/android/app/src/main/java/com/yourcompany/checker/MainActivity.java index 6f1b4a6..062f6a1 100644 --- a/android/app/src/main/java/com/yourcompany/checker/MainActivity.java +++ b/android/app/src/main/java/com/yourcompany/checker/MainActivity.java @@ -11,4 +11,4 @@ public class MainActivity extends FlutterActivity { super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this); } -} +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index f534d9f..5ed9757 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,74 +1,102 @@ import 'package:flutter/material.dart'; +const String _name = "Ivan Murashov"; + void main() { - runApp(new MyApp()); + runApp(new DemoApp()); } -class MyApp extends StatelessWidget { - // This widget is the root of your application. - @override - Widget build(BuildContext context) { - return new MaterialApp( - title: 'Flutter Demo', - theme: new ThemeData( - // This is the theme of your application. - // - // Try running your application with "flutter run". You'll see - // the application has a blue toolbar. Then, without quitting - // the app, try changing the primarySwatch below to Colors.green - // and then invoke "hot reload" (press "r" in the console where - // you ran "flutter run", or press Run > Hot Reload App in - // IntelliJ). Notice that the counter didn't reset back to zero; - // the application is not restarted. - primarySwatch: Colors.blue, - ), - home: new RegistrationPage(title: 'Flutter Demo Home Page'), - ); +class DemoApp extends StatelessWidget { + @override Widget build(BuildContext context) { + return new MaterialApp(title: "DemoApp", home: new ChatScreen()); } } -class RegistrationPage extends StatefulWidget { - RegistrationPage({Key key, this.title}) : super(key: key); - - // This widget is the home page of your application. It is stateful, - // meaning that it has a State object (defined below) that contains - // fields that affect how it looks. - - // This class is the configuration for the state. It holds the - // values (in this case the title) provided by the parent (in this - // case the App widget) and used by the build method of the State. - // Fields in a Widget subclass are always marked "final". - - final String title; - - @override - _RegistrationPageState createState() => new _RegistrationPageState(); +class ChatScreen extends StatefulWidget { + @override State createState() => new ChatScreenState(); } -class _RegistrationPageState extends State { - int _counter = 0; +class ChatScreenState extends State { - void _incrementCounter() { - setState(() { - // This call to setState tells the Flutter framework that - // something has changed in this State, which causes it to rerun - // the build method below so that the display can reflect the - // updated values. If we changed _counter without calling - // setState(), then the build method would not be called again, - // and so nothing would appear to happen. - _counter++; - }); + final List _messages = []; + final TextEditingController _textController = new TextEditingController(); + + @override Widget build(BuildContext context) { + return new Scaffold(appBar: new AppBar( + title: new Text("DemoApp")), body: _buildScreen()); } - @override - Widget build(BuildContext context) { - return new Scaffold(appBar: new AppBar(title: new Text(widget.title)), - body: new Column(children: [ - new Container(height:48.0, - alignment: FractionalOffset.center, - child: new TextField(decoration: new InputDecoration.collapsed(hintText: 'Deliver features faster'))), - new Container(height:48.0, - alignment: FractionalOffset.center, - child: new TextField(decoration: new InputDecoration.collapsed(hintText:'Deliver features faster')))])); + Widget _buildScreen() { + return new Column(children: [ + new Flexible(child: new ListView.builder( + padding: new EdgeInsets.all(8.0), + reverse: true, + itemBuilder: (_, int index) => _messages[index], + itemCount: _messages.length)), + new Divider(height: 1.0), + new Container(decoration: _getDecoratedScreenComposer(), + child: _buildStyledTextComposer()) + ]); + } + + BoxDecoration _getDecoratedScreenComposer() { + return new BoxDecoration(color: Theme.of(context).cardColor); + } + + Widget _buildStyledTextComposer() { + return new IconTheme(data: _getIconThemeData(), child: _buildTextComposer()); + } + + IconThemeData _getIconThemeData() { + return new IconThemeData(color: Theme.of(context).accentColor); + } + + Widget _buildTextComposer() { + return new Container(margin: const EdgeInsets.symmetric(horizontal: 8.0), + child: _buildInputFieldRow()); + } + + Row _buildInputFieldRow() { + var textField = new InputDecoration.collapsed(hintText: "Send a message"); + return new Row(children: [ + new Flexible(child: new TextField(controller: _textController, + onSubmitted: _handleSubmitted, + decoration: textField)), + new Container(margin: new EdgeInsets.symmetric(horizontal: 4.0), + child: new IconButton(icon: new Icon(Icons.send), + onPressed: () => _handleSubmitted(_textController.text))) + ]); + } + + void _handleSubmitted(String text) { + _textController.clear(); + ChatMessage message = new ChatMessage(text); + setState(() {_messages.insert(0, message);}); } } + +class ChatMessage extends StatelessWidget { + + final String text; + + ChatMessage(this.text); + + @override Widget build(BuildContext context) { + return new Container(margin: const EdgeInsets.symmetric(vertical: 8.0), + child: _getMessageRow(context)); + } + + Widget _getMessageRow(BuildContext context) { + return new Row(crossAxisAlignment: CrossAxisAlignment.start, + children: [ + new Container(margin: const EdgeInsets.only(right: 16.0), + child: new CircleAvatar(child: new Text(_name[0]))), + new Column(crossAxisAlignment: CrossAxisAlignment.start, + children: [ + new Text(_name, style: Theme.of(context).textTheme.subhead), + new Container(margin: const EdgeInsets.only(top: 4.0), + child: new Text(text)) + ]) + ]); + } +} \ No newline at end of file diff --git a/restart_adb b/restart_adb new file mode 100755 index 0000000..9f9ce45 --- /dev/null +++ b/restart_adb @@ -0,0 +1,4 @@ +#! /bin/bash + +sudo $ANDROID_HOME/platform-tools/./adb kill-server +sudo $ANDROID_HOME/platform-tools/./adb start-server