Flutter问卷调查与数据分析插件qualtrics_digital_flutter_plugin的使用

Flutter问卷调查与数据分析插件qualtrics_digital_flutter_plugin的使用

在本指南中,我们将展示如何在Flutter应用程序中使用qualtrics_digital_flutter_plugin插件来执行问卷调查和数据分析。通过此插件,您可以轻松地初始化项目、评估拦截、设置自定义属性等。

示例代码

以下是完整的示例代码,展示了如何使用qualtrics_digital_flutter_plugin插件:

import 'package:flutter/material.dart';
import 'package:qualtrics_digital_flutter_plugin/qualtrics_digital_flutter_plugin.dart';

void main() => runApp(const FlutterTestApp());

class FlutterTestApp extends StatelessWidget {
  const FlutterTestApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Test App',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('FlutterTestApp'),
        ),
        body: LayoutBuilder(
          builder: (BuildContext context, BoxConstraints viewportConstraints) {
            return SingleChildScrollView(
              child: ConstrainedBox(
                constraints: BoxConstraints(
                  minHeight: viewportConstraints.maxHeight,
                ),
                child: Column(
                  children: const [InterceptDetails()],
                ),
              ),
            );
          },
        ),
      ),
    );
  }
}

class InterceptDetails extends StatefulWidget {
  const InterceptDetails({Key? key}) : super(key: key);

  [@override](/user/override)
  _InterceptDetailsState createState() => _InterceptDetailsState();
}

class _InterceptDetailsState extends State<InterceptDetails> {
  String brandId = '';
  String zoneId = '';
  String interceptId = '';

  final _brandIdController = TextEditingController();
  final _zoneIdController = TextEditingController();
  final _interceptIdController = TextEditingController();
  final _resultTextFieldController = TextEditingController();
  final _extRefIdTextFieldController = TextEditingController();
  final _stringCustomPropertyKeyController = TextEditingController();
  final _stringCustomPropertyValueController = TextEditingController();
  final _numberCustomPropertyKeyController = TextEditingController();
  final _numberCustomPropertyValueController = TextEditingController();
  final _viewNameController = TextEditingController();
  final _dateNameKeyController = TextEditingController();

