GVKun编程网logo

android – 如何将Flutter App连接到sql server(flutter怎么连接数据库)

21

本文将介绍android–如何将FlutterApp连接到sqlserver的详细情况,特别是关于flutter怎么连接数据库的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个

本文将介绍android – 如何将Flutter App连接到sql server的详细情况,特别是关于flutter怎么连接数据库的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Android APP 打开 flutter app 并传递参数、android – Flutter App与背景音乐(外部)、android – 在flutter app中添加图片、android – 如何将消息从Flutter传递给Native?的知识。

本文目录一览:

android – 如何将Flutter App连接到sql server(flutter怎么连接数据库)

android – 如何将Flutter App连接到sql server(flutter怎么连接数据库)

一些上下文:Db已经存在且应用程序是供公司内部使用的,这就是为什么我没有做API的原因

大家好,我需要将我的应用程序连接到sql服务器以执行查询并从中检索数据.

我已经尝试过这个插件但没有成功SqlJocky5

有人已经做了类似的事情与颤动吗?你是怎么做到的?有另一个库用于连接应用程序与sql服务器?
所以,我正在寻找的是,如果有一个库,就像在Xamarin Forms(sqlClient)或Android Studio Java(JDBC驱动程序)中那样做

提前致谢

解决方法:

我试着问一个问题但我得到了阻止,因为我没有回答一些问题.

这是答案:

来自@Abner Hernandez的https://groups.google.com/forum/#!topic/flutter-dev/GO9ilukcoN4

第一:你需要一个sqlServerSocket:https://github.com/nippur72/SqlServerSocket是免费的,有效!
第二:你需要一个客户端https://github.com/nippur72/SqlServerSocket(查看DartClient文件夹).
我做了几个连接,效果很好.

当然,它不是“易于使用,点击2或3次,编程较少……”但是,你可以“实现一个简单的SELECT * FROM XXX并在两个设备(IOS和Android)上显示结果扑.”我做的.!

是的我用我的远程sql测试它并正在研究CRUD.我还没有测试广泛的查询.

günter-zöchbauer提供最佳实践.

您应该使用AQUEDUCT aqueduct.io并创建一个web api,以便您的Flutter应用程序更安全地连接到服务器.

Android APP 打开 flutter app 并传递参数

Android APP 打开 flutter app 并传递参数

1 flutter Android 端配置

1.1 manifest 配置修改

<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTop"
    android:theme="@style/LaunchTheme"
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize">
    <!-- Specifies an Android theme to apply to this Activity as soon as
         the Android process has started. This theme is visible to the user
         while the Flutter UI initializes. After that, this theme continues
         to determine the Window background behind the Flutter UI. -->
    <meta-data
      android:name="io.flutter.embedding.android.NormalTheme"
      android:resource="@style/NormalTheme"
      />
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
        <!-- 添加如下代码 -->
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

1.2 在 Android 源代码的 mainActivity 为如下代码

package com.swan.flutter_framework

import android.os.Bundle
import io.flutter.plugin.common.MethodChannel
import io.flutter.embedding.android.FlutterActivity

class MainActivity : FlutterActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        //FlutterMain.startInitialization(this);
        super.onCreate(savedInstanceState)

       // GeneratedPluginRegistrant.registerWith(FlutterEngine(this)) // here is the error: Type mismatch. Required: FlutterEngine! Found: MainActivity
        //接收第三方app调运参数并且传递给flutter
        MethodChannel(flutterEngine?.dartExecutor, CHANNEL).setMethodCallHandler { call, result ->
            if (call.method == InvokeMethod) {
                val greetings = successNativeCode()
                result.success(greetings)
            }
        }
    }

    private fun successNativeCode(): String {
        return "我是android原生跑过来的数据=>${intent.getStringExtra("test")}"
    }

    companion object {
        private const val CHANNEL = "com.swan.shareData"
        private const val InvokeMethod = "shareData"
    }
}

1.3 在要接受回传内容的 dart 文件中这样写

