1: stay android It is created under the native root directory by running the command flutter module, This creation and flutter new project
The internal directory structure is different , So create it directly with the command ,

2:new Binding If the sign is red, an error is reported , Let's have a look flutter Import , Or is the directory structure correct ,
evaluate method .groovy File path can be directly spliced with specific path ('XXX/my_flutter/.android/include_flutter.groovy'


3:minSdkVersion The minimum version is 16

4:JDK by 1.8

5: If Executing tasks: [:app:assembleDebug] error , command line ./gradlew assembleDebug

6: If android call flutter Page creation Fragment Replace it on a first come first served basis , There will be a black screen effect packaged as release It's solved
, Default call main.dart Time AppBar There is no return key , So you need to add it manually IconButton, but appBar Return to black screen , Because
It is currently the last page in the stack , Or the main interface , So through Navigator.pop(context) Exit is stack exit ,SystemNavigator.pop(); This is the main interface exit , So when android
Embedded call flutter First interface main.dart You need to use SystemNavigator.pop();


establish Flutter module

In the current project lower Run command  

flutter create -t module my_flutter(my_flutter For generated flutter module name )

Add configuration code

(1) In Engineering settings.gradle Add the following configuration  

(2) stay app ( If your Android The app name is app) Of build.gradle Under the document dependencies Add the following dependencies

among flutter Project created for Flutter module Process generated , Notice that flutter,b

be careful among minSdkVersion Need to be at least 16, Otherwise, it will report an error

The generated project structure is as follows :

Project directory structure

stay Android Create in project Flutter Of UI( call Flutter Medium dart Written widget)

 Flutter There are two methods to introduce , One is View, One is Fragment,View as follows

among , The second parameter is Lifecycle object , The third parameter is route, This parameter Flutter The end can pass through window.defaultRouteName
obtain , Use it flutter Do you know which one to create widget.

In the same way  Flutter.createFragment(String route) Generative FlutterFragment

By the way, white screen will be found after operation , Because of the debug Reasons for running in mode , Ignore it , Final release release It will be very fast in mode

Flutter module support hot reload ( Thermal overload )

Enter flutter module Under the table of contents

Execute the order flutter attach  that will do

The above shows that the connection is successful , As long as there are changes , Keyboard tapping R perhaps r You can see the changes

If you run the command all the time waiting, You can try to kill the application process and restart it , Enter related Flutter The page can be connected


flutter main.dart Document code Import ui call window.defaultRouteName Gets the value passed in , You can judge which page to jump to by passing value

android class : FragmentTransaction fragmentTransaction =
Flutter.createFragment("route1")); fragmentTransaction.commit(); import
'dart:ui'; import 'package:flutter/material.dart'; void main() =>
runApp(widgetForRoute(window.defaultRouteName)); Widget widgetForRoute(String
route) { switch (route) { case 'route1': return new MyApp(); case 'route2':
return new MyApp(); default: return Center( child: Text('Unknown route1 :
$route', textDirection: TextDirection.ltr), ); } } class MyApp extends
StatelessWidget { // This widget is the root of your application. @override
Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo',
theme: 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 > Flutter Hot Reload in a Flutter
IDE). Notice that the // counter didn't reset back to zero; the application is
not restarted. primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter
Demo Home Page'), ); } } class MyHomePage extends StatefulWidget {
MyHomePage({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 _MyHomePageState createState() =>
_MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int
_counter = 0; 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++; }); } @override Widget build(BuildContext context) { //
This method is rerun every time setState is called, for instance as done // by
the _incrementCounter method above. // // The Flutter framework has been
optimized to make rerunning build methods // fast, so that you can just rebuild
anything that needs updating rather // than having to individually change
instances of widgets. return Scaffold( appBar: AppBar( // Here we take the
value from the MyHomePage object that was created by // the App.build method,
and use it to set our appbar title. title: Text(widget.title), ), body: Center(
// Center is a layout widget. It takes a single child and positions it // in
the middle of the parent. child: Column( // Column is also layout widget. It
takes a list of children and // arranges them vertically. By default, it sizes
itself to fit its // children horizontally, and tries to be as tall as its
parent. // // Invoke "debug painting" (press "p" in the console, choose the //
"Toggle Debug Paint" action from the Flutter Inspector in Android // Studio, or
the "Toggle Debug Paint" command in Visual Studio Code) // to see the wireframe
for each widget. // // Column has various properties to control how it sizes
itself and // how it positions its children. Here we use mainAxisAlignment to
// center the children vertically; the main axis here is the vertical // axis
because Columns are vertical (the cross axis would be // horizontal).
mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'You
have pushed the button this many times:', ), Text( '$_counter', style:
Theme.of(context).textTheme.display1, ), ], ), ), floatingActionButton:
FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment',
child: Icon(Icons.add), ), // This trailing comma makes auto-formatting nicer
for build methods. ); } }

©2019-2020 Toolsou All rights reserved,
html Writing about cherry trees , Writing about cherry trees It's unexpected Python Cherry tree (turtle The gorgeous style of Library ) Browser kernel ( understand )HashMap Explain in detail java Four functional interfaces ( a key , simple )os Simple use of module Some East 14 Pay change 16 salary , Sincerity or routine ?