  var qualtrics = QualtricsDigitalFlutterPlugin();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(15),
      child: Column(
        children: <Widget>[
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              _getTextField("brandId", _brandIdController),
              const SizedBox(width: 10.0),
              _getTextField("zoneId", _zoneIdController),
              const SizedBox(width: 10.0),
              _getTextField("interceptId", _interceptIdController)
            ],
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              _getTextField("extRefId", _extRefIdTextFieldController),
              const SizedBox(width: 10.0),
              _getTextButton("InitializeWithExtRefId", _initializeWithExtRefId)
            ],
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              _getTextButton("InitializeProject", _initializeProject),
              const SizedBox(width: 10.0),
              _getTextButton("EvaluateProject", _evaluateProject),
              const SizedBox(width: 10.0),
              _getTextButton("Display", _display)
            ],
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              _getTextButton("EvaluateIntercept", _evaluateIntercept),
              const SizedBox(width: 10.0),
              _getTextButton("DisplayIntercept", _displayIntercept),
            ],
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              _getTextField("StringKey", _stringCustomPropertyKeyController),
              const SizedBox(width: 10.0),
              _getTextField("StringValue", _stringCustomPropertyValueController),
              const SizedBox(width: 10.0),
              _getTextButton("SetString", _setString)
            ],
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              _getTextField("NumberKey", _numberCustomPropertyKeyController),
              const SizedBox(width: 10.0),
              _getTextField("NumberValue", _numberCustomPropertyValueController),
              const SizedBox(width: 10.0),
              _getTextButton("SetNumber", _setNumber)
            ],
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              _getTextField("DateKey", _dateNameKeyController),
              const SizedBox(width: 10.0),
              _getTextButton("SetDateTime", _setDateTime)
            ],
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              _getTextField("viewName", _viewNameController),
              const SizedBox(width: 10.0),
              _getTextButton("RegisterViewVisit", _registerViewVisit)
            ],
          ),
          Row(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Flexible(
                child: TextField(
                  key: const Key("resultBox"),
                  enabled: false,
                  keyboardType: TextInputType.multiline,
                  maxLines: 15,
                  minLines: 3,
                  controller: _resultTextFieldController,
                  decoration: const InputDecoration(
                    border: OutlineInputBorder(),
                  ),
                ),
              ),
            ],
          ),
        ],
      ),
    );
  }

  Widget _getTextField(String hintText, TextEditingController controller) {
    return Flexible(
      child: TextField(
        controller: controller,
        key: Key(hintText),
        decoration: InputDecoration(
          border: const UnderlineInputBorder(),
          labelText: hintText,
        ),
      ),
    );
  }

  Widget _getTextButton(String buttonText, Function() onPress) {
    return TextButton(onPressed: onPress, child: Text(buttonText), key: Key(buttonText));
  }

  Future<void> _initializeProject() async {
    var initResults = await qualtrics.initializeProject(
        _brandIdController.text, _zoneIdController.text);
    _resultTextFieldController.text = initResults.toString();
  }

  Future<void> _initializeWithExtRefId() async {
    var initResults = await qualtrics.initializeProjectWithExtRefId(
        _brandIdController.text, _zoneIdController.text, _extRefIdTextFieldController.text);
    _resultTextFieldController.text = initResults.toString();
  }

  Future<void> _evaluateProject() async {
    String result = "";
    var evaluateProjectResult = await qualtrics.evaluateProject();
    for (var interceptId in evaluateProjectResult.keys) {
      var targetingResult = evaluateProjectResult[interceptId]!.cast<String, String>();
      var passed = targetingResult["passed"];
      var surveyUrl = targetingResult["surveyUrl"];
      result = '$result\n$interceptId: passed: $passed surveyUrl: $surveyUrl';
    }
    _resultTextFieldController.text = result;
  }

  Future<void> _display() async {
    var displayed = await qualtrics.display();
    _resultTextFieldController.text = displayed.toString();
  }

  Future<void> _evaluateIntercept() async {
    String result = "";
    var evaluateInterceptResult = await qualtrics.evaluateIntercept(_interceptIdController.text);
    result = '${evaluateInterceptResult["interceptId"]}: passed: ${evaluateInterceptResult["passed"]}, surveyUrl: ${evaluateInterceptResult["surveyUrl"]}';
    _resultTextFieldController.text = result;
  }

  Future<void> _displayIntercept() async {
    var displayed = await qualtrics.displayIntercept(_interceptIdController.text);
    _resultTextFieldController.text = displayed.toString();
  }

  Future<void> _setString() async {
    await qualtrics.setString(_stringCustomPropertyKeyController.text, _stringCustomPropertyValueController.text);
  }

  Future<void> _setNumber() async {
    await qualtrics.setNumber(_numberCustomPropertyKeyController.text, double.parse(_numberCustomPropertyValueController.text));
  }

  Future<void> _setDateTime() async {
    await qualtrics.setDateTime(_dateNameKeyController.text);
  }

  Future<void> _registerViewVisit() async {
    await qualtrics.registerViewVisit(_viewNameController.text);
  }
}

更多关于Flutter问卷调查与数据分析插件qualtrics_digital_flutter_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter问卷调查与数据分析插件qualtrics_digital_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 qualtrics_digital_flutter_plugin 插件来创建和运行问卷调查的示例代码。这个插件允许Flutter开发者集成Qualtrics问卷调查功能到他们的应用中。

首先,确保你的Flutter项目已经设置好,并且已经添加了 qualtrics_digital_flutter_plugin 依赖。你可以在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  qualtrics_digital_flutter_plugin: ^最新版本号  # 请替换为实际的最新版本号

然后运行 flutter pub get 来获取依赖。

接下来,我们编写一些Flutter代码来使用这个插件。以下是一个简单的示例,展示如何在Flutter应用中集成和使用Qualtrics问卷调查。

import 'package:flutter/material.dart';
import 'package:qualtrics_digital_flutter_plugin/qualtrics_digital_flutter_plugin.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Qualtrics Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final QualtricsDigitalFlutterPlugin _qualtricsPlugin = QualtricsDigitalFlutterPlugin();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Qualtrics Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Press the button to start the Qualtrics survey',
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // Replace with your actual Qualtrics survey URL
                String surveyUrl = 'https://your-qualtrics-survey-url.com';
                
                // Start the survey
                await _qualtricsPlugin.startSurvey(surveyUrl: surveyUrl);
              },
              child: Text('Start Survey'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。当用户点击按钮时,应用将启动一个Qualtrics问卷调查。你需要将 surveyUrl 替换为你的实际Qualtrics问卷调查的URL。

注意事项

  1. 权限处理:确保你的应用有必要的权限,比如网络权限,以便能够加载和提交问卷调查数据。
  2. 错误处理:在实际应用中,你应该添加错误处理逻辑,比如处理网络错误或问卷加载失败的情况。
  3. 用户数据:根据你的需求,你可能需要在启动问卷调查之前收集一些用户信息,或者将用户信息与问卷调查结果关联起来。

这个示例展示了基本的集成方法,但根据你的具体需求,你可能需要进一步定制和扩展这个插件的使用。

回到顶部