getSharedText() async {
  const String CHANNEL = "com.swan.shareData"; //这儿要与MethodChannel(flutterEngine?.dartExecutor, CHANNEL)中CHANNEL名称一致
  const String invokeMethod = "shareData"; //这儿要与 call.method == invokeMethod中invokeMethod名称一致
  var channel = const MethodChannel(CHANNEL);
  var result = await channel.invokeMethod(invokeMethod);
  ToastUtils.showToast("message=>$result");
  print(''message=>$result'');
}

1.4 源代码

  • android 端
package com.swan.flutter_framework

import android.os.Bundle
import io.flutter.plugin.common.MethodChannel
import io.flutter.embedding.android.FlutterActivity

class MainActivity : FlutterActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        //FlutterMain.startInitialization(this);
        super.onCreate(savedInstanceState)

       // GeneratedPluginRegistrant.registerWith(FlutterEngine(this)) // here is the error: Type mismatch. Required: FlutterEngine! Found: MainActivity
        //接收第三方app调运参数并且传递给flutter
        MethodChannel(flutterEngine?.dartExecutor, CHANNEL).setMethodCallHandler { call, result ->
            if (call.method == InvokeMethod) {
                val greetings = successNativeCode()
                result.success(greetings)
            }
        }
    }

    private fun successNativeCode(): String {
        return "我是android原生跑过来的数据=>${intent.getStringExtra("test")}"
    }

    companion object {
        private const val CHANNEL = "com.swan.shareData"
        private const val InvokeMethod = "shareData"
    }
}
  • dart
import ''package:flutter/material.dart'';
import ''package:flutter/services.dart'';
import ''package:flutter_framework/app/navigator/my_bottom_app_bar.dart'';
import ''package:flutter_framework/app/pages/first_guild_page.dart'';

/// @Description 应用启动闪屏页
/// @Author swan
/// @Date 2021/12/30 9:37 上午
///
class IndexPage extends StatefulWidget {
  const IndexPage({Key? key}) : super(key: key);

  @override
  _IndexPageState createState() => _IndexPageState();
}

class _IndexPageState extends State<IndexPage> with ProtocolModel,CheckUpdateUtil{
    getSharedText() async {
      const String CHANNEL = "com.swan.shareData"; //这儿要与MethodChannel(flutterEngine?.dartExecutor, CHANNEL)中CHANNEL名称一致
      const String invokeMethod = "shareData"; //这儿要与 call.method == invokeMethod中invokeMethod名称一致
      var channel = const MethodChannel(CHANNEL);
      var result = await channel.invokeMethod(invokeMethod);
      ToastUtils.showToast("message=>$result");
      print(''message=>$result'');
    }
  // 页面的初始化函数
  @override
  void initState() {
    super.initState();
    // 1 检查权限
    WidgetsBinding.instance?.addPostFrameCallback((timeStamp) {
      // 2 用户权限和隐私政策
      initDataNext();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Image.asset(Res.welcome),
      ),
    );
  }

  /// 初始化工具类
  Future<void> initDataNext() async {
    getSharedText();
  }
}

2 打开 APP 调用代码

Intent intent = new Intent();
//参数:包名,要打开的类名
intent.setClassName("com.swan.flutter_framework","com.swan.fluter_framework.MainActivity");
intent.putExtra("test","test");
startActivity(intent);

android – Flutter App与背景音乐(外部)

android – Flutter App与背景音乐(外部)

在后台运行的应用程序(即Google Play音乐,Apple Music,Spotify等)上播放音乐时,如果您在颤动应用中播放任何音频,则背景音乐会停止/暂停,并且在音频完成后不会重新启动播放.

我已经尝试使用iOS上的TTS库和AudioPlayer库.

关于如何在我的音频完成后恢复播放背景音频的任何提示(这实际上只是一个2/3秒的短语)?

尚不确定这是否会影响Android.

注意:在此示例中使用TTS,但它发生在我尝试过的每个库中.

Pubspec.yaml

tts: "^1.0.1"

码:

import 'package:Flutter/material.dart';
import 'package:tts/tts.dart';

void main() => runApp(new MyApp());

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(
        primarySwatch: Colors.red,
      ),
      home: new AudioExample(),
    );
  }
}

class AudioExample extends StatefulWidget {
  @override
  _AudioExampleState createState() => _AudioExampleState();
}

class _AudioExampleState extends State<AudioExample> {

  speak() async {
    Tts.speak('Hello World');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: new Text('Audio example app'),
      ),
      body: Container(
        width: double.infinity,
        height: double.infinity,
        decoration: Boxdecoration(
          color: Colors.grey[300],
        ),
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            IconButton(
              icon: Icon(Icons.play_arrow),
              onpressed: speak,
              color: Colors.red,
              iconSize: 100.0,
            ),
            new Padding(
              padding: const EdgeInsets.all(20.0),
              child: Text(
                  'Will say hello world once clicked and pause background audio on iOS - how to restart background audio after playing has finished?',
                textAlign: TextAlign.center,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

解决方法:

你可以在Java文件中添加音乐而不是颤动并添加循环转到android / app / src / main / java / com / example / ProjectName / MainActivity.java

并添加

  mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.MusicName);
  mediaPlayer.setLooping(true);
  mediaPlayer.start();
  mediaPlayer.setLooping(true);

在onCreate方法中,转到名为res的文件夹,在其中创建一个名为raw的文件夹,并在其中输入您的音乐

android – 在flutter app中添加图片

android – 在flutter app中添加图片

我是第一次开发Flutter应用程序..我在添加图像时遇到了问题.我有以下问题:

>在哪里创建图像文件夹?
>在pubspec.ymal中添加资产标签的位置?
>这需要资产文件夹吗?

我尝试了什么:

assets:
    - images/lake.jpg

在pubspec.ymal里面:

完整档案:

name: my_Flutter_app
description: A new Flutter application.

dependencies:
  Flutter:
    sdk: Flutter

  cupertino_icons: ^0.1.2

dev_dependencies:
  Flutter_test:
    sdk: Flutter

Flutter:
  uses-material-design: true,assets:
    - images/lake.jpg

错误日志:

#/properties/Flutter/properties/uses-material-design: type: wanted [boolean] got true,Error detected in pubspec.yaml:
Error building assets

FAILURE: Build Failed with an exception.

* Where:
Script '/home/abc/Downloads/Flutter/packages/Flutter_tools/gradle/Flutter.gradle' line: 435

* What went wrong:
Execution Failed for task ':app:FlutterBuildDebug'.
> Process 'command '/home/abc/Downloads/Flutter/bin/Flutter'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

BUILD Failed in 1s
Finished with error: Gradle build Failed: 1

我的main.dart代码:

// copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:Flutter/material.dart';
// Uncomment lines 7 and 10 to view the visual layout at runtime.
//import 'package:Flutter/rendering.dart' show debugPaintSizeEnabled;

void main() {
  //debugPaintSizeEnabled = true;
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Widget titleSection = new Container(
      padding: const EdgeInsets.all(32.0),child: new Row(
        children: [
          new Expanded(
            child: new Column(
              crossAxisAlignment: CrossAxisAlignment.start,children: [
                new Container(
                  padding: const EdgeInsets.only(bottom: 8.0),child: new Text(
                    'Oeschinen Lake Campground',style: new TextStyle(
                      fontWeight: FontWeight.bold,),new Text(
                  'Kandersteg,Switzerland',style: new TextStyle(
                    color: Colors.grey[500],],new Icon(
            Icons.star,color: Colors.red[500],new Text('41'),);

    Column buildButtonColumn(IconData icon,String label) {
      Color color = Theme.of(context).primaryColor;

      return new Column(
        mainAxisSize: MainAxisSize.min,mainAxisAlignment: MainAxisAlignment.center,children: [
          new Icon(icon,color: color),new Container(
            margin: const EdgeInsets.only(top: 8.0),child: new Text(
              label,style: new TextStyle(
                fontSize: 12.0,fontWeight: FontWeight.w400,color: color,);
    }

    Widget buttonSection = new Container(
      child: new Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [
          buildButtonColumn(Icons.call,'CALL'),buildButtonColumn(Icons.near_me,'ROUTE'),buildButtonColumn(Icons.share,'SHARE'),);

    Widget textSection = new Container(
      padding: const EdgeInsets.all(32.0),child: new Text(
        '''
Lake Oeschinen lies at the foot of the Blüemlisalp in the Bernese Alps. Situated 1,578 meters above sea level,it is one of the larger Alpine Lakes. A gondola ride from Kandersteg,followed by a half-hour walk through pastures and pine forest,leads you to the lake,which warms to 20 degrees Celsius in the summer. Activities enjoyed here include rowing,and riding the summer toboggan run.
        ''',softWrap: true,);

    return new MaterialApp(
      title: 'Flutter Demo',home: new Scaffold(
        appBar: new AppBar(
          title: new Text('Top Lakes'),body: new ListView(
          children: [
            new Image.asset(
              'images/lake.jpg',width: 600.0,height: 240.0,fit: BoxFit.cover,titleSection,buttonSection,textSection,);
  }
}

我指的是这个教程https://flutter.io/tutorials/layout/

另外我想问一下,有什么工具可以在颤动中进行干净的重建,因为我找不到任何选择.

任何帮助,将不胜感激.

谢谢 !

解决方法

我认为错误是由多余的,

Flutter:
  uses-material-design: true,# <<< redundant,at the end of the line
  assets:
    - images/lake.jpg

我还建议在包含pubspec.yaml文件的目录中创建一个assets文件夹,并在那里移动图像并使用

Flutter:
  uses-material-design: true
  assets:
    - assets/images/lake.jpg

如果将资产放在其他位置,资产目录将获得一些额外的IDE支持.

android – 如何将消息从Flutter传递给Native?

android – 如何将消息从Flutter传递给Native?

如果需要与特定的API /硬件组件进行交互,您如何将Flutter的信息传递回 Android / Native代码?

是否有任何事件频道可以通过其他方式发送信息或类似于回调?

> platform_channel文档指出“方法调用也可以反向发送,平台充当Dart实现的方法的客户端.具体的例子是quick_actions plugin.”在本例中,我没有看到本机端如何从Flutter接收消息.
>看起来像BasicMessageChannel的send()方法可用于将“指定的消息发送到此通道上的平台插件”.任何人都可以提供一个简单的实现示例吗?

解决方法

这是一个简单的实现展示:

>将字符串值从Flutter传递到Android代码
>从Android代码中获取响应以振荡

代码基于以下示例:https://flutter.io/platform-channels/#codec

1.Passing字符串值“text”:

String text = "whatever";

Future<Null> _getbatterylevel(text) async {
String batterylevel;
try {
  final String result = await platform.invokeMethod('getbatterylevel',{"text":text}); 
  batterylevel = 'Battery level at $result % .';
} on PlatformException catch (e) {
  batterylevel = "Failed to get battery level: '${e.message}'.";
}

setState(() {
  _batterylevel = batterylevel;
});

}

2.在RandomFunction()之后获取响应“batterylevel”;

public void onMethodCall(MethodCall call,MethodChannel.Result result) {
                    if (call.method.equals("getbatterylevel")) {

                        text = call.argument("text");
                        String batterylevel = RandomFunction(text);

                        if (batterylevel != null) {
                            result.success(batterylevel);
                        } else {
                            result.error("UNAVAILABLE","Battery level not available.",null);
                        }
                    } else {
                        result.notImplemented();
                    }
                }

希望这可以帮助!

我们今天的关于android – 如何将Flutter App连接到sql serverflutter怎么连接数据库的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android APP 打开 flutter app 并传递参数、android – Flutter App与背景音乐(外部)、android – 在flutter app中添加图片、android – 如何将消息从Flutter传递给Native?的相关信息,请在本站查询。

本文标